SSD Nodes Learn 🎉 VPS dari $5.50/bln
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-13

ZFS pada FreeBSD dan Linux: Adakah RAM anda mencukupi?

Ketahui cara ZFS menggunakan ARC untuk cache data dan kesan penggunaan RAM pada VPS. Kami membincangkan had memori serta strategi pengoptimuman untuk sistem 2GB ke 4GB.

Apa yang ZFS tawarkan, dan apa yang ia perlukan

ZFS pada FreeBSD dan Linux kini menggunakan satu kod sumber yang sama, iaitu OpenZFS, jadi ciri-cirinya adalah sama pada kedua-dua sistem. Pelayan yang menjalankan ZFS mendapat data dengan checksum, snapshot yang tidak memakan ruang sehingga data berubah, replikasi dengan zfs send, dan pemampatan yang boleh diaktifkan hanya dengan menukar satu properti. Apa yang ia perlukan ialah memori: ARC (adaptive replacement cache) akan menuntut sebahagian besar RAM secara lalai, dan pada VPS (virtual private server) bersaiz 2 GB atau 4 GB, memori tersebut adalah tepat apa yang diperlukan oleh aplikasi anda.

Panduan ini menilai ZFS daripada perspektif VPS sewaan dengan satu atau dua cakera maya, bukan daripada kotak storan dengan empat puluh ruang pemacu. Ciri-ciri yang masih berguna dalam situasi ini adalah yang patut anda beri perhatian. Bahagian yang tidak sesuai pula perlu diketahui sebelum anda membina pool.

OpenZFS pada FreeBSD dan Linux: satu kod asas, dua kaedah pembungkusan

FreeBSD telah menyertakan ZFS dalam sistem asas sejak FreeBSD 7.0 pada tahun 2008, pada mulanya sebagai ciri eksperimen. Sejak OpenZFS 2.0 pada Disember 2020, FreeBSD dan Linux dibina daripada pepohon sumber yang sama, jadi zfs dan zpool berfungsi dengan cara yang sama pada kedua-duanya, dan pool yang dicipta pada satu sistem boleh diimport pada sistem yang lain.

Sebab ZFS menjadi pakej pada Linux dan sebahagian daripada sistem asas pada FreeBSD adalah disebabkan pelesenan. OpenZFS berada di bawah CDDL (common development and distribution license). Kernel Linux berada di bawah GPL (general public license) versi 2. Projek kernel menganggap kedua-duanya sebagai tidak serasi, jadi kod ZFS tidak digabungkan ke dalam Linux arus perdana, dan setiap pengedaran memutuskan cara untuk menyediakannya. FreeBSD tidak mempunyai konflik sedemikian, jadi ZFS tersedia secara terus. Itulah keseluruhan cerita praktikalnya: satu perbezaan pembungkusan, dan tiada apa yang perlu anda pertikaikan.

SSD Nodes tidak menawarkan imej FreeBSD, jadi pada pelayan yang disewa di sini, bahagian Linux dalam panduan ini adalah yang terpakai. Jika anda menjalankan FreeBSD di tempat lain, pelayan FreeBSD mendapat ZFS tanpa modul untuk dibina dan tanpa peningkatan kernel yang perlu dihadapi.

Memasang ZFS dan mencipta pool

Pada Ubuntu, modul tersebut disertakan di dalam pakej kernel, jadi anda hanya perlu memasang arahan-arahannya.

sudo apt update
sudo apt install -y zfsutils-linux
zfs version

zfs version mencetak dua baris, iaitu versi userland dan versi modul kernel. Jika hanya satu baris dipaparkan, ini bermakna modul tersebut tidak dimuatkan. Pakej ini berada dalam komponen universe, yang diaktifkan secara lalai pada imej Ubuntu server; jika apt tidak menemuinya, jalankan sudo add-apt-repository universe terlebih dahulu.

