1 poin oleh GN⁺ 4 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 4 jam lalu
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 mendukung zfs send; Rsync.net baru-baru ini menaikkan minimum pemesanan ke 10TiB, jadi terlalu besar untuk kebutuhan saya: https://www.rsync.net/products/zfsintro.html

    • Menyebutnya sebagai “bukan waktu yang baik dari sisi harga” itu masih kurang. Sekarang ini adalah harga yang mengerikan untuk membangun NAS
      Kalau ada pilihan ajaib, saya hampir pasti akan memilih dunia tanpa AI sama sekali, asalkan storage kembali ke harga sepersepuluh dari era sebelum AI
    • Saya menjalankan pool ZFS RAIDZ2 dengan 8 drive, dan penasaran apakah rekomendasi ruang kosong cadangan di ZFS itu cargo cult atau memang nyata
      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
    • Saya penasaran apakah ada bagian dari “skrip besar untuk melakukan debootstrap pada NAS berbasis Debian” yang dipublikasikan
      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
    • Saya penasaran apakah kombinasi LUKS dan kunci TPM benar-benar bekerja dengan baik. Kalau server reboot, apakah TPM bisa membuka kunci root filesystem, apakah /boot dienkripsi dan juga terlindungi dari modifikasi, dan apakah ini tahan terhadap serangan evil maid
      Memang ini lubang kelinci, tetapi kalau semuanya sudah terpecahkan, itu sangat menarik
    • Samsung SSD 990 PRO 4TB NVMe SSD harganya 1100 dolar per unit untuk 4 buah. Mengerikan
      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=something di [server] pada /etc/avahi/avahi-daemon.conf, dan menaruh mdns name = mdns di [global] pada /etc/samba/smb.conf
    Jika 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:model agar ikon lucu muncul di sidebar Finder
    Untuk 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 dengan fruit:resource = xattr, tetapi saya belum mencobanya sendiri
    macOS 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

    • Di Samba, sebaiknya tambahkan home directory pengguna sebagai entri terpisah. Pengaturan direktori homes bawaan terasa agak memicu OCD
  • Saya 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

    • Saya juga memakai NixOS di NAS. Untuk pengelolaan container, bersama Nix ada baiknya melihat quadlets, yaitu container Docker yang dikelola systemd
    • Saya juga memakai NixOS sebagai NAS dengan pendekatan yang mirip, dan ukurannya makin membesar sampai sekarang sedang saya siapkan untuk dibagikan ke orang lain juga. Bedanya, saya memakai MDADM di atas BTRFS
      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

    • Saya penasaran apakah snooty itu typo autocompletion untuk Synology, atau memang produk lain
    • Sebenarnya ZFS memang bekerja persis seperti itu. Memang benar panduannya belum lengkap, tetapi untuk rebuild array, Anda cukup mengganti disk lalu menjalankan satu perintah ZFS
    • ZFS menangani kegagalan drive dengan lebih kokoh daripada apa pun yang lain. Ada alasan Synology memakai mdadm di bawah BTRFS alih-alih fitur RAID bawaan BTRFS, dan mdadm bekerja di level perangkat
      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 newdisk
    • Di ZFS, prosedur ini jadi benar-benar sepele, kecuali bagian “bunyi bip dan LED”
  • Mungkin 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?

    • Pertama-tama saya penasaran apakah ada backup untuk HDD besar tunggal itu. Itu kekhawatiran terbesar saya. Suatu saat HDD itu pasti rusak, dan yang penting adalah apa rencananya saat itu
      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
    • Dalam konfigurasi itu, masalah yang lebih besar adalah struktur penyimpanan single drive. Jika satu disk rusak, tidak ada daya tahan sama sekali, dan kalau hardware mulai merusak data secara diam-diam maka semua data terancam. Ini juga dengan asumsi backup Anda didasarkan pada data dari hard disk tunggal itu
      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
    • Batasnya akan terasa saat beberapa mesin mulai membaca dan menulis secara bersamaan. Meski begitu, cukup buat sesuai kebutuhan saat ini; tidak perlu over-optimasi
  • 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

    • Kalau menjalankan perintah shell dari ponsel tanpa SSH, saya penasaran bagaimana autentikasi Cockpit dilakukan. Apakah semacam menaruh autentikasi HTTP dasar di bagian depan?
      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