Erstellen einer RAID-z Datenpartition

Klingt eigentlich ganz einfach, jedoch muss man einige Punkte beachten um später nicht anzustehen. Erst jedoch eine kleine Warnung. Aktuell (Stand Sept. 2010) ist Opensolaris nicht in der Lage weitere Disks zu einem bestehenden RAID-z hinzuzufügen. Es ist jedoch möglich die bestehenden Festplatten durch grössere zu ersetzen.

einige Bemerkungen
Da ich möglicherweise später die Disks durch grössere ersetzen will, müssen die Disks entsprechend vorbereitet werden. Es muss dazu eine EFI-Partitionstabelle eingesetzt werden.
Solaris kann ab einem RAID-z nicht booten, es ist daher nur als Datenpartition geeignet.
Bei weniger als drei Festplatten ist RAID-z natürlich sinnlos und es sollte ein Mirror eingesetzt werden.

Partitionieren der Disks
Die Disks werden erst formatiert und partitioniert. Diese Befehle müssen daher für jede der Platten wiederholt werden.
$ pfexec format -e
Danach wird die Disk ausgewählt und mit ‚label‘ ein EFI-Label auf die Disk geschrieben. Danach mit ‚fdisk‘ in die Partitionierung wechseln. Sollte dort eine einzige EFI-Partition angezeigt werden, ist diese Festplatte bereit. Falls nicht, müssen erst alle Partitionen gelöscht werden. Nach dem Löschen fdisk verlassen und gleich erneut einsteigen. So erstellt fdisk selbst die korrekte EFI-Partition.

Erstellen des Arrays
Eine Zeile reicht um ein Pool mit dem Namen ‚tank‘ anzulegen:
pfexec zpool create tank raidz c6t2d0 c6t3d0 c6t4d0 c6t5d0
Da noch keine Daten gespeichert sind dauert der Abgleich nur wenige Sekunden.

Testen der Integrität
$ pfexec zpool scrub tank
Abhängig von der gespeicherten Datenmenge kann dies viele Stunden dauern. Mit ‚zpool status tank‘ kann der Fortschritt überwacht werden.

Ersetzen einzelner Platten
Jede Festplatte muss einzeln ersetzt werden. Während dieser Zeit geht die Redundanz verloren, daher ist ein Backup empfehlenswert und zuvor sollte auch mit einem ’scrub‘-Durchlauf sichergestellt werden, dass sämtliche Platten in gutem zustand sind. Sind diese Vorbereitungen abgeschlossen, kann mit dem Ersetzen begonnen werden.

System herunterfahren, eine der Festplatten durch ein grösseres Modell ersetzen und das System wieder starten. Der Pool wird im Status „DEGRADED“ starten, sämtliche Daten sind jedoch verfügbar. Diese neue Platte wird nun wie, wie oben angegeben, mit einem EFI-Label versehen, partitioniert, und danach ins RAID-z eingebunden. Ich habe die Disk c6t5d0 entfernt und fälschlicherweise hat es mir danach zwei Mal die Disk c6t4d0 angezeigt, einmal FAILED, einmal ONLINE. Das ersetzen der Disk funktioniert trotzdem Problemlos. Als Argumente für ‚zpool replace‘ muss erst der Pool (tank), danach die defekte Platte (wie in der Ausgabe von ‚zpool status‘) und zuletzt die neue Platte angegeben werden.
$ pfexec zpool replace tank raidz c6t4d0 c6t5d0
Das Rekonstruieren der Daten kann viele Stunden dauern, der Fortschritt wird wiederum mit ‚zpool status -v tank‘ überwacht.

  pool: tank
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scrub: resilver in progress for 0h2m, 0.02% done, 232h54m to go
config:

        NAME             STATE     READ WRITE CKSUM
        tank             DEGRADED     0     0     0
          raidz1-0       DEGRADED     0     0     0
            replacing-0  DEGRADED     0     0     0
              c10t4d0    FAULTED      0     0     0  corrupted data
              c10t5d0    ONLINE       0     0     0  218M resilvered
            c10t4d0      ONLINE       0     0     0
            c10t3d0      ONLINE       0     0     0
            c10t2d0      ONLINE       0     0     0

errors: No known data errors

Das zusätzliche ‚-v‘ zeigt eine Liste der betroffenen Dateien, falls nicht alles von den verbleibenden Disks korrekt gelesen werden kann. Diese Dateien müssen von einem Backup wiederhergestellt werden.

Sind alle Festplatten vergrössert, wird auch der Pool mehr Speicherplatz besitzen. Ist dem nicht so, sollte die Eigenschaft ‚autoexpand‘ des Pools geprüft und auf ‚on‘ gesetzt werden:
pfexec zpool set autoexpand=on tank

Fazit
Bisher hat sich ZFS bei mir als sehr robust erwiesen und auch das Austauschen der Platten verlief problemlos. Dank der Checksummen wurde auch ein Fehler in einer der Dateien erkannt und ich konnte diese vom Backup zurückspielen. Ohne ZFS wäre eine defekte Datei auf der Festplatte, beinahe unauffindbar.

Ursprünglich bestand mein RAID-z aus 2×1.5T und 2x2T-Fesplatten. Die kleineren konnte ich so durch 2T-Platten ersetzten und habe dadurch rund 1.5T Speicherplatz gewonnen.

Dieser Beitrag wurde unter OpenSolaris, OpenSolaris Fileserver veröffentlicht. Setze ein Lesezeichen auf den Permalink.
Warning: count(): Parameter must be an array or an object that implements Countable in /home/httpd/vhosts/blog-it.ch/httpdocs/wp-includes/class-wp-comment-query.php on line 405