ZFS na Ubuntu VPS — snapshoty, kompresja i backup send/receive
Opublikowano: 10 kwietnia 2026 · Kategoria: VPS / Storage
ZFS to system plików z zarządzaniem woluminami w jednym — jego główne zalety to ochrona
integralności danych przez checksumming, natychmiastowe snapshoty (Copy-on-Write),
transparentna kompresja i wydajna replikacja przez zfs send/receive. Na VPS z
Ubuntu możesz zainstalować ZFS jako dodatkowy system plików do przechowywania danych
aplikacji, baz danych lub backupów. Ten artykuł pokazuje pełną konfigurację: od instalacji
przez tworzenie pool i datasets, zarządzanie snapshotami, aż po automatyczny backup na
zdalny serwer.
Instalacja ZFS na Ubuntu 22.04/24.04
# Na Ubuntu zfsutils jest w universe repo sudo apt update sudo apt install -y zfsutils-linux # Sprawdz wersje i zaladowane moduly zfs version lsmod | grep zfs # Wyswietl dostepne dyski (do tworzenia pool) lsblk -o NAME,SIZE,TYPE,MOUNTPOINT # lub fdisk -l | grep "Disk /dev/" # UWAGA: NIE uzywaj systemowego dysku (/) do ZFS pool na VPS # Uzyj dodatkowych dyskow lub loopback devices (do testow)
Tworzenie zpool — podstawy
Zpool to pula przechowywania w ZFS — może składać się z jednego lub wielu dysków w różnych konfiguracjach (stripe, mirror, RAID-Z). Na VPS z jednym dodatkowym dyskiem tworzymy prosty single-disk pool.
# Tworz pool na dysku /dev/sdb (UWAGA: niszczy dane na dysku!) sudo zpool create \ -o ashift=12 \ -O compression=lz4 \ -O atime=off \ -O xattr=sa \ -m /mnt/data \ datapool /dev/sdb # Parametry: # ashift=12 = 4K sektor alignment (NVMe/SSD wymaga tego) # compression=lz4 = kompresja domyslna dla wszystkich datasets # atime=off = nie aktualizuj access time (drastycznie mniej I/O) # xattr=sa = extended attributes w systemic attributes (szybsze) # -m /mnt/data = punkt montowania # datapool = nazwa poola # Status poola zpool status datapool zpool list datapool # Szczegolowe informacje zfs get all datapool | grep -E 'compress|atime|xattr|used|avail'
# Mirror (RAID-1) na dwoch dyskach: sudo zpool create datapool mirror /dev/sdb /dev/sdc # RAID-Z1 (jak RAID-5) — minimum 3 dyski, tolleruje 1 awarie: sudo zpool create datapool raidz1 /dev/sdb /dev/sdc /dev/sdd # RAID-Z2 (jak RAID-6) — minimum 4 dyski, tolleruje 2 awarie: sudo zpool create datapool raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde # Testowy pool na plikach loop (bez prawdziwych dyskow) fallocate -l 5G /tmp/disk1.img fallocate -l 5G /tmp/disk2.img sudo zpool create testpool mirror /tmp/disk1.img /tmp/disk2.img
Datasets — hierarchiczna organizacja danych
Dataset to jednostka w ZFS — możesz tworzyć hierarchię datasets, każdy z własną konfiguracją (quotas, kompresja, snapshot policy). Dziedziczenie: dataset dziedziczy właściwości po rodzicu, chyba że nadpiszesz.
# Utwórz datasets (montowane automatycznie) sudo zfs create datapool/db # /mnt/data/db sudo zfs create datapool/backups # /mnt/data/backups sudo zfs create datapool/app # /mnt/data/app # Osobne ustawienia per dataset # Baza danych: wylacz kompresje (skompresowane dane DB i tak nie sa kompresowalne) sudo zfs set compression=off datapool/db # Backupy: mocniejsza kompresja (zstd dla lepszego ratio) sudo zfs set compression=zstd datapool/backups # Quota: ogranicz rozmiar datasetu sudo zfs set quota=50G datapool/app sudo zfs set refquota=20G datapool/app # bez wliczania snapshotow # Listuj datasets zfs list zfs list -r datapool # Szczegóły zfs get compression,quota,used,avail datapool/app
Snapshoty — tworzenie, rollback i usuwanie
# Utwórz snapshot (natychmiastowy)
zfs snapshot datapool/app@przed-aktualizacja
zfs snapshot -r datapool@caly-pool-snapshot # Rekurencyjnie wszystkie datasets
# Listuj snapshoty
zfs list -t snapshot
zfs list -t snapshot -r datapool/app
# Rollback do snapshotu (COFA WSZYSTKIE ZMIANY po snapshocie)
zfs rollback datapool/app@przed-aktualizacja
# Usun snapshot
zfs destroy datapool/app@przed-aktualizacja
# Usun wszystkie snapshoty starsze niz 7 dni (przez find + destroy)
zfs list -t snapshot -H -o name datapool/app | head -5 # Sprawdz najpierw
# Backup inkrementalny przez zfs send/receive
# Pelny snapshot:
zfs send datapool/app@snapshot1 | ssh backup-server "zfs receive backuppool/app"
# Inkrementalny (tylko roznica):
zfs send -i datapool/app@snapshot1 datapool/app@snapshot2 | \
ssh backup-server "zfs receive backuppool/app"