k1l.me

Apr 08, 2020

HDDs im ZFS Raidz1 mit größeren HHDs ersetzen

So langsam kam ich mit meinem ZFS Raid zraid1 bestehend aus 3 mal 2TB Platten an die Füllgrenze.

k1l@server:~$ sudo zpool list
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
data  5,44T  4,85T   604G         -    41%    89%  1.00x  ONLINE  -

Also mussten neue Platten her. Eigentlich wollte ich einfach vedoppeln, also anstatt der 2TB WD Red bisher 3 mal 4TB WD Reds nutzen. Allerdings sind diese sehr preisstabil bei 110 Euro. Ich habe jetzt stattdessen externe HDDs WD MyBook 8TB für 139Euro im Angebot gekauft. Dort sind WD Whitelables drin: WD80EZAZ. Das ist eine Mischung aus WD Red und älterer HGST Produktion. HDDs aus den Gehäusen ausgebaut und einzeln gegen die alten Platten ausgetauscht.

k1l@server:~$ sudo zpool status -v
  pool: data
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
    invalid.  Sufficient replicas exist for the pool to continue
    functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: resilvered 1,61T in 7h0m with 0 errors on Wed Apr  8 05:03:52 2020
config:

    NAME                                          STATE     READ WRITE CKSUM
    data                                          DEGRADED     0     0     0
      raidz1-0                                    DEGRADED     0     0     0
        ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M3SNXEF9  UNAVAIL      0   139     0  corrupted data
        ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M1NN1HD9  ONLINE       0     0     0
        ata-WDC_WD80EZAZ-11TDBA0_1EHAJG2Z         ONLINE       0     0     0

Nach jedem Tausch muss man erst ZFS anweisen, die neue Platte anstatt der ausgebauten Platte einzubinden. Das ist genau so als wenn man eine kaputte Platte ersetzt.

k1l@server:~$ sudo zpool replace data ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M3SNXEF9 ata-WDC_WD80EZAZ-11TDBA0_1EHP91LZ -f

Sobald das resilvering fertig ist, 6-8 Stunden hier, kann man die nächste Platte austauschen.

k1l@server:~$ sudo zpool status -v
  pool: data
 state: ONLINE
  scan: resilvered 1,61T in 6h42m with 0 errors on Wed Apr  8 17:15:24 2020
config:

    NAME                                          STATE     READ WRITE CKSUM
    data                                          ONLINE       0     0     0
      raidz1-0                                    ONLINE       0     0     0
        ata-WDC_WD80EZAZ-11TDBA0_1EHP91LZ         ONLINE       0     0     0
        ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M1NN1HD9  ONLINE       0     0     0
        ata-WDC_WD80EZAZ-11TDBA0_1EHAJG2Z         ONLINE       0     0     0

Am Ende wird bei ZFSonLinux allerdings trotz zpool set autoexpand=on pool nicht das Filesystem auf die neue Größe angepasst.

k1l@server:~$ sudo zpool list -v
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
data  5,44T  4,85T   604G         -    41%    89%  1.00x  ONLINE  -
  raidz1  5,44T  4,85T   604G     1,09G    41%    89%
    ata-WDC_WD80EZAZ-11TDBA0_1EHP91LZ      -      -      -         -      -      -
    ata-WDC_WD80EZAZ-11TDBA0_1EHKSU8Z      -      -      -         -      -      -
    ata-WDC_WD80EZAZ-11TDBA0_1EHAJG2Z      -      -      -         -      -      -

Man muss bei Linux erst noch einzeln jede Platte online -e setzen.

k1l@server:~$ sudo zpool online -e data ata-WDC_WD80EZAZ-11TDBA0_1EHP91LZ
k1l@server:~$ sudo zpool online -e data ata-WDC_WD80EZAZ-11TDBA0_1EHKSU8Z
k1l@server:~$ sudo zpool online -e data ata-WDC_WD80EZAZ-11TDBA0_1EHAJG2Z

Fertig ist die Laube:

k1l@server:~$ sudo zpool list -v
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
data  21,8T  4,85T  17,0T         -    10%    22%  1.00x  ONLINE  -
  raidz1  21,8T  4,85T  17,0T         -    10%    22%
    ata-WDC_WD80EZAZ-11TDBA0_1EHP91LZ      -      -      -         -      -      -
    ata-WDC_WD80EZAZ-11TDBA0_1EHKSU8Z      -      -      -         -      -      -
    ata-WDC_WD80EZAZ-11TDBA0_1EHAJG2Z      -      -      -         -      -      -