ZFS bringt RAID als eingebaute Funktion mit — kein separater Volumemanager nötig. Mirror, RAID-Z (ähnlich RAID-5), RAID-Z2 (ähnlich RAID-6) und RAID-Z3 sind direkt im Pool konfigurierbar. Spare-Platten und Striping ebenfalls.
Mirror anlegen
Einen neuen Pool direkt als Mirror erstellen:
zpool create backup mirror da0 da1
Einem bestehenden Pool eine Spiegelplatte hinzufügen:
zpool attach backup da0 da1 Make sure to wait until resilver is done before rebooting.
Wichtig: Die Reihenfolge der Platten zählt. Die erste Platte (da0) ist die Quelle, die zweite (da1) wird als Spiegel hinzugefügt. Vertauscht man die Platten, spiegelt ZFS die leere Platte auf die Datenplatte.
RAID-Z
RAID-Z verteilt Daten und Parität über mehrere Platten — ähnlich wie klassisches RAID, aber mit Copy-on-Write und ohne Write Hole:
# raidz — 1 Platte darf ausfallen (wie RAID-5), mindestens 3 Platten zpool create tank raidz da0 da1 da2 # raidz2 — 2 Platten dürfen ausfallen (wie RAID-6), mindestens 4 Platten zpool create tank raidz2 da0 da1 da2 da3 # raidz3 — 3 Platten dürfen ausfallen, mindestens 5 Platten zpool create tank raidz3 da0 da1 da2 da3 da4 # Mit Hot-Spare zpool create tank raidz da0 da1 da2 spare da3
Resilvering
Beim Resilvering zeigt sich ein großer Vorteil von ZFS: Da Dateisystem und Volumemanager nicht getrennt sind, weiß ZFS genau, wo Daten liegen. Es spiegelt nur belegte Blöcke. Ein 80-GB-Mirror mit 4 GB Daten war in 5 Minuten fertig resilvered — klassische Lösungen wie mdadm würden stumpf alle 80 GB Block für Block kopieren.
zpool status backup
pool: backup
state: ONLINE
scan: resilvered 4,04G in 0h5m with 0 errors on Mon Oct 31 13:33:00 2011
config:
NAME STATE READ WRITE CKSUM
backup ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
da0 ONLINE 0 0 0
da1 ONLINE 0 0 0
errors: No known data errors
Root-Pool spiegeln
Gespiegelte Daten helfen nichts, wenn die Systemplatte ausfällt und man nicht booten kann. Daher den Root-Pool ebenfalls spiegeln — und den Bootloader auf beide Platten schreiben.
Unter Solaris/OpenIndiana:
# Partitionslayout der Quellplatte auf die Zielplatte kopieren prtvtoc /dev/rdsk/c2d0s2 | fmthard -s - /dev/rdsk/c2d1s2 # Zielplatte dem Root-Pool als Mirror hinzufügen zpool attach -f rpool c2d0s0 c2d1s0 Make sure to wait until resilver is done before rebooting. # Grub auf die Zielplatte schreiben installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c2d1s0
Unter FreeBSD ist es einfacher — gpart für die Partitionierung und gptzfsboot für den Bootloader. Unter Linux mit UEFI reicht oft ein zpool attach und die Kopie der EFI-Partition.
Praxistest — Hauptplatte gezogen, System von der Spiegelplatte gebootet:
zpool status rpool
pool: rpool
state: DEGRADED
config:
NAME STATE READ WRITE CKSUM
rpool DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
c2d0s0 FAULTED 0 0 0 corrupted data
c2d1s0 ONLINE 0 0 0
errors: No known data errors
Degraded, aber online — genau wie gewünscht. Nach dem Einsetzen einer neuen Platte übernimmt zpool replace den Rest.
Details in der OpenZFS-Dokumentation zu zpool create. Mehr zu ZFS: ZFS Snapshots und ZFS Compression und Deduplication. Fragen? Einfach melden.
Schreibe einen Kommentar