Pada Debian, pakej-pakej tersebut berada dalam komponen contrib dan modul tersebut dibina pada mesin anda melalui DKMS (dynamic kernel module support). Tambahkan contrib pada baris Components: di dalam /etc/apt/sources.list.d/debian.sources, jalankan sudo apt update, kemudian:

sudo apt install -y linux-headers-$(dpkg --print-architecture) zfs-dkms zfsutils-linux

Proses pemasangan akan menyusun atur (compile) modul tersebut dan mencetak Building initial module for 6.12.0-..., yang mengambil masa beberapa minit. Ingat maksudnya: setiap kali naik taraf kernel, modul ini akan dibina semula, dan kegagalan binaan akan menyebabkan pool anda tidak dapat diimport sehingga anda membaikinya.

Pada FreeBSD, tiada apa-apa yang perlu dipasang. Aktifkan servis tersebut dan mulakannya.

sysrc zfs_enable=YES
service zfs start

Sekarang, sediakan pool. Lihat laluan peranti yang stabil terlebih dahulu, kerana /dev/vdb diberikan mengikut urutan pengesanan dan boleh berubah apabila anda menyambungkan volum lain.

ls -l /dev/disk/by-id/
sudo zpool create -o ashift=12 tank /dev/disk/by-id/virtio-abc123def456
zpool status tank

zpool status sepatutnya mencetak state: ONLINE dengan peranti anda disenaraikan di bawah tank. ashift=12 menetapkan blok terkecil pool pada 4 KiB, yang sepadan dengan SSD semasa dan tidak boleh diubah selepas penciptaan.

Kebanyakan imej sewaan melakukan boot daripada root ext4, jadi ZFS di sini merupakan pool data pada volum kedua dan bukannya sistem fail root. Pastikan peranti tersebut adalah peranti yang betul sebelum anda membina sesuatu di atasnya, kerana mengesahkan cakera NVMe yang anda beli hanya mengambil masa satu minit, manakala pembinaan semula mengambil masa sepanjang petang.

Checksum hanya membaiki apabila pool mempunyai redundansi

Setiap blok yang ditulis oleh ZFS membawa checksum, dan setiap bacaan akan disahkan. Pengesanan sentiasa berfungsi. Pembaikan memerlukan salinan kedua.

Pada pool cakera tunggal, ZFS memberitahu anda perkara sebenar dan berhenti di situ. zpool status -v melaporkannya seperti ini:

status: One or more devices has experienced an error resulting in data
        corruption.
action: Restore the file in question if possible.  Otherwise restore the
        entire pool from backup.
errors: Permanent errors have been detected in the following files:

        /tank/data/archive.tar

Fail yang rosak akan dinamakan. ext4 akan mengembalikan bait tersebut tanpa sebarang ulasan, jadi ini sudah pun mempunyai nilai. ZFS masih tidak dapat membaikinya, kerana tiada salinan kedua dalam pool untuk membaikinya.

Dengan mirror, bacaan yang sama dihidangkan daripada bahagian yang baik, blok yang rosak ditulis semula, dan peristiwa itu muncul dalam lajur CKSUM bagi zpool status. Itu adalah penyembuhan kendiri (self-healing), dan ia memerlukan dua peranti.

sudo zpool create -o ashift=12 tank mirror /dev/disk/by-id/DISK1 /dev/disk/by-id/DISK2

Pada VPS, storan hos biasanya sudah mempunyai redundansi, selalunya RAID 10 di bawah hypervisor. Itu melindungi anda daripada pemacu yang mati. Ia tidak memberitahu anda apabila blok kembali dengan ralat, kerana tatasusunan (array) tidak mempunyai cara untuk mengetahui salinan mana yang betul. ZFS tahu, kerana ia membandingkan data dengan checksum yang ditulisnya sendiri.

Jika anda mempunyai satu cakera maya dan mahukan keupayaan pembaikan, sudo zfs set copies=2 tank/important menyimpan dua salinan setiap blok dataset tersebut pada cakera yang sama. Ia menggandakan ruang yang digunakan oleh dataset tersebut, ia mampu bertahan daripada blok yang rosak, dan ia tidak melakukan apa-apa apabila keseluruhan volum hilang.

Scrub membaca segala-galanya dalam pool dan mengesahkannya.

sudo zpool scrub tank
zpool status tank

Pool yang sihat berakhir dengan baris seperti scan: scrub repaired 0B in 00:04:11 with 0 errors. Letakkannya dalam jadual; bulanan sudah memadai untuk pool yang kecil.

systemctl list-unit-files 'zfs-scrub*'
sudo systemctl enable --now zfs-scrub-monthly@tank.timer

Dataset ialah unit polisi

Dataset merupakan sistem fail di dalam pool, dan proses menciptanya adalah ringan, jadi cipta satu dataset bagi setiap tugasan. Sifat (properties) diwarisi daripada pool, bermakna anda hanya perlu menetapkan nilai lalai sekali dan mengubahnya pada bahagian yang perlu sahaja.

sudo zfs create tank/data
sudo zfs create tank/pg
sudo zfs set compression=lz4 tank
sudo zfs set atime=off tank
sudo zfs set quota=20G tank/data
sudo zfs set recordsize=16K tank/pg
zfs get -r compression,compressratio,quota tank

Compression adalah sifat yang sering diabaikan pengguna kerana berhati-hati, namun tindakan ini sebenarnya kurang tepat. lz4 menggunakan sedikit CPU dan mengurangkan jumlah bait yang perlu sampai ke cakera, jadi bagi data yang boleh dimampatkan, ia biasanya mempercepatkan proses baca dan tulis. zstd memampatkan data dengan lebih padat menggunakan lebih banyak CPU, yang sesuai untuk log dan arkib yang jarang dibaca semula. Semak hasil sebenar yang anda peroleh dengan zfs get compressratio tank, dan ingat bahawa nisbah tersebut hanya mengira data yang ditulis selepas sifat tersebut ditetapkan.

recordsize ialah blok terbesar yang ditulis oleh sesuatu dataset, dengan nilai lalai 128K. Pangkalan data yang menulis halaman 8 KiB ke dalam rekod 128 KiB akan menukarkan satu penulisan kecil kepada proses membaca keseluruhan rekod, melakukan perubahan, dan menulis semula. Tetapkan recordsize=16K pada dataset pangkalan data sebelum anda memuatkan data, kerana sifat ini hanya terpakai pada blok yang baru ditulis.

quota ialah cara untuk menghalang satu dataset daripada memenuhi keseluruhan pool. Pool ZFS yang hampir 100% penuh akan menjadi perlahan dan sukar untuk dibersihkan, jadi sediakan ruang kosong secara sengaja.

Snapshots tidak menelan kos sehingga data berubah

ZFS tidak pernah menulis ganti blok yang sedang digunakan. Ia menulis blok baharu dan mengemas kini penunjuk, iaitu maksud sebenar copy-on-write. Snapshot hanyalah nota yang menyatakan "kekalkan blok yang ditunjuk oleh dataset ini sekarang", jadi proses mengambilnya adalah serta-merta dan percuma.

sudo zfs snapshot tank/data@2026-08-11
zfs list -t snapshot -o name,used,refer -r tank/data

Lajur USED bagi sesuatu snapshot ialah ruang yang dipegang oleh snapshot itu sahaja. Ia bermula hampir sifar dan meningkat apabila anda mengubah atau memadam data, kerana blok lama tidak lagi boleh dilepaskan.

Mendapatkan semula fail tidak memerlukan langkah pemulihan (restore).

ls /tank/data/.zfs/snapshot/
cp /tank/data/.zfs/snapshot/2026-08-11/notes.txt /tank/data/notes.txt

