Skip to main content

Cyber AI România

Administrarea ZFS pe Linux: scrubbing, snapshots, replication și recuperarea după degradarea unui pool

ZFS nu trebuie administrat ca un filesystem obișnuit. Un pool poate continua să funcționeze după defectarea unui disc, snapshot-urile pot conserva versiuni anterioare aproape instantaneu, iar zfs send poate replica dataset-uri la nivel de bloc. Dar aceste mecanisme rezolvă probleme diferite: scrub-ul verifică integritatea, snapshot-ul păstrează o stare anterioară, replication creează o copie independentă, iar resilver-ul reconstruiește redundanța după înlocuirea unui dispozitiv.

Vom folosi pool-ul tank și dataset-ul tank/data.

Începe întotdeauna cu starea reală a pool-ului

Rulează:

sudo zpool status -v tank
sudo zpool list
zfs list -o name,used,available,referenced,mountpoint

zpool status trebuie urmărit în special pentru coloanele:

READ
WRITE
CKSUM

READ și WRITE indică erori I/O raportate de dispozitiv. CKSUM înseamnă că blocul citit nu corespunde checksum-ului memorat de ZFS. Un pool redundant poate repara automat datele dacă există o copie validă.

Nu executa imediat:

sudo zpool clear tank

zpool clear resetează contoarele după ce problema a fost rezolvată; nu repară cauza unei erori hardware sau de integritate.

Rulează scrub pentru detectarea coruperii latente

Pornește verificarea:

sudo zpool scrub tank

Urmărește progresul:

watch -n 10 zpool status tank

Sau așteaptă finalizarea:

sudo zpool scrub -w tank

Scrub-ul citește datele pool-ului și validează checksum-urile. Pe mirror, RAIDZ sau dRAID, ZFS poate folosi redundanța pentru repararea automată a blocurilor deteriorate. Spre deosebire de scrub, resilver-ul procesează numai datele despre care ZFS știe că trebuie reconstruite.

Poți opri sau suspenda verificarea:

sudo zpool scrub -s tank
sudo zpool scrub -p tank

Scrub-ul produce I/O considerabil, deci programează-l într-o perioadă în care workload-ul poate tolera încărcarea suplimentară.

Creează snapshots înaintea modificărilor importante

Pentru un dataset:

sudo zfs snapshot tank/data@before-upgrade

Pentru el și descendenții lui:

sudo zfs snapshot -r tank/data@before-upgrade

Listează snapshot-urile:

zfs list -t snapshot -r tank/data

Snapshot-ul este read-only, apare aproape instantaneu și inițial nu duplică toate datele. Spațiul consumat crește pe măsură ce dataset-ul activ se modifică și snapshot-ul păstrează referințe către blocurile vechi.

Pentru recuperarea unui singur fișier, este mai sigur să îl copiezi din snapshot:

cp \
/tank/data/.zfs/snapshot/before-upgrade/config.ini \
/tank/data/config.ini

Evită zfs rollback dacă ai nevoie doar de un fișier. Rollback-ul elimină modificările făcute după snapshot, iar variantele -r și -R pot distruge snapshot-uri, bookmarks și chiar clone mai recente.

Replică dataset-ul pe un alt pool

Snapshot-ul de pe același pool nu este backup împotriva pierderii întregului pool.

Creează un snapshot:

sudo zfs snapshot tank/data@2026-08-08

Trimite-l către un server ZFS separat:

sudo zfs send tank/data@2026-08-08 |
ssh backup-server sudo zfs receive backup/data

Pentru următoarea replicare:

sudo zfs snapshot tank/data@2026-08-09

sudo zfs send \
  -i tank/data@2026-08-08 \
  tank/data@2026-08-09 |
ssh backup-server sudo zfs receive backup/data

zfs send -i transmite numai blocurile schimbate între cele două snapshot-uri, fără să scaneze întregul arbore de fișiere. Ambele sisteme trebuie să păstreze un snapshot comun pentru următoarea replicare incrementală.

Pentru întreaga ierarhie:

sudo zfs snapshot -r tank/data@replica

sudo zfs send -R tank/data@replica |
ssh backup-server sudo zfs receive -u backup/data

Nu modifica dataset-ul destinație dacă vrei replicări incrementale predictibile. Pentru o replică de backup, readonly=on este o măsură utilă.

Recuperează un pool DEGRADED

Dacă:

sudo zpool status tank

arată:

tank        DEGRADED
  mirror-0  DEGRADED
    disk1   ONLINE
    disk2   FAULTED

nu scoate discul până când nu identifici precis dispozitivul și redundanța rămasă.

Dacă discul a dispărut temporar, verifică mai întâi cablul, controllerul și dacă dispozitivul reapare în sistem.

Dacă trebuie înlocuit:

sudo zpool replace \
  tank \
  OLD_DEVICE \
  /dev/disk/by-id/NEW_DEVICE

Monitorizează:

watch -n 10 zpool status tank

ZFS va începe resilver-ul, iar la final pool-ul ar trebui să revină la ONLINE. Procedura oficială pentru un dispozitiv indisponibil este înlocuirea acestuia și monitorizarea reconstruirii.

După finalizare, rulează un scrub:

sudo zpool scrub -w tank
sudo zpool status -v tank

Un ZFS bine administrat înseamnă mai mult decât „pool ONLINE”: verificări periodice, snapshot-uri cu retenție controlată, replicare într-un failure domain separat și o procedură testată pentru înlocuirea discurilor. Redundanța menține serviciul disponibil; backup-ul separat este cel care te protejează când pierzi întregul pool sau ștergi datele greșite.

Surse folosite

OpenZFS Documentation — Scrub and Resilver, verificarea checksum-urilor și recuperarea redundantă.

OpenZFS Documentation — Snapshots, Clones and Bookmarks, recuperare și space accounting.

OpenZFS Documentation — zfs send și zfs receive, replicare completă și incrementală.

OpenZFS Documentation — recuperarea unui pool DEGRADED și zpool replace.

Facebook
X
WhatsApp

Te-ar putea interesa si: