- Jika hanya membutuhkan NAS dasar tanpa GUI, cukup dengan membuat dataset ZFS dan membagikannya lewat Samba untuk membangun penyimpanan jaringan yang sederhana
- Lingkungan contoh menggunakan Debian 12 Bookworm, OpenZFS zfs-2.1.1, RAIDZ1, RAM ECC RDIMM 16GB, 4×4TB NVMe SSD, dan tidak mencakup enkripsi maupun strategi pencadangan
- ZFS menyimpan konfigurasi pool dan filesystem di disk, sehingga meski OS rusak, data bisa diambil kembali di mesin lain dengan
zfs import
- Untuk disk, lebih aman menggunakan
/dev/disk/by-id atau alias di /etc/zfs/vdev_id.conf daripada nama yang bergantung urutan seperti /dev/nvme1
- Berbagi file di jaringan ditangani oleh Samba, dengan pemisahan dataset
docs untuk dokumen umum dan backups untuk berbagi Time Machine di macOS
Cakupan NAS minimal rakitan sendiri
- Tujuannya adalah merakit sendiri NAS dasar tanpa produk NAS full-feature seperti Synology, QNAP, atau TrueNAS
- Konfigurasi contoh dibatasi pada cakupan berikut
- Level RAID: RAIDZ1, toleran terhadap kegagalan 1 drive
- Sistem operasi: Debian 12 Bookworm
- Enkripsi: tidak ada
- Implementasi ZFS: OpenZFS, zfs-2.1.1
- CPU: 4 core, bisa memakai CPU server Xeon murah
- RAM: ECC RDIMM RAM 16GB
- Penyimpanan: 4×4TB NVMe SSD
- Backup: tidak dibahas dan memerlukan konfigurasi terpisah
- TrueNAS lebih mendekati software suite enterprise full-feature, sehingga semakin sederhana kebutuhan, semakin besar ketidakcocokan antara fitur yang disediakan dan kebutuhan aktual
- Dengan merakit sendiri, kita bisa memahami tiap komponen sistem dan tidak perlu bergantung pada software suite lain
Informasi konfigurasi yang disimpan ZFS di disk
- Filesystem ZFS bersifat mandiri, jadi meski host OS rusak, selama disknya sehat data tetap bisa dipulihkan
- Sambungkan disk ke mesin atau OS baru, pasang tool
zfs, lalu jalankan zfs import untuk mengimpor pool yang sudah ada
- Konfigurasi dan detail ZFS disimpan di disk itu sendiri
- Misalnya jika RAIDZ2 dibuat dari 6 disk, cukup pindahkan disk-disk itu ke mesin baru yang memiliki tool ZFS lalu jalankan
zfs import, maka akan tetap tampil sebagai RAIDZ2
- Walau host OS atau mesinnya bermasalah, selama disk tidak rusak, data tetap terjaga
Identifikasi disk dan konfigurasi alias
- Di mesin Linux, daftar disk dapat dilihat dengan
lsblk -d -o TRAN,NAME,TYPE,MODEL,SERIAL,SIZE
- Contoh ini memakai 4 drive Samsung SSD 990 PRO 4TB NVMe
- Tiap disk memiliki symlink di bawah
/dev/disk/by-id yang terhubung ke ID dan nama perangkat /dev/nvme...
- Jika mendefinisikan alias di
/etc/zfs/vdev_id.conf, ID disk yang panjang bisa dipetakan ke nama yang lebih pendek
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
- Jalankan
udevadm trigger atau reboot agar alias diterapkan
- Penerapannya bisa dicek dengan
ls -lh /dev/disk/by-vdev
- Alias mapping bersifat opsional; saat membuat zpool, Anda juga bisa langsung memakai path penuh
/dev/disk/by-id/...
- Nama perangkat seperti
/dev/nvme1, /dev/nvme2 sebaiknya dihindari karena urutannya tidak dijamin saat drive baru dipasang
/etc/zfs/vdev_id.conf hanyalah pengaturan untuk memudahkan pembuatan zpool; jika OS rusak dan file ini hilang, pool ZFS itu sendiri tidak bermasalah
Pembuatan zpool dan konfigurasi dataset
- Contoh ini membuat zpool RAIDZ1 dari 4 NVMe, mirip RAID 5 karena toleran terhadap kegagalan 1 drive
- Jika butuh toleransi kegagalan yang lebih tinggi, RAIDZ2 atau setara RAID 6 lebih tangguh
- Untuk instalasi ZFS, lihat dokumentasi instalasi OpenZFS; sebagai contoh, di RHEL 9 pemasangannya bisa dengan
dnf install zfs
- Saat membuat zpool, opsi
ashift=12 disarankan
- Banyak disk melaporkan ukuran sektor 512KB ke OS demi kompatibilitas
- Disk berkapasitas besar seperti Samsung 990 Pro bisa memiliki ukuran sektor 4KB atau 8KB
ashift=12 menandakan ukuran sektor 4KB dan dapat meningkatkan performa secara signifikan
- Saat pembuatan zpool adalah kesempatan terakhir untuk menetapkan nilai ini
zpool create -o ashift=12 s16z1 raidz1 nvme0 nvme1 nvme2 nvme3
zpool status s16z1
zpool adalah abstraksi disk, sedangkan zfs adalah filesystem
- Menjalankan
zpool create juga sekaligus membuat filesystem ZFS
- Gunakan
zdb | grep ashift untuk memastikan ashift: 12 sudah diterapkan
- Sebelum dibagikan, atur mount point dan kompresi
zfs set mountpoint=/mnt/s16z1 s16z1
zfs set compression=lz4 s16z1
- Buat dataset
docs dan backups di bawah dataset root
zfs create s16z1/docs
zfs create s16z1/backups
docs dipakai untuk dokumen, backups untuk backup Time Machine
- Dataset ZFS menawarkan lebih banyak kemampuan dibanding folder biasa
- Pengelolaan properti per dataset
- Enkripsi
- Transfer dan replikasi
- Snapshot
- Sebaiknya buat dataset terpisah untuk kategori file besar yang berbeda
- Misalnya, jika hanya ingin mencadangkan
docs ke server jarak jauh, Anda tidak perlu mengirim seluruh dataset root s16z1
Membuat akun berbagi lewat Samba
- Metode berbagi file lewat jaringan bersifat terpisah dari ZFS; yang penting ZFS sudah ter-mount di sistem host
- Pasang Samba
apt install samba
- Buat pengguna UNIX khusus Samba bernama
john lalu set kata sandinya
useradd -m john
passwd john
- Jalankan
smbpasswd -a john untuk menghubungkan pengguna UNIX john dengan pengguna Samba
- Host klien yang terhubung dapat mengakses share dengan
SYS\\john
- Gunakan
pdbedit -L -v john untuk memeriksa apakah pengguna Samba sudah terdaftar
- Untuk menghapus pengguna Samba, jalankan
pdbedit -x -u john
Share umum dan share Time Machine
- Edit
/etc/samba/smb.conf untuk mengatur share docs dan backups
[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 dikonfigurasi sebagai share SMB untuk keperluan umum
backups memuat properti untuk Time Machine di macOS
fruit:aapl = yes
fruit:time machine = yes
vfs objects = catia fruit streams_xattr
- Di macOS, mount dari Finder dengan menekan
cmd+K, lalu masukkan format seperti smb://10.0.0.6/docs atau smb://10.0.0.6/backups
- Di sistem turunan Debian, pasang
smbclient lalu uji seperti berikut
apt install smbclient
smbclient -U john //10.0.0.6/docs -c 'ls'
- Jika memasang
smb://10.0.0.6/backups, macOS akan menampilkannya sebagai share Time Machine
- Setelah ter-mount, di macOS buka Settings > General > Time Machine untuk menambahkan share tersebut dan memulai backup Time Machine
Hal-hal yang tidak dicakup
- Konfigurasi enkripsi tidak termasuk dalam prosedur ini
- Strategi backup juga tidak termasuk
- Fitur replikasi dataset ZFS akan dibahas lebih lanjut dalam tulisan terpisah nanti
1 komentar
Komentar Hacker News
Dari sisi harga, sekarang bukan waktu yang baik untuk membangun NAS, tetapi saya sedang merakitnya selama dua minggu terakhir. Saya memakai casing Jonsbo N6, dan karena ada backplane SATA 8-bay serta drive bay, ini cukup bagus, tidak seperti model Jonsbo sebelumnya
Pada akhirnya saya memutuskan untuk memakai 4 unit 14TB WD Elements Desktop hasil shucking, dan di dalamnya ada WD140EDGZ, yaitu drive berisi helium. Harganya sekitar sepertiga lebih murah daripada 4 unit 12TB WD Red Plus dan performanya juga tampak mirip. Garansi jelas merupakan kelemahan, tetapi kalau rusak dalam masa garansi 2 tahun, sepertinya masih bisa dimasukkan lagi ke casing eksternal
Saya memasang SSD M.2 256GB bekas sebagai drive boot, dan cukup bersusah payah agar LUKS, kunci TPM, dan root ZFS bisa dipakai bersama tanpa membuat proses boot gagal meski satu drive mati. Saya jadi banyak belajar soal systemd-boot, dan rasanya jauh lebih waras daripada grub
Saya juga merasa ada banyak mitos dan cargo cult seputar ZFS. Misalnya, artikelnya menyinggung ECC RAM, tetapi anggapan bahwa itu wajib karena ZFS bisa merusak pool saat scrub rasanya lebih dekat ke mitos, dan tahun ini harganya sangat mahal. ZFS juga tidak butuh RAM sebanyak itu, dan L2ARC juga tidak memakai banyak RAM
Saya masih memikirkan apakah akan membiarkan
dnodesize=auto, karena ada kisah horor terkait: https://github.com/openzfs/zfs/issues/11353. Dan sulit mencari penyedia cloud storage dengan harga masuk akal yang mendukungzfs send; Rsync.net baru-baru ini menaikkan minimum pemesanan ke 10TiB, jadi terlalu besar untuk kebutuhan saya: https://www.rsync.net/products/zfsintro.htmlKalau ada pilihan ajaib, saya hampir pasti akan memilih dunia tanpa AI sama sekali, asalkan storage kembali ke harga sepersepuluh dari era sebelum AI
Saya sudah mengorbankan 2 drive demi redundansi, dan itu memang membantu karena baru-baru ini 2 SSD yang tampaknya berasal dari batch yang sama mati berurutan. Tapi kalau saya juga harus mengosongkan kapasitas setara setidaknya 1 drive lagi demi performa dan stabilitas, itu cukup menyakitkan dengan harga saat ini
Setelah melihat https://words.filippo.io/frood/ dan https://0pointer.net/blog/fitting-everything-together.html, saya sedang melirik pendekatan menyusun home server/NAS dengan mkosi/systemd. Menarik melihat bagaimana konfigurasi yang berbeda menyelesaikan masalah ini
/bootdienkripsi dan juga terlindungi dari modifikasi, dan apakah ini tahan terhadap serangan evil maidMemang ini lubang kelinci, tetapi kalau semuanya sudah terpecahkan, itu sangat menarik
https://www.samsung.com/us/memory-storage/nvme-ssd/990-pro-p...
Hal-hal yang berguna di NAS: memasang avahi-daemon akan membuat Samba otomatis mengiklankan SMB/CIFS lewat DNS-SD ke klien macOS dan Linux
Untuk auto-discovery di Explorer pada klien Windows 10 ke atas yang menonaktifkan SMB 1.0, cukup pasang wsdd2
Hostname Linux biasanya huruf kecil, tetapi Samba secara default mempublikasikan nama yang diawali huruf besar ke NetBIOS dan Avahi. Kalau itu mengganggu, Anda bisa set
host-name=somethingdi[server]pada/etc/avahi/avahi-daemon.conf, dan menaruhmdns name = mdnsdi[global]pada/etc/samba/smb.confJika ada klien macOS, sebaiknya aktifkan vfs_fruit di konfigurasi Samba: https://www.samba.org/samba/docs/current/man-html/vfs_fruit..... Ini berguna untuk kompatibilitas, tetapi terutama karena Anda bisa mengatur
fruit:modelagar ikon lucu muncul di sidebar FinderUntuk mencegah pembuatan
.DS_Store, itu bisa dilarang: https://ryanoberto.github.io/blog/2015/04/01/disabling-the-c.... Mungkin juga bisa menyimpan pengaturan Finder di extended attributes denganfruit:resource = xattr, tetapi saya belum mencobanya sendirimacOS sudah lama mengatakan akan mengganti AFP dengan SMB, dan dukungan klien AFP juga dijadwalkan dihapus pada macOS 27, tetapi dukungan klien SMB di macOS masih cukup buruk. Sampai saat itu, saya tetap akan menjalankan Netatalk bersama Samba; Netatalk juga terdaftar di Avahi, dan macOS secara penuh arti lebih memprioritaskan AFP daripada SMB, jadi klien otomatis terhubung ke daemon yang tepat
homesbawaan terasa agak memicu OCDSaya rasa pantas juga menautkan tulisan blog saya yang membuat NAS seperti ini, tetapi disusun dengan teknologi yang cukup berbeda, yaitu dm-integrity, mdadm, dan XFS. Sebagai developer C/C++, saya mengikuti perkembangan OpenZFS dari dekat, dan dari sisi stabilitas saya khawatir dengan alur yang berfokus pada fitur besar serta masalah yang terus muncul karena SPL/cache halaman terpisah
Saya memang menanggung kerepotan awal alih-alih memilih kenyamanan ZFS sebagai alat serba bisa, tetapi sekarang saya sangat puas dengan pilihan itu
https://world-playground-deceit.net/blog/2025/06/nas-setup-l...
Saat membuat NAS, saya sampai pada kesimpulan yang sama. Untuk sistem, Nix; untuk RAID, zfs; dan untuk layanan yang ingin dijalankan, docker compose sudah cukup
https://www.splitbrain.org/blog/2025-08/03-diy_nas_on_nixos
Karena bosan dengan rak berisik dan boros listrik di dalam lemari, akhirnya ini berubah menjadi home server all-in-one sekaligus router
https://HomeFree.host
Alasan saya masih membayar biaya Synology adalah karena kalau disk rusak, saya tinggal menarik tray, mengganti disknya, memasukkannya kembali, lalu cukup klik beberapa widget dan selesai. Saya tahu proses rebuild akan berjalan dengan benar
Saat disk rusak, ada bunyi bip dan LED di dekat disk bermasalah akan menyala, jadi saya juga tahu apa yang harus dilakukan
Membuat NAS seperti yang dijelaskan di tulisan itu memang mudah, tetapi dalam jangka panjang kemungkinan kehilangan datanya jauh lebih besar
Dan menurut saya panduan seperti ini tidak lengkap kalau tidak membahas “cara mengganti disk 3 dengan aman saat rusak.” Walaupun tidak sampai menjelaskan bagaimana mengetahui disk rusak, setidaknya prosedur itu harus ada
Jadi saat mengganti drive, mdadm harus membangun ulang seluruh drive, sedangkan ZFS hanya membangun ulang data yang benar-benar sedang dipakai
zpool replace my_pool disk3 newdiskMungkin ada alasannya orang mendorong penggunaan ZFS dan komponen yang biasanya disebut “NAS” sejauh itu, tetapi saya sendiri cukup nyaman hanya dengan menjalankan pengaturan NFSv3 yang ketat di HDD besar tunggal ext4 pada mesin Linux
Bagaimanapun ini adalah sistem utama yang selalu menyala selama saya terjaga, dan dengan daya serta overhead dari satu mesin saja saya bisa menyajikan file ke perangkat lain
Saya juga cenderung menjaga pengaturan jaringan tetap terbatas secara default, jadi saya tidak terlalu khawatir dengan aspek keamanan karena dijalankan di mesin utama. Mungkin saya sedang melakukan dosa besar, tetapi apakah benar pure NFSv3 dan Samba untuk kompatibilitas itu masih kurang?
Alasan utama orang memilih ZFS dan “NAS” adalah checksum dan perlindungan integritas data, juga karena mereka tidak ingin mesin utama selalu harus menyala
Fitur seperti snapshot juga berguna karena mengurangi kekhawatiran kehilangan data akibat file terhapus atau tertimpa secara tidak sengaja
Menjadikan mesin utama yang menyala 24 jam sebagai NAS menurut saya tidak masalah. Tidak perlu memaksa membeli sesuatu, tetapi saya khawatir soal keandalan dan perlindungan terhadap bit rot. Itu memang benar-benar terjadi, dan saya sendiri pernah melihatnya berkat ZFS
Jika ingin tetap sederhana, layak mempertimbangkan menyimpan daftar hash file dan memverifikasinya secara berkala
Sebaiknya juga memakai program backup yang mendukung snapshot, dan Restic adalah pilihan yang cukup baik
Anda juga bisa membeli satu hard disk lagi dengan ukuran yang sama seperti disk saat ini lalu memakai SnapRAID untuk mengelola integritas file, atau membuat mirror 2-disk dengan btrfs
Cockpit sangat berguna untuk mengelola NAS dan VPS. Berkat LLM, konfigurasi itu sendiri mungkin bukan masalah besar, tetapi dashboard dengan toggle dan log yang rapi tetap nyaman, dan dari ponsel pun kita bisa menjalankan perintah shell tanpa SSH
Di NAS, kita bisa dengan mudah melihat hasil job cron backup/perawatan, mengelola Samba, dan memantau penggunaan disk. Terutama, membuat Samba benar-benar bekerja dengan baik di iPhone itu sangat merepotkan
Untuk autentikasi server, alih-alih turun ke metode selain kunci publik/pribadi, saya biasanya malah membuat SSH bisa dipakai dari ponsel. Untuk bagian ini saya memang agak terlalu waspada, seperti teori konspirasi kecil
Dulu saat membangun NAS sendiri, saya juga memakai tulisan ini sebagai bahan belajar: https://xyny.art/blog/2026-building-nas/
Membangun NAS dari nol itu benar-benar menyenangkan. Tidak adanya “materi lengkap” yang membahas seluruh topik tanpa celah memang sedikit menjadi hambatan, tetapi itu juga bagian dari keseruannya
Tujuan tulisan saya juga lebih dekat ke menambah satu lagi “panduan” konfigurasi NAS yang bias di internet. Saya ragu menyebutnya panduan, tetapi kalau harus melakukan hal yang sama lagi, saya pasti akan membaca tulisan saya sendiri terlebih dahulu
Secara konsep menjalankan hal yang sama, tetapi memakai FreeBSD alih-alih Debian. Bukan berarti lebih baik atau lebih buruk; trade-off-nya hanya berbeda, dan pada akhirnya sama-sama bekerja dengan baik
Saat membangun ulang NAS, saya memutuskan menggunakan NFS di atas ZFS. Namun, tujuannya sedikit berbeda dari penulis. Saya menggunakan CPU/motherboard berdaya rendah dan membangun dua sistem terpisah yang mampu melakukan failover, lalu menyusunnya dalam bentuk high availability
Saya juga menulis perangkat lunak kustom yang benar-benar menangani failover dan replikasi data. Dalam pengujian, penulisan dari klien hanya berhenti beberapa detik selama failover. Saya penasaran apakah akan ada yang tertarik jika saya menulis artikel tentang ini