Direktori .zfs disembunyikan walaupun daripada ls -a sehingga anda menjalankan sudo zfs set snapdir=visible tank/data. Ambil snapshot sebelum anda memerlukannya, kerana tanpa snapshot, satu rm -rf yang tersilap akan mengheret anda ke laluan pemulihan ext4, yang bermula dengan menyahlekap (unmount) cakera dan keadaan menjadi lebih buruk selepas itu.

Rollback akan membuang segala-galanya yang ditulis sejak snapshot diambil.

sudo zfs rollback tank/data@2026-08-11

Ia akan menolak jika terdapat snapshot yang lebih baharu, dan -r akan memusnahkan snapshot yang lebih baharu itu untuk meneruskan proses. Baca nama dataset dua kali sebelum anda menekan enter.

Snapshot bukanlah sandaran (backup). Ia berada dalam pool yang sama, pada volum yang sama, di pelayan yang sama. Volum yang gagal atau satu zpool destroy akan membawa snapshot bersama-sama dengan data tersebut. Snapshot melindungi anda daripada rm anda sendiri dan daripada naik taraf yang bermasalah, yang meliputi banyak insiden sebenar, namun ia tidak melindungi anda daripada apa-apa yang berlaku kepada pool itu sendiri. Hujah penuh dinyatakan di sini: mengapa snapshot VPS bukan sandaran.

Menghantar dan menerima: replikasi dalam satu arahan

zfs send menukarkan snapshot kepada aliran bait pada output standard, dan zfs receive menukarkan semula aliran tersebut menjadi dataset. Salinan pertama ialah penghantaran penuh (full send).

sudo zfs snapshot tank/data@daily-2026-08-11
sudo zfs send tank/data@daily-2026-08-11 | ssh backup.example.com "sudo zfs recv -F backup/data"

Selepas itu, hantar hanya bahagian yang berubah antara dua snapshot.

sudo zfs snapshot tank/data@daily-2026-08-12
sudo zfs send -i tank/data@daily-2026-08-11 tank/data@daily-2026-08-12 | ssh backup.example.com "sudo zfs recv backup/data"

Pihak penerima mesti masih menyimpan snapshot yang anda gunakan untuk menghantar. Apabila ia tidak memilikinya, proses penerimaan terhenti dengan cannot receive incremental stream: most recent snapshot of backup/data does not match incremental source, kerana ZFS tidak mempunyai asas untuk menggunakan perbezaan tersebut. Hantar daripada snapshot yang dimiliki oleh kedua-dua pihak, atau mulakan semula dengan penghantaran penuh.

Berikan hak pada sasaran dan bukannya menggunakan root jauh: sudo zfs allow -u backupuser create,mount,receive backup/data.

Ini ialah sandaran luar tapak (off-site backup) yang sebenar dengan satu syarat. Hujung jauh mestilah sebuah ZFS pool, kerana storan objek tidak boleh menerima aliran data. Apabila sasaran anda ialah storan yang serasi dengan S3 atau hos Linux biasa, gunakan alat yang boleh berhubung dengannya, dan sandaran restic daripada VPS merangkumi laluan tersebut.

Mengapa ZFS menggunakan begitu banyak RAM? ARC

ARC (adaptive replacement cache) ialah cache bacaan bagi ZFS. Ia berada dalam memori kernel dan bukannya dalam page cache Linux biasa, jadi free -h tidak melaporkannya di bawah buff/cache. Ia dibaca sebagai memori yang sedang digunakan. Pelayan ZFS yang kelihatan hampir penuh biasanya merupakan pelayan dengan cache yang hangat, dan itulah punca bagi kebanyakan laporan "ZFS memakan RAM saya".

Had lalai ditetapkan secara sengaja dengan nilai yang besar. OpenZFS 2.3 menetapkan saiz maksimum ARC kepada nilai yang lebih besar antara RAM tolak 1 GiB atau 5/8 daripada jumlah RAM. OpenZFS 2.2 dan versi sebelumnya menggunakan separuh daripada RAM pada Linux, manakala FreeBSD sudah pun menggunakan peraturan yang lebih baharu. Jalankan zfs version untuk melihat peraturan yang terpakai bagi sistem anda.

