- अगर GUI की ज़रूरत नहीं है, तो सिर्फ ZFS dataset बनाकर उसे Samba से शेयर करने के संयोजन से एक पर्याप्त रूप से सरल network storage तैयार किया जा सकता है
- उदाहरण वातावरण Debian 12 Bookworm, OpenZFS zfs-2.1.1, RAIDZ1, ECC RDIMM 16GB RAM, 4×4TB NVMe SSD पर आधारित है, और encryption तथा backup strategy इस दायरे में शामिल नहीं हैं
- ZFS pool और filesystem की configuration डिस्क पर ही स्टोर करता है, इसलिए OS खराब हो जाने पर भी दूसरी मशीन में
zfs import से डेटा वापस लाया जा सकता है
- डिस्क को
/dev/nvme1 जैसे क्रम-निर्भर नामों की बजाय /dev/disk/by-id या /etc/zfs/vdev_id.conf में दिए गए alias से निर्दिष्ट करना अधिक सुरक्षित है
- वास्तविक network sharing Samba संभालता है, और सामान्य document sharing तथा macOS Time Machine sharing को
docs, backups dataset में अलग करके कॉन्फ़िगर किया जाता है
खुद बनाने वाले न्यूनतम NAS का दायरा
- लक्ष्य यह है कि Synology, QNAP, TrueNAS जैसे full-feature NAS products के बिना basic NAS को सीधे खुद बनाया जाए
- उदाहरण configuration निम्न दायरे तक सीमित है
- RAID level: RAIDZ1, 1 drive failure तक सहनशील
- ऑपरेटिंग सिस्टम: Debian 12 Bookworm
- encryption: नहीं
- ZFS implementation: OpenZFS, zfs-2.1.1
- CPU: 4-core, कम-कीमत Xeon server CPU इस्तेमाल किया जा सकता है
- RAM: ECC RDIMM RAM 16GB
- storage: 4×4TB NVMe SSD
- backup: शामिल नहीं है, अलग configuration की आवश्यकता है
- TrueNAS एक full-featured enterprise-grade software suite के अधिक करीब है, इसलिए जितनी सरल ज़रूरतें हों, उतना ही इसके फीचर्स और आवश्यकताओं के बीच mismatch बढ़ सकता है
- खुद configuration करने पर सिस्टम के हर हिस्से को समझा जा सकता है, और किसी दूसरे software suite पर निर्भर रहना भी ज़रूरी नहीं रहता
ZFS डिस्क पर कौन-सी configuration जानकारी रखता है
- ZFS filesystem self-contained है, इसलिए host OS खराब हो जाने पर भी अगर डिस्क सुरक्षित हैं तो डेटा वापस पाया जा सकता है
- डिस्क को नई मशीन या नए OS से जोड़कर
zfs tool install करने के बाद zfs import चलाने पर मौजूदा pool इम्पोर्ट किया जा सकता है
- ZFS की configuration और details डिस्क पर ही स्टोर होती हैं
- उदाहरण के लिए, अगर 6 डिस्क से RAIDZ2 बनाया गया था, तो उन डिस्क को ZFS tools वाली नई मशीन में ले जाकर सिर्फ
zfs import चलाने पर भी वह RAIDZ2 के रूप में दिखाई देगा
- host OS या मशीन में समस्या होने पर भी, अगर डिस्क खराब नहीं हुई हैं, तो डेटा बना रहता है
डिस्क पहचान और alias configuration
- Linux मशीन में डिस्क सूची
lsblk -d -o TRAN,NAME,TYPE,MODEL,SERIAL,SIZE से देखी जाती है
- उदाहरण में Samsung SSD 990 PRO 4TB NVMe drive की 4 इकाइयाँ इस्तेमाल की गई हैं
- हर डिस्क का
/dev/disk/by-id के नीचे ID और /dev/nvme... device name से जुड़ा symbolic link होता है
/etc/zfs/vdev_id.conf में alias परिभाषित करने से लंबे disk ID को छोटे नाम से map किया जा सकता है
alias nvme0 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
alias nvme1 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
alias nvme2 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
alias nvme3 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
udevadm trigger चलाने या reboot करने पर alias लागू हो जाते हैं
- यह लागू हुआ है या नहीं, इसे
ls -lh /dev/disk/by-vdev से देखा जा सकता है
- Alias mapping वैकल्पिक है; zpool बनाते समय पूरा
/dev/disk/by-id/... path सीधे भी लिखा जा सकता है
/dev/nvme1, /dev/nvme2 जैसे device name से बचना चाहिए, क्योंकि नई drive लगाने पर इनका क्रम निश्चित नहीं रहता
/etc/zfs/vdev_id.conf zpool creation की सुविधा के लिए है; OS खराब होकर यह फ़ाइल खो भी जाए, तब भी ZFS pool पर कोई असर नहीं पड़ता
zpool बनाना और dataset configuration
- उदाहरण में 4 NVMe से RAIDZ1 zpool बनाया जाता है, जो RAID 5 की तरह 1 drive failure तक सहन कर सकता है
- अगर अधिक fault tolerance चाहिए, तो RAIDZ2 यानी RAID 6 configuration अधिक resilient है
- ZFS installation के लिए OpenZFS installation docs देखें; उदाहरण के तौर पर RHEL 9 में
dnf install zfs से install किया जाता है
- zpool बनाते समय
ashift=12 option की सिफारिश की जाती है
- compatibility के कारण कई डिस्क OS को 512KB sector size के रूप में रिपोर्ट करती हैं
- Samsung 990 Pro जैसी high-capacity डिस्क में 4KB या 8KB sector size हो सकती है
ashift=12 4KB sector size को दर्शाता है और performance को काफी बेहतर बना सकता है
- zpool creation के समय यह मान सेट करना आख़िरी मौका होता है
zpool create -o ashift=12 s16z1 raidz1 nvme0 nvme1 nvme2 nvme3
zpool status s16z1
zpool डिस्क abstraction है, और zfs filesystem है
zpool create चलाने पर ZFS filesystem भी साथ में बन जाता है
zdb | grep ashift से ashift: 12 सेट हुआ है या नहीं, यह जाँचा जा सकता है
- share करने से पहले mount point और compression सेट किए जाते हैं
zfs set mountpoint=/mnt/s16z1 s16z1
zfs set compression=lz4 s16z1
- root dataset के नीचे
docs और backups dataset बनाए जाते हैं
zfs create s16z1/docs
zfs create s16z1/backups
docs दस्तावेज़ों के लिए और backups Time Machine backup के लिए इस्तेमाल होता है
- ZFS dataset साधारण folder की तुलना में अधिक फीचर देते हैं
- dataset-स्तर property management
- encryption
- transfer और replication
- snapshots
- बड़े फ़ाइल वर्गों के हिसाब से अलग dataset बनाना बेहतर रहता है
- उदाहरण के लिए, अगर सिर्फ
docs को remote server पर backup करना हो, तो पूरे s16z1 root dataset को भेजने की ज़रूरत नहीं होती
Samba के लिए share account बनाना
- network file sharing का तरीका ZFS से स्वतंत्र है; ZFS का सिर्फ host system पर mount होना ज़रूरी है
- Samba install करें
apt install samba
- Samba के लिए अलग UNIX user
john बनाकर उसका password सेट करें
useradd -m john
passwd john
smbpasswd -a john से UNIX user john को Samba user से जोड़ा जाता है
- कनेक्ट होने वाला host
SYS\\john के रूप में share को access कर सकता है
pdbedit -L -v john से Samba user registration की पुष्टि की जा सकती है
- Samba user हटाने के लिए
pdbedit -x -u john का उपयोग किया जाता है
सामान्य share और Time Machine share
/etc/samba/smb.conf को edit करके docs और backups share configure किए जाते हैं
[docs]
path = /mnt/s16z1/docs
browseable = yes
read only = no
guest ok = no
valid users = john
create mask = 0755
[backups]
path = /mnt/s16z1/backups
read only = no
guest ok = no
inherit acls = yes
spotlight = yes
fruit:aapl = yes
fruit:time machine = yes
vfs objects = catia fruit streams_xattr
valid users = john
docs को सामान्य-purpose SMB share के रूप में configure किया जाता है
backups में macOS Time Machine के लिए आवश्यक properties शामिल हैं
fruit:aapl = yes
fruit:time machine = yes
vfs objects = catia fruit streams_xattr
- macOS में Finder में
cmd+K दबाकर smb://10.0.0.6/docs या smb://10.0.0.6/backups फ़ॉर्मेट से mount किया जाता है
- Debian-आधारित सिस्टम में
smbclient install करने के बाद इस तरह test किया जा सकता है
apt install smbclient
smbclient -U john //10.0.0.6/docs -c 'ls'
smb://10.0.0.6/backups mount करने पर macOS में यह Time Machine share के रूप में दिखाई देता है
- mount के बाद macOS के Settings > General > Time Machine में उस share को जोड़कर Time Machine backup शुरू किया जा सकता है
शामिल नहीं किए गए विषय
- encryption configuration इस प्रक्रिया में शामिल नहीं है
- backup strategy भी शामिल नहीं है
- ZFS dataset replication फीचर को बाद में किसी अलग लेख में विस्तार से शामिल करने की योजना है
1 टिप्पणियां
Hacker News की राय
कीमत के लिहाज़ से अभी NAS बनाना अच्छा समय नहीं है, लेकिन पिछले 2 हफ्तों से मैं एक बना रहा हूँ। मैं Jonsbo N6 case इस्तेमाल कर रहा हूँ, और इसमें 8 SATA backplane और drive bay हैं, इसलिए पुराने Jonsbo models से अलग यह काफ़ी अच्छा है
आख़िरकार मैंने 14TB WD Elements Desktop के 4 drives निकालकर इस्तेमाल करने का फैसला किया, और इनके अंदर helium-filled drive WD140EDGZ निकली। यह 12TB WD Red Plus के 4 drives की तुलना में लगभग एक-तिहाई सस्ती है और performance भी मिलती-जुलती लगती है। warranty निश्चित रूप से एक कमी है, लेकिन अगर 2 साल की warranty अवधि में खराब हो जाए तो शायद इसे फिर से external case में रखा जा सकता है
boot drive के लिए मैंने एक used 256GB M.2 SSD लगाया, और LUKS, TPM key, root ZFS को साथ में इस्तेमाल करते हुए ऐसा सेटअप बनाने में काफ़ी मेहनत लगी कि एक drive fail हो जाए तो भी boot रुक न जाए। इस दौरान systemd-boot के बारे में बहुत सीखा, और यह grub से काफ़ी ज़्यादा ठीक-ठाक लगा
यह भी महसूस हुआ कि ZFS को लेकर बहुत से myths और cargo cult मौजूद हैं। उदाहरण के लिए लेख में ECC RAM का ज़िक्र है, लेकिन यह कहना कि ZFS scrub के दौरान pool खराब कर देगा इसलिए यह ज़रूरी है, लगभग myth जैसा है, और इस साल तो यह ख़ास तौर पर बहुत महँगा है। ZFS को इतना ज़्यादा RAM भी नहीं चाहिए और L2ARC भी बहुत RAM इस्तेमाल नहीं करता
मैं अभी भी सोच रहा हूँ कि
dnodesize=autoरहने दूँ या नहीं, क्योंकि इससे जुड़ी डरावनी कहानियाँ हैं: https://github.com/openzfs/zfs/issues/11353. और उचित कीमत परzfs sendसपोर्ट करने वाला cloud storage provider ढूँढना मुश्किल है, और Rsync.net ने हाल ही में minimum order 10TiB कर दिया है, जो मेरे उपयोग के लिए बहुत बड़ा है: https://www.rsync.net/products/zfsintro.htmlअगर कोई जादुई विकल्प हो, तो मैं शायद लगभग यह चुनूँ कि AI बिल्कुल न हो लेकिन storage की कीमत AI से पहले वाली कीमत की 10% रह जाए
redundancy के लिए मैं पहले ही 2 drives छोड़ चुका हूँ, और हाल ही में एक जैसे batch के लगने वाले 2 SSD लगातार खराब हुए, तो इससे मदद मिली। लेकिन अगर performance और reliability के लिए कम-से-कम एक drive जितनी जगह और खाली छोड़ने की सलाह भी मानूँ, तो मौजूदा कीमतों पर यह काफ़ी दर्दनाक है
https://words.filippo.io/frood/ और https://0pointer.net/blog/fitting-everything-together.html देखने के बाद, मैं home server/NAS को mkosi/systemd से बनाने के तरीक़े देख रहा हूँ। अलग-अलग setups इस समस्या को कैसे हल करते हैं, यह देखना दिलचस्प है
/bootencrypted और tamper-protected रहता है, और क्या यह evil maid attack के ख़िलाफ़ टिकता हैयह एक rabbit hole है, लेकिन अगर किसी ने यह सब हल कर लिया है तो यह सच में दिलचस्प है
https://www.samsung.com/us/memory-storage/nvme-ssd/990-pro-p...
NAS पर उपयोगी लगी चीज़ें: avahi-daemon install करने पर Samba अपने-आप SMB/CIFS को DNS-SD के ज़रिए macOS और Linux clients पर advertise करता है
Windows 10 या उसके बाद के versions में, जिन clients पर SMB 1.0 बंद है, उनके Explorer auto-discovery के लिए wsdd2 install कर सकते हैं
Linux hostnames आमतौर पर lowercase होते हैं, लेकिन Samba default रूप से NetBIOS और Avahi में uppercase से शुरू होने वाले नाम publish करता है। अगर यह खटकता हो, तो
/etc/avahi/avahi-daemon.confके[server]मेंhost-name=somethingसेट करें, और/etc/samba/smb.confके[global]मेंmdns name = mdnsरखेंअगर macOS clients हैं, तो Samba config में vfs_fruit चालू करना अच्छा है: https://www.samba.org/samba/docs/current/man-html/vfs_fruit..... compatibility की वजह से भी, लेकिन मुख्य रूप से इसलिए कि
fruit:modelसेट करके Finder sidebar में मज़ेदार icons दिखाए जा सकते हैं.DS_Storeबनने से रोकना हो तो इसे disable किया जा सकता है: https://ryanoberto.github.io/blog/2015/04/01/disabling-the-c.... शायदfruit:resource = xattrके साथ Finder settings को extended attributes में भी रखा जा सकता है, लेकिन मैंने खुद यह नहीं आज़मायाmacOS ने बहुत पहले कहा था कि वह AFP को SMB से replace करेगा, और macOS 27 में AFP client support भी हटने वाला है, लेकिन macOS का SMB client support अभी भी काफ़ी खराब है। तब तक मैं Samba के साथ Netatalk भी चलाता रहूँगा, और Netatalk भी Avahi में register हो जाता है, जबकि macOS दिलचस्प तौर पर SMB से पहले AFP को प्राथमिकता देता है, इसलिए client अपने-आप सही daemon से जुड़ जाता है
homesdirectory setting में कुछ ऐसा है जो अजीब बेचैनी पैदा करता हैऐसा NAS बनाते समय dm-integrity, mdadm, XFS जैसी काफ़ी अलग तकनीकों से बनी मेरी ब्लॉग पोस्ट का लिंक देना भी उपयुक्त लग सकता है। C/C++ डेवलपर के रूप में OpenZFS डेवलपमेंट को नज़दीक से फ़ॉलो करते हुए, बड़े फीचर्स पर केंद्रित रुझान और SPL/अलग page cache की वजह से पैदा होने वाली लगातार समस्याएँ मुझे स्थिरता के लिहाज़ से चिंताजनक लगीं
ZFS जैसे सर्वगुणसंपन्न टूल की सुविधा छोड़कर मैंने शुरुआत की मुश्किलें झेलीं, लेकिन अब मैं अपने इस चुनाव से बहुत संतुष्ट हूँ
https://world-playground-deceit.net/blog/2025/06/nas-setup-l...
NAS बनाते समय मैं भी इसी निष्कर्ष पर पहुँचा। सिस्टम के लिए Nix, RAID के लिए zfs, और जिन services को चलाना था उनके लिए docker compose काफ़ी था
https://www.splitbrain.org/blog/2025-08/03-diy_nas_on_nixos
अलमारी में रखे शोरगुल वाले और ज़्यादा बिजली खाने वाले rack से तंग आकर, यह आखिरकार all-in-one home server और router बन गया
https://HomeFree.host
मैं अब भी Synology की कीमत इसलिए चुकाता हूँ, क्योंकि डिस्क खराब होने पर बस tray निकालो, डिस्क बदलो, वापस लगाओ, और कुछ widgets पर क्लिक करो, काम ख़त्म। मुझे पता होता है कि यह सही तरह से rebuild हो जाएगा
डिस्क खराब होने पर beep बजती है और समस्या वाली डिस्क के पास LED जल उठती है, इसलिए क्या करना है यह भी साफ़ पता चल जाता है
लेख में बताए गए जैसी NAS बनाना आसान है, लेकिन लंबी अवधि में data loss की संभावना कहीं ज़्यादा हो जाती है
और मेरी नज़र में, “जब disk 3 फेल हो जाए तो उसे सुरक्षित रूप से कैसे बदलें” जैसी बात शामिल न करने वाली ऐसी गाइड अधूरी है। भले यह न बताए कि डिस्क फेलियर का पता कैसे चले, कम से कम वह प्रक्रिया तो होनी ही चाहिए
इसलिए drive बदलते समय mdadm को पूरी drive फिर से बनानी पड़ती है, जबकि ZFS सिर्फ़ वास्तव में इस्तेमाल हो रहे data को दोबारा बनाता है
zpool replace my_pool disk3 newdiskZFS और जिन चीज़ों को लोग आम तौर पर “NAS” कहते हैं उन्हें लोग कितनी दूर तक ले जाते हैं, इसके अपने कारण होंगे, लेकिन Linux मशीन पर ext4 single large HDD के साथ सख़्त NFSv3 setup चलाकर भी मैं काफ़ी आराम से रहा हूँ
वैसे भी यह मेरा मुख्य सिस्टम है, जो जागे रहने के दौरान हमेशा चालू रहता है, और एक ही मशीन की बिजली और overhead में दूसरी डिवाइसेज़ को फ़ाइलें दे सकता है
मैं नेटवर्क setup को मूल रूप से सीमित रखने की कोशिश करता हूँ, इसलिए मुख्य मशीन पर चलने से जुड़े security concerns को लेकर बहुत परेशान नहीं हूँ। हो सकता है मैं कोई बड़ा पाप कर रहा हूँ, लेकिन क्या सिर्फ़ plain NFSv3 और compatibility के लिए Samba सच में इतने अपर्याप्त हैं?
लोग ZFS और “NAS” मुख्य रूप से checksums और data integrity protection के लिए चुनते हैं, और इसलिए भी कि वे अपने main machine को हमेशा जागा हुआ नहीं रखना चाहते
snapshots जैसी सुविधाएँ भी उपयोगी हैं, क्योंकि वे गलती से फ़ाइल delete या overwrite होने पर data loss की चिंता कम करती हैं
24x7 चालू main machine को NAS की तरह इस्तेमाल करना अपने आप में समस्या नहीं है। किसी चीज़ के लिए ज़बरदस्ती खरीदने की ज़रूरत नहीं, लेकिन reliability और bit rot protection को लेकर चिंता रहती है। यह सच में होता है, और मैंने इसे ZFS की वजह से खुद देखा है
अगर आप setup को सरल रखना चाहते हैं, तो फ़ाइल hashes की सूची रखकर समय-समय पर उनकी जाँच करने का तरीका विचार करने लायक है
snapshots सपोर्ट करने वाला backup program भी इस्तेमाल करना अच्छा होगा, और Restic एक ठीक विकल्प है
मौजूदा डिस्क जितनी ही क्षमता वाली एक और hard disk खरीदकर SnapRAID से file integrity मैनेज की जा सकती है, या btrfs के साथ 2-disk mirror बनाया जा सकता है
Cockpit NAS और VPS मैनेजमेंट में बहुत उपयोगी रहा है। LLM की वजह से configuration खुद कोई बड़ी समस्या न भी हो, तब भी toggles वाला dashboard और व्यवस्थित logs होना सुविधाजनक है, और SSH के बिना भी फ़ोन से shell commands चला सकते हैं
NAS पर backup/maintenance cron jobs के नतीजे आसानी से देखे जा सकते हैं, Samba मैनेज किया जा सकता है, और disk usage मॉनिटर किया जा सकता है। खासकर iPhone पर Samba को ठीक से चलाना सच में बहुत सिरदर्द वाला काम है
मेरे मामले में, server authentication के लिए public/private key के अलावा किसी और तरीके पर जाने के बजाय, मैं आख़िरकार फ़ोन पर SSH चलने लायक बना देता हूँ। इस मामले में मैं थोड़ा साज़िश-सिद्धांत वाले अंदाज़ में सतर्क रहता हूँ
पहले जब मैंने अपना NAS खुद बनाया था, तब इस लेख को भी सीखने की सामग्री के रूप में इस्तेमाल किया था: https://xyny.art/blog/2026-building-nas/
शुरुआत से NAS बनाना वास्तव में बहुत मज़ेदार है। एक छोटी रुकावट यह है कि पूरे विषय को बिना कुछ छोड़े कवर करने वाली “पूर्ण सामग्री” उपलब्ध नहीं है, लेकिन यही इसकी मज़ेदार बातों में से एक भी है
मेरी पोस्ट का उद्देश्य भी इंटरनेट पर एक और पक्षपाती NAS कॉन्फ़िगरेशन “गाइड” जोड़ने के काफ़ी क़रीब है। इसे गाइड कहना थोड़ा सावधानी वाला मामला है, लेकिन अगर मुझे वही काम फिर से करना पड़े, तो मैं सबसे पहले अपनी ही पोस्ट पढ़ूँगा
अवधारणात्मक रूप से यह वही काम करता है, लेकिन Debian की जगह FreeBSD इस्तेमाल करता है। यह बेहतर या बदतर होने से ज़्यादा अलग-अलग trade-offs की बात है, और आखिरकार दोनों ही समान रूप से अच्छी तरह काम करते हैं
NAS को दोबारा बनाते समय मैंने ZFS के ऊपर NFS चुनने का फैसला किया। हालांकि मेरा लक्ष्य लेखक से थोड़ा अलग था। मैंने low-power CPU/मदरबोर्ड का इस्तेमाल किया और failover-सक्षम दो अलग सिस्टम बनाकर उसे high availability रूप में कॉन्फ़िगर किया।
failover और data replication को संभालने के लिए मैंने custom software भी लिखा। टेस्ट में failover के दौरान क्लाइंट की writes सिर्फ़ कुछ सेकंड के लिए रुकीं। सोच रहा हूँ, अगर मैं इस बारे में लिखूँ तो क्या लोगों की दिलचस्पी होगी?