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ß!