ChartDefault maximum ARC size by instance RAM, from the OpenZFS default rule (GiB)
The data behind this chart
[
  {
    "label": "2 GB VPS",
    "openzfs_2_2_linux_gib": 1,
    "openzfs_2_3_gib": 1.25
  },
  {
    "label": "4 GB VPS",
    "openzfs_2_2_linux_gib": 2,
    "openzfs_2_3_gib": 3
  },
  {
    "label": "8 GB VPS",
    "openzfs_2_2_linux_gib": 4,
    "openzfs_2_3_gib": 7
  },
  {
    "label": "16 GB VPS",
    "openzfs_2_2_linux_gib": 8,
    "openzfs_2_3_gib": 15
  }
]

Angka-angka tersebut adalah peraturan lalai yang didokumentasikan untuk saiz instans biasa, bukan ukuran daripada pelayan yang sedang berjalan. Pada instans 4 GB, peraturan 2.3 membenarkan ARC sebesar 3 GiB. Pelayan yang sama pada versi 2.2 akan berhenti pada 2 GiB. Instans 2 GB di bawah peraturan 2.3 masih membenarkan 1.25 GiB. Aplikasi anda akan mendapat baki memori yang tinggal.

Baca angka sebenar daripada pelayan anda sendiri dan jangan hanya bergantung pada jadual:

grep -E '^(size|c_max) ' /proc/spl/kstat/zfs/arcstats
arc_summary | head -n 20

Lajur ketiga adalah dalam unit bait. c_max ialah had maksimum yang berkuat kuasa sekarang, dan size ialah jumlah yang dipegang oleh ARC pada masa ini.

ARC memang akan memulangkan memori. Kernel akan memberi isyarat tekanan memori dan ARC akan mengecil. Masalahnya ialah dari segi masa, kerana pengecilan tersebut didorong oleh tekanan itu sendiri. Oleh itu, proses yang meminta beberapa ratus MiB secara serentak boleh menyebabkan OOM (out of memory) killer bertindak semasa ARC masih dalam proses melepaskan memori. Pada pelayan 2 GB yang menjalankan pangkalan data dan pelayan web, perkara ini bukanlah sesuatu yang jarang berlaku. Manual OpenZFS menyatakan perkara yang sama mengenai perubahan manual: menurunkan had "tidak akan menyebabkan ARC mengecil tanpa tekanan memori untuk mendorong pengecilan tersebut".

Cara mengehadkan ARC pada VPS kecil

Tentukan dahulu keperluan memori beban kerja anda. Jumlahkan keperluan pangkalan data dan aplikasi, sediakan margin untuk sistem pengendalian, dan berikan baki memori kepada ARC. Pada instans 4 GB yang menjalankan Postgres dan satu aplikasi web, 512 MiB hingga 1 GiB ARC adalah titik permulaan yang munasabah.

Tetapkan had tersebut secara langsung, dalam bait. Nilai ini adalah 1 GiB.

echo 1073741824 | sudo tee /sys/module/zfs/parameters/zfs_arc_max

Pastikan tetapan ini kekal selepas but semula.

echo 'options zfs zfs_arc_max=1073741824' | sudo tee /etc/modprobe.d/zfs.conf
sudo update-initramfs -u

Langkah initramfs adalah penting kerana modul boleh dimuatkan daripada initramfs sebelum sistem fail root dilekapkan, yang bermaksud ia tidak akan membaca fail yang baru anda tulis. Selepas but semula, sahkan dengan baris c_max daripada arcstats.

Terdapat dua peringatan daripada manual itu sendiri. Anda tidak boleh menetapkan nilai kembali kepada 0 semasa sistem sedang berjalan, jadi untuk membatalkannya anda perlu menyunting fail tersebut dan melakukan but semula. Selain itu, mengurangkan nombor tidak akan mengecilkan ARC yang besar serta-merta.

