Weblog

ZFS auf größere Festplatten erweitern

10.06.2025 2 Min. Lesezeit

Der übliche Weg, ein ZFS-Dateisystem auf größere Festplatten zu erweitern, besteht darin, das Pool-Attribut autoexpand auf on zu setzen und die Festplatten nacheinander auszutauschen. Beispielhaft für einen Pool namens tank, der die beiden Festplatten sdb und sdc enthält:

$ zpool set autoexpand=on tank
$ zpool replace tank /dev/sdb /dev/sdd 
$ zpool status -v tank # warte bis das Resilvering abgeschlossen ist!
$ zpool replace tank /dev/sdc /dev/sde 
$ zpool status -v tank # warte bis das Resilvering abgeschlossen ist!
$ zpool export tank
$ zpool import tank

Nach dem Austausch beider Festplatten gegen größere Modelle und einem anschließenden Export/Import des Pools erweitert ZFS den Pool automatisch auf die maximale Größe der neuen Datenträger.

Achtung:
Bevor der nächste Schritt durchgeführt wird, muss der Resilvering-Prozess (die Wiederherstellung/Synchronisierung der Daten) der jeweils ersetzten Festplatte vollständig abgeschlossen sein. Erst danach sollten die alten Festplatten entfernt werden.

ZFS erkennt die neuen Datenträger beim erneuten Import automatisch. Es ist daher nicht notwendig, sich zu merken, welche Festplatte an welchem Controller-Port angeschlossen war.

Besonderheit unter Linux (ZFS on Linux)

Unter Linux mit den „ZFS on Linux“-Modulen sind zusätzliche Schritte erforderlich, damit der Pool tatsächlich auf die volle Größe anwächst:

$ zpool set autoexpand=on tank
$ zpool replace tank /dev/sdb /dev/sdd 
$ zpool status -v tank # warte bis das Resilvering abgeschlossen ist!
$ zpool replace tank /dev/sdc /dev/sde 
$ zpool status -v tank # warte bis das Resilvering abgeschlossen ist!
$ zpool export tank
$ zpool import tank
$ zpool online -e tank /dev/sdd
$ zpool online -e tank /dev/sde
$ zpool export tank
$ zpool import tank

Der Pool wird dabei zweimal exportiert und importiert. Danach nutzt ZFS die komplette Kapazität der neuen Festplatten aus.

Das gleiche Vorgehen gilt auch dann, wenn statt ganzer Festplatten nur Partitionen oder Slices für ZFS verwendet werden.

Wenn keine freien Controller-Ports verfügbar sind

Falls keine freien Anschlüsse für die neuen Festplatten vorhanden sind, kann man den Pool absichtlich in einen degradierten Zustand versetzen: Dazu wird eine alte Festplatte direkt durch eine neue ersetzt und der degradierte Pool anschließend resilvert.

Der Austauschvorgang funktioniert unabhängig davon, ob der Pool bereits degradiert ist oder nicht.

Achtung:
Das absichtliche Degradieren eines Pools ist grundsätzlich riskant und keine gute Idee. Für mögliche Datenverluste wird ausdrücklich keine Verantwortung übernommen. Du wurdest gewarnt.
Themen Technikzeug
Schlagworte ZFS Linux
π