Sostituzione di un disco con uno più grande in un pool ZFS

From RVM Wiki
Jump to navigation Jump to search

Stato iniziale

  • Abbiamo un pool ZFS composto da un solo disco da 1TB, e vogliamo sostituire questo disco con uno da 2TB, utilizzando tutto lo spazio
  • Ecco lo stato del pool iniziale
zpool status
pool: myfirstpool
state: ONLINE
config:
       NAME        STATE     READ WRITE CKSUM
       myfirstpool  ONLINE       0     0     0
         sda        ONLINE       0     0     0
errors: No known data errors
  • Ecco lo spazio occupato:
# df -h
Filesystem      Size  Used Avail Use% Mounted on
myfirstpool     976G  277G  700G  29% /myfirstpool

Espansione manuale

  • Aggiungiamo il secondo disco al pool, come mirror (specificare il disco esistente, e quello nuovo):
zpool attach myfirstpool /dev/sda /dev/sdb
  • Lo stato ora sarà:
zpool status
 pool: myfirstpool
state: ONLINE

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.

 scan: resilver in progress since Wed Mar 15 05:20:06 2016
       19.4G scanned out of 276G at 59.6M/s, 17h55m to go
       19.4G resilvered, 0.52% done

config:

       NAME           STATE     READ WRITE CKSUM
       DISKB          ONLINE       0     0     0
         mirror-0     ONLINE       0     0     0
           sda        ONLINE       0     0     0
           sdb        ONLINE       0     0     0  (resilvering)

errors: No known data errors

  • Al termine della ricostruzione:
zpool status
 pool: myfirstpool
 state: ONLINE
 scan: resilvered 276G in 10h0m with 0 errors on Tue Mar 15 09:51:05 2016
config:
       NAME        STATE     READ WRITE CKSUM
       myfirstpool  ONLINE       0     0     0
         mirror-0   ONLINE       0     0     0
           sda      ONLINE       0     0     0
           sdb      ONLINE       0     0     0
errors: No known data errors
  • Lo spazio, sempre lo stesso:
 # df -h
Filesystem      Size  Used Avail Use% Mounted on
myfirstpool     976G  277G  700G  29% /myfirstpool
  • Ora rimuoviamo il vecchio disco:
zpool detach myfirstpool /dev/sda
  • Ecco l'effetto della rimozione:
 zpool status
pool: myfirstpool
state: ONLINE
config:
       NAME        STATE     READ WRITE CKSUM
       myfirstpool  ONLINE       0     0     0
         sdb        ONLINE       0     0     0
errors: No known data errors
  • Lo spazio, sempre lo stesso:
 # df -h
Filesystem      Size  Used Avail Use% Mounted on
myfirstpool     976G  277G  700G  29% /myfirstpool
  • Per utilizzarlo, è necessario espandere il pool sul nuovo disco:
zpool online -e myfirstpool /dev/sdb
  • Ora lo spazio è utilizzato:
df -h
Filesystem      Size  Used Avail Use% Mounted on
myfirstpool     2.0T  277G  1.7T  15% /myfirstpool

Espansione automatica

  • Dovrebbe essere possibile l'auto espansione, prima di aggiungere il device, impostando la proprietà:
zpool get autoexpand myfirstpool
NAME PROPERTY VALUE SOURCE
myfirstpool  autoexpand  off     default
  • Impostarla e verificare:
zpool set autoexpand=on myfirstpool
zpool get autoexpand myfirstpool
NAME         PROPERTY    VALUE   SOURCE
myfirstpool  autoexpand  on      local


  • Se ora si effettua l'aggiunta del nuovo disco, dopo il detach del vecchio, lo spazio sarà espanso automaticamente
  • Se non funziona, verificare perchè:
zpool get expandsize myfirstpool
NAME PROPERTY VALUE SOURCE
storage expandsize 2.27T -

Divisione di un mirror

  • Se invece si vuole conservare la copia del vecchio disco, è possibile spezzare il mirror, lasciando il contenuto su entrambi i dischi, ed esportando il vecchio idsco in un nuovo poll
  • Specificare l'operazione split, indicando
  • nome del pool originale che conserverà il nuovo disco: myfirstpool
  • nome del nuovo pool, che accoglierà il vecchio disco: mysecondpol
  • nome del disco che verrà accolto nel nuovo pool (il vecchio disco): sda
zpool split myfirstpool mysecondpool /dev/sda
  • Ora il pool originale è composto solo dal nuovo disco:
zpool status
pool: myfirstpool
state: ONLINE
config:
       NAME        STATE     READ WRITE CKSUM
       myfirstpool  ONLINE       0     0     0
         sdb        ONLINE       0     0     0
errors: No known data errors
  • Il pool splittato sarà importabile:
zpool import
  pool: mysecondpool
    id: 3595499847024087738
 state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
       mysecondpool        ONLINE
         sda               ONLINE
  • Fare attenzione ad eventuali mountpoint specificati manualmente, ed importare il nuovo pool
zpool import mysecondpool


  • Ecco entrambi i polls:
zpool status
pool: myfirstpool
state: ONLINE
config:
       NAME        STATE     READ WRITE CKSUM
       myfirstpool  ONLINE       0     0     0
         sdb        ONLINE       0     0     0
errors: No known data errors
pool: mysecondpool
state: ONLINE
config:
       NAME        STATE     READ WRITE CKSUM
       myfirstpool  ONLINE       0     0     0
         sda        ONLINE       0     0     0
errors: No known data errors
  • Vedere i mountpoint impostati:
zfs list
NAME                         USED  AVAIL  REFER  MOUNTPOINT
mysecondpool                 900M   890G    96K  /mysecondpool
myfirstpool                  900M   1.8T    96K  /myfirstpool
  • Vedere i mountpoint ATTIVI:
 zfs mount
myfirstpool                           /myfirstpool
mysecondpool                          /mysecondpool
  • Nel caso cambiare i mountpoint con
zfs set mountpoint=/whatever /mysecondpool/mydataset

Riferimenti