Pada FreeBSD, had yang sama adalah sysctl di bawah vfs.zfs.arc. Jalankan sysctl vfs.zfs.arc untuk melihat nilai semasa dan nama tepat yang digunakan oleh versi anda, kemudian tulis nilai maksimum ke dalam /boot/loader.conf.

Dua lagi peraturan memori untuk pelayan kecil. Pastikan deduplikasi dimatikan, kerana jadual dedup berada dalam memori dan peraturan umum yang sering diterbitkan ialah 1 hingga 3 GB RAM bagi setiap TB data unik. Jangan letakkan swap pada zvol (peranti blok yang dibentuk daripada pool), kerana proses swap melalui sistem fail yang sedang cuba mengosongkan memori boleh menyebabkan kebuntuan (deadlock) pada mesin. Simpan swap pada partition biasa atau fail swap di luar pool.

Apabila ext4 atau XFS berserta restic menjadi pilihan yang lebih baik

ZFS berbaloi digunakan pada pelayan yang mempunyai lebihan memori dan volum kedua. Selain daripada itu, sistem fail biasa berserta alat sandaran yang sebenar adalah lebih baik. Pilih ext4 atau XFS apabila:

  • Instans mempunyai 2 GB atau 4 GB RAM dan beban kerja memerlukan kesemuanya.
  • Terdapat satu cakera maya dan tiada salinan kedua, jadi ZFS hanya memberikan pengesanan tanpa pembaikan.
  • Sasaran sandaran anda ialah storan objek atau hos Linux biasa, jadi tiada apa-apa di sana yang boleh menerima strim zfs send.
  • Anda menjalankan Debian dengan DKMS dan tidak mampu menanggung peningkatan kernel yang menyebabkan modul tidak dibina.
  • Anda memerlukan ZFS pada sistem fail root tetapi imej daripada pembekal hanya menawarkan ext4.

Kekalkan ZFS apabila anda mempunyai volum data yang berasingan, RAM yang mencukupi (8 GB ke atas adalah selesa), dan pelan yang menggunakan snapshot serta zfs send dan bukannya sekadar mengaktifkannya. Untuk segala-galanya, ext4 dengan restic yang menulis sandaran terenkripsi dan dinyahduplikasi ke storan yang tidak dikawal oleh pelayan tersebut merangkumi kebanyakan fungsi yang sama tanpa menggunakan memori.

Mod kegagalan, berserta rentetan yang akan anda lihat

Pool hilang selepas but semula. zpool status memaparkan no pools available. Servis import membaca /etc/zfs/zpool.cache, jadi pool yang tiada dalam fail tersebut tidak akan diimport semasa but. sudo zpool import menyenaraikan apa yang boleh diimport, sudo zpool import tank mengimportnya semula, dan sudo zpool set cachefile=/etc/zfs/zpool.cache tank menjadikannya kekal. Pool yang tidak dieksport dengan sempurna daripada sistem lain melaporkan cannot import 'tank': pool may be in use from other system, dan sudo zpool import -f tank mengatasi ralat tersebut sebaik sahaja anda pasti tiada hos lain yang menggunakannya.

modprobe: FATAL: Module zfs not found in directory /lib/modules/6.12.0-... pada Debian selepas naik taraf kernel. DKMS gagal dibina untuk kernel baharu, biasanya kerana header yang sepadan tidak dipasang. dkms status menunjukkan apa yang dibina untuk setiap kernel. sudo apt install -y linux-headers-$(uname -r) kemudian sudo dkms autoinstall membina semula modul tersebut, dan sudo zpool import tank mengimport semula pool.

Pool penuh walaupun anda telah memadam fail. Data yang dipadam kekal pada cakera selagi snapshot masih merujuknya, jadi du dan df menunjukkan nilai yang berbeza. zfs list -o space -r tank memecahkan penggunaan kepada USEDDS dan USEDSNAP, dan nilai USEDSNAP yang besar adalah puncanya. Hapuskan snapshot lama dengan sudo zfs destroy tank/data@2026-06-01 dan ruang storan akan kembali tersedia.

