Vergrößern eines ZFS-Pools

Um ein Raidz Pool unter FreeBSD zu vergrößern gibt es mehr oder weniger zwei Möglichkeiten: das Hinzufügen eines weiteren Pools (sofern man genügend Anschlüsse frei hat) oder aber das austauschen der vorhandenen Festplatten gegen Größere. In dem Beispiel werden die 4x 5GB gegen 10GB Platten ausgetauscht. Das System nutzt folgende Version von FreeBSD, ZFS und Zpool.

 

[root@raid /home/ohaucke]# uname -mrs
FreeBSD 9.1-RELEASE amd64

[root@raid /home/ohaucke]# zpool upgrade
This system is currently running ZFS pool version 28.

All pools are formatted using this version.
[root@raid /home/ohaucke]# zfs upgrade
This system is currently running ZFS filesystem version 5.

All filesystems are formatted with the current version.

Bisher sieht der Pool wie folgt aus:

[root@raid /home/ohaucke]# zpool status tank
  pool: tank
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            da0     ONLINE       0     0     0
            da1     ONLINE       0     0     0
            da2     ONLINE       0     0     0
            da3     ONLINE       0     0     0

errors: No known data errors
[root@raid /home/ohaucke]# zfs list
NAME   USED  AVAIL  REFER  MOUNTPOINT
tank   124K  14.6G  43.4K  /tank

In dem Beispiel liegen keine Nutzdaten vor, weswegen die Platten ziemlich leer sind, aber es ändert nichts an der Vorgehensweise. Die Platten werden einzeln nacheinander gegen die Größeren ausgetauscht. Die Reihenfolge spielt dabei keine Rolle, ich fang mit da3 an, das Laufwerk wird zuvor mittels zpool offline pool device offline genommen (was empfehlenswert ist, sollte die Platte im laufenden Betrieb ausgetauscht werden, aber auch beim runterfahren und austauschen schadet es nicht).
Nach dem Austauschen der Platte sieht der Pool so aus:

[root@raid /home/ohaucke]# zpool status tank
  pool: tank
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
  scan: none requested
config:

        NAME                     STATE     READ WRITE CKSUM
        tank                     DEGRADED     0     0     0
          raidz1-0               DEGRADED     0     0     0
            da0                  ONLINE       0     0     0
            da1                  ONLINE       0     0     0
            da2                  ONLINE       0     0     0
            1620270157076266707  OFFLINE      0     0     0  was /dev/da3

errors: No known data errors

Im Anschluss wird die Platte unter zfs ausgetauscht. Je nachdem wie viele Daten auf dem RAID gespeichert sind, kann die “resilvering”-Prozedur etwas länger dauern. Wie weit der Prozess fortgeschritten ist, kann mit zpool status pool ermittelt werden.

[root@raid /home/ohaucke]# zpool replace tank da3
[root@raid /home/ohaucke]# zpool status tank
  pool: tank
 state: ONLINE
  scan: resilvered 33.5K in 0h0m with 0 errors on Sat Oct 26 02:15:36 2013
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            da0     ONLINE       0     0     0
            da1     ONLINE       0     0     0
            da2     ONLINE       0     0     0
            da3     ONLINE       0     0     0

errors: No known data errors

Der Vorgang wiederholt sich bei jeder Platte. Nachdem alle vier ausgetauscht wurden, weisen wir mittels zpool online -e pool device ZFS an den gesamten verfügbaren Speicher der Laufwerke zu nutzen. Wichtig ist der Parameter -e, ohne diesen funktioniert es nicht!

[root@raid /home/ohaucke]# zfs list
NAME   USED  AVAIL  REFER  MOUNTPOINT
tank   138K  14.6G  43.4K  /tank
[root@raid /home/ohaucke]# zpool online -e tank da0
[root@raid /home/ohaucke]# zpool online -e tank da1
[root@raid /home/ohaucke]# zpool online -e tank da2
[root@raid /home/ohaucke]# zpool online -e tank da3
[root@raid /home/ohaucke]# zfs list
NAME   USED  AVAIL  REFER  MOUNTPOINT
tank   142K  29.4G  43.4K  /tank

Damit wäre die vergrößerung des Pools abgeschlossen, anbei das ganze noch als Video.
Viel Spaß!