ZFS Management Guide#
Dokumentasi pengelolaan ZFS untuk QNAP QuTS hero — konteks: pool SSD 6x 4TB (RAID 10 / striped mirror) sebagai backing storage LUN iSCSI untuk cluster Incus.
1. Konsep Layer#
flowchart TD
subgraph lvm["LVM"]
LD["Disk fisik"] --> PV["PV<br/><small>pvcreate per disk</small>"]
PV --> VG["VG<br/><small>gabungan semua PV</small>"]
VG --> LV["LV<br/><small>partisi fleksibel</small>"]
LV --> FS["Filesystem<br/><small>mkfs.ext4 + mount</small>"]
end
subgraph zfs["ZFS (QuTS hero)"]
ZD["Disk fisik"] --> VDEV["vdev<br/><small>mirror / raidz — redundancy di sini</small>"]
VDEV --> ZPOOL["zpool<br/><small>stripe across vdevs</small>"]
ZPOOL --> DS["Dataset<br/><small>filesystem, langsung mount</small>"]
ZPOOL --> ZVOL["Zvol<br/><small>block device — LUN iSCSI</small>"]
end| ZFS | Padanan LVM | Keterangan |
|---|---|---|
| Disk fisik | Disk fisik | Raw device, mis. /dev/nvme0n1 |
| vdev | PV (+ mdadm) | Unit redundancy: mirror, raidz1/2/3, atau single disk |
| zpool | VG | Kumpulan vdev; data di-stripe across vdevs |
| dataset | LV + mkfs + mount | Filesystem siap pakai, auto-mount |
| zvol | LV (block device) | Block device virtual — dipakai untuk LUN iSCSI |
Aturan emas:
- Redundancy hidup di level vdev, bukan pool.
- Satu vdev mati total = seluruh pool mati.
- Random write IOPS scaling per vdev, bukan per disk.
2. Akses CLI di QuTS hero#
QuTS hero pada dasarnya ZFS, jadi command standar zpool/zfs tersedia via SSH:
ssh admin@<ip-qnap>
# masuk shell, lalu:
zpool list
zfs listCatatan: operasi destruktif (create/destroy pool, replace disk) sebaiknya tetap lewat Storage Manager GUI agar metadata QNAP (App state, LUN mapping, alert) tetap konsisten. CLI paling aman dipakai untuk read-only monitoring dan operasi dataset/snapshot.
3. Pool Management#
3.1 Melihat status pool#
zpool list # kapasitas, fragmentasi, health per pool
zpool status -v # topologi vdev, disk mana degraded, error count
zpool iostat -v 5 # IOPS & bandwidth per vdev/disk, refresh 5 detikContoh output zpool status untuk RAID 10 (3 mirror vdev):
pool: zpool1
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
zpool1 ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
nvme0n1 ONLINE 0 0 0
nvme1n1 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
nvme2n1 ONLINE 0 0 0
nvme3n1 ONLINE 0 0 0
mirror-2 ONLINE 0 0 0
nvme4n1 ONLINE 0 0 0
nvme5n1 ONLINE 0 0 0Topologi yang sama dalam bentuk diagram — data di-stripe ke 3 vdev, tiap vdev adalah pasangan mirror:
flowchart TD
POOL["zpool1<br/><small>stripe across 3 vdev — usable ~12 TB</small>"]
POOL --> M0["mirror-0"]
POOL --> M1["mirror-1"]
POOL --> M2["mirror-2"]
M0 --> D0["nvme0n1<br/>4 TB"]
M0 --> D1["nvme1n1<br/>4 TB"]
M1 --> D2["nvme2n1<br/>4 TB"]
M1 --> D3["nvme3n1<br/>4 TB"]
M2 --> D4["nvme4n1<br/>4 TB"]
M2 --> D5["nvme5n1<br/>4 TB"]Ingat: 1 disk mati per mirror = degraded tapi aman. Kedua disk dalam satu mirror mati = vdev mati = seluruh pool mati, walaupun 4 disk lain sehat.
Status yang mungkin muncul:
| State | Arti | Aksi |
|---|---|---|
ONLINE | Sehat | — |
DEGRADED | Ada disk mati, redundancy masih menutup | Ganti disk segera |
FAULTED | Vdev/pool kehilangan redundancy melebihi toleransi | Restore dari backup |
RESILVERING | Sedang rebuild ke disk pengganti | Tunggu selesai, jangan cabut disk lain |
3.2 Membuat pool (referensi CLI)#
Di QNAP lakukan via GUI (Storage Manager → Create Pool), tapi ekuivalen CLI-nya:
# RAID 10 — 3 pasang mirror
zpool create tank \
mirror nvme0n1 nvme1n1 \
mirror nvme2n1 nvme3n1 \
mirror nvme4n1 nvme5n13.3 Scrub — wajib terjadwal#
Scrub membaca seluruh data + verifikasi checksum, memperbaiki silent corruption dari copy redundant. Jalankan bulanan.
zpool scrub tank # mulai scrub
zpool status tank # progress ada di baris "scan:"
zpool scrub -s tank # stop scrub jika perluDi GUI: Storage Manager → Storage Space → pool → Manage → Scrub schedule.
3.4 Mengganti disk rusak#
zpool status -v # identifikasi disk FAULTED + catat serial
zpool replace tank nvme3n1 nvme6n1 # ganti dengan disk baru
zpool status # pantau resilverSebelum cabut disk fisik: cocokkan serial number (smartctl -i /dev/nvmeXn1 atau lihat di GUI Disks). Salah cabut disk saat degraded = pool mati. Di QNAP lebih aman pakai GUI karena ada locate LED per bay.
4. Dataset & Zvol#
4.1 Dataset (filesystem)#
zfs list # semua dataset + usage
zfs create tank/backup # buat dataset, auto-mount di /tank/backup
zfs set compression=lz4 tank/backup # aktifkan compression (nyaris gratis di CPU modern)
zfs set quota=2T tank/backup # batasi maksimal 2TB
zfs get all tank/backup # lihat semua properties
zfs destroy tank/backup # hapus (permanen!)4.2 Zvol (block device — untuk LUN iSCSI)#
Di QuTS hero, tiap LUN yang kamu buat di GUI = satu zvol.
zfs list -t volume # daftar semua zvol
zfs create -V 2T -o volblocksize=16K tank/lun-incus # ekuivalen "create LUN 2TB"
zfs get volblocksize,compression,used tank/lun-incusProperties penting untuk zvol VM:
| Property | Rekomendasi | Alasan |
|---|---|---|
volblocksize | 16K–32K | Match dengan random I/O VM; tidak bisa diubah setelah dibuat |
compression | lz4 | Hemat space + sering justru mempercepat I/O |
sync | standard | Jangan disabled — risiko korupsi data VM saat power loss |
| Thin provisioning | Boleh | Tapi monitor pool usage ketat (lihat §6) |
5. Snapshot, Rollback, Clone#
Snapshot ZFS itu copy-on-write — instan dan awalnya 0 byte, hanya tumbuh seiring perubahan data.
# Buat & lihat snapshot
zfs snapshot tank/lun-incus@before-upgrade
zfs list -t snapshot
# Rollback (HATI-HATI: semua perubahan setelah snapshot hilang)
zfs rollback tank/lun-incus@before-upgrade
# Hapus snapshot lama
zfs destroy tank/lun-incus@before-upgrade
# Clone: dataset baru dari snapshot, writable, hemat space
zfs clone tank/lun-incus@before-upgrade tank/lun-testUntuk LUN VM: snapshot di level zvol = crash-consistent (seperti VM ditarik kabel power). Untuk application-consistent (database), quiesce dulu dari sisi guest/Incus sebelum snapshot, atau andalkan journaling filesystem guest.
Di GUI: Storage Manager → Snapshot → set schedule (mis. hourly, retain 24 + daily, retain 7).
6. Replication (zfs send/receive)#
Backup pool SSD ke pool HDD (atau NAS lain) berbasis snapshot:
flowchart LR
subgraph ssd["Pool SSD (tank)"]
LUN["zvol lun-incus"] --> S1["@repl-1<br/><small>snapshot penuh</small>"]
LUN --> S2["@repl-2<br/><small>snapshot berikutnya</small>"]
end
subgraph hdd["Pool HDD (backup)"]
DEST["backup/lun-incus"]
end
S1 -- "zfs send (full)" --> DEST
S2 -- "zfs send -i (delta saja)" --> DEST# Full replication pertama
zfs snapshot tank/lun-incus@repl-1
zfs send tank/lun-incus@repl-1 | zfs receive hddpool/backup/lun-incus
# Incremental berikutnya (hanya kirim delta)
zfs snapshot tank/lun-incus@repl-2
zfs send -i @repl-1 tank/lun-incus@repl-2 | zfs receive hddpool/backup/lun-incus
# Ke NAS remote via SSH
zfs send -i @repl-1 tank/lun-incus@repl-2 | ssh backup-nas zfs receive tank/dr/lun-incusDi QuTS hero, fitur ini dibungkus sebagai Snapshot Replica di GUI — pakai itu untuk jadwal otomatis. Kombinasi yang disarankan untuk pool SSD single-copy-critical:
- Snapshot hourly (retain 24)
- Replica ke HDD pool tiap 1 jam
- RPO efektif: maksimal 1 jam data loss jika pool SSD mati total
7. Monitoring & Health#
7.1 Kapasitas — jangan lewat 80%#
Performa ZFS turun signifikan di atas ~80% full (alokasi blok makin mahal, fragmentasi naik).
zpool list -o name,size,alloc,free,cap,frag,healthSet alert di GUI pada threshold 80%. Thin-provisioned LUN bisa “meledak” diam-diam — pool bisa penuh walaupun LUN belum penuh dari sisi initiator.
7.2 ARC (read cache di RAM)#
arcstat 5 # hit rate real-time
cat /proc/spl/kstat/zfs/arcstats | grep -E "^(hits|misses|size|c_max)"ARC hit rate >90% = sehat. Kalau konsisten rendah + RAM masih ada slot, upgrade RAM lebih ngefek daripada SSD cache.
7.3 SMART & error disk#
smartctl -a /dev/nvme0n1 | grep -iE "wear|percentage|media|error"
zpool status -v # kolom READ/WRITE/CKSUM harus 0CKSUM error naik = silent corruption terdeteksi — cek kabel/backplane/disk. Error yang sama berulang di satu disk = kandidat ganti.
7.4 Performa I/O#
zpool iostat -v tank 5 # per vdev — cek apakah load merata di 3 mirror
zpool iostat -l tank 5 # latency read/write per operasi8. Checklist Operasional#
Harian (otomatis via alert):
- Notifikasi email/push aktif untuk disk failure & pool degraded
- Alert kapasitas pool di 80%
Mingguan:
-
zpool status -v— pastikan CKSUM/READ/WRITE = 0 - Cek usage pool vs pertumbuhan thin LUN
Bulanan:
- Scrub terjadwal jalan dan selesai tanpa error
- Review SMART wear level SSD (
percentage used) - Test restore 1 snapshot ke lokasi test (backup yang tidak pernah dites = tidak ada backup)
Saat disk rusak:
- Identifikasi via
zpool status -v+ serial number - Locate LED bay di GUI sebelum cabut
- Ganti disk → resilver → verifikasi
ONLINE - Selama resilver: jangan cabut/restart apapun, pool sedang tanpa redundancy di vdev tsb
9. Quick Reference#
# Pool
zpool list # ringkasan pool
zpool status -v # detail vdev & error
zpool iostat -v 5 # I/O per vdev
zpool scrub <pool> # mulai scrub
zpool replace <pool> <old> <new> # ganti disk
# Dataset / zvol
zfs list # semua dataset
zfs list -t volume # semua zvol (LUN)
zfs list -t snapshot # semua snapshot
zfs create <pool>/<ds> # dataset baru
zfs create -V 1T <pool>/<vol> # zvol baru
zfs set <prop>=<val> <target> # ubah property
zfs get all <target> # lihat property
# Snapshot & replication
zfs snapshot <ds>@<name> # snapshot
zfs rollback <ds>@<name> # rollback
zfs send -i @a <ds>@b | zfs receive <dest> # incremental replica