Kiraan CKSUM meningkat dalam zpool status. Sesuatu di bawah ZFS telah mengembalikan data yang rosak. Pada konfigurasi mirror, kiraan ini hanyalah amaran dan blok tersebut telah dibaiki. Pada pool cakera tunggal, fail tersebut hilang, zpool status -v akan menamakan fail tersebut, dan anda perlu memulihkan fail itu daripada sandaran yang tidak disimpan dalam pool ini.

Pelayan perlahan dan melakukan swapping. Hadkan ARC seperti di atas, kemudian jalankan arc_summary dan perhatikan nisbah hit. ARC yang terlalu kecil untuk menampung set kerja bermakna setiap bacaan pergi ke cakera; pada tahap ini, sistem fail biasa yang menggunakan page cache akan memberikan prestasi yang lebih baik.

FAQ

Berapakah jumlah RAM yang diperlukan oleh ZFS pada VPS?

ZFS boleh dijalankan pada instans 2 GB. Persoalan sebenar ialah berapa banyak RAM yang tinggal untuk aplikasi anda. Tanpa penalaan, OpenZFS 2.3 membenarkan ARC berkembang kepada nilai yang lebih besar antara RAM tolak 1 GiB atau 5/8 daripada jumlah RAM, jadi pelayan 4 GB boleh memperuntukkan 3 GiB kepada cache. Tetapkan zfs_arc_max kepada nilai yang boleh dikorbankan oleh beban kerja anda, kemudian sahkan nilainya dengan membaca baris c_max daripada /proc/spl/kstat/zfs/arcstats.

Adakah snapshot ZFS dianggap sebagai sandaran (backup)?

Tidak. Snapshot wujud dalam pool yang sama dengan data asal. Ia mampu bertahan daripada rm yang rosak dan naik taraf yang gagal, namun ia akan hilang jika pool atau instans tersebut musnah. Jadikan ia sandaran dengan menghantarnya ke mesin lain menggunakan zfs send, atau dengan menjalankan alat sandaran yang menulis ke storan yang tidak dikawal oleh pelayan ini.

Adakah ZFS berfungsi sama pada FreeBSD dan Linux?

Kod asasnya adalah sama sejak OpenZFS 2.0 pada Disember 2020, perintahnya sama, format pada cakera sama, dan pool boleh dipindahkan antara kedua-duanya. Perbezaannya terletak pada pembungkusan. FreeBSD menyertakan ZFS dalam sistem asas. Pada Linux, setiap distribusi mempunyai pendekatan berbeza: Ubuntu membina modul ke dalam pakej kernelnya, manakala Debian membina modul tersebut pada mesin anda menggunakan DKMS, jadi naik taraf kernel boleh menyebabkan anda kehilangan modul sehingga proses binaan semula berjaya.

Bolehkah ZFS membaiki kerosakan pada VPS dengan satu cakera?

Ia dapat mengesan kerosakan dan menamakan fail tersebut, namun ia tidak dapat membaikinya kerana pembaikan memerlukan salinan kedua bagi blok data. zfs set copies=2 pada dataset memberikan anda salinan kedua tersebut dengan penggunaan ruang dua kali ganda, yang mampu menangani blok yang rosak tetapi bukan kehilangan volum. Cermin (mirror) merentasi dua volum adalah jawapan yang benar-benar memulihkan data.

Adakah pemampatan (compression) melambatkan pelayan?

lz4 biasanya menjadikannya lebih pantas. Blok yang dimampatkan bermakna lebih sedikit bait yang ditulis dan dibaca, dan kos CPU bagi setiap blok adalah kecil berbanding penjimatan ruang cakera yang diperoleh. Tetapkan compression=lz4 pada root pool supaya setiap dataset mewarisinya, kemudian semak zfs get compressratio tank setelah data sebenar ditulis.