Come sostituire un disco in un pool ZFS non ridondante?


8

Ho letto un po 'e sembra che a ZFS non piaccia la rimozione dei dischi da array non ridondanti :

È possibile utilizzare il zpool detachcomando per staccare un dispositivo da un pool di archiviazione con mirroring. Per esempio:

# zpool detach zeepool c2t1d0

Tuttavia, questa operazione viene rifiutata se non ci sono altre repliche valide dei dati. Per esempio:

# zpool detach newpool c1t2d0
cannot detach c1t2d0: only applicable to mirror and replacing vdevs

Il problema di base è comprensibile: la rimozione dell'unica copia di un pezzo di dati (metadati o dati del payload) da un array renderebbe tali dati non disponibili.

Gli esempi per la sostituzione di dispositivi in ​​un pool di archiviazione ZFS forniscono una descrizione passo-passo di base su come sostituire un dispositivo in un pool di archiviazione: offline il disco, rimuovere il disco, inserire il disco sostitutivo, eseguire zpool replaceper informare ZFS della modifica e online il disco. Ciò ovviamente richiede che l'array non dipenda dal disco che viene sostituito, quindi l'array deve avere ridondanza; se dipende dall'unità in questione, questo approccio presenta lo stesso problema di cui sopra.

Qual è il modo consigliato di sostituire un disco in un array ZFS non ridondante ?

Supponiamo che il disco esistente funzioni correttamente e supponiamo che il disco sostitutivo abbia almeno le stesse dimensioni del disco da sostituire. (Se il disco esistente non è riuscito, chiaramente tutto ciò che si potrebbe fare è aggiungere un nuovo disco e ripristinare tutti i file interessati dall'errore del disco dal backup.)

Risposte:


3

Non so se le cose fossero così diverse in `13 ma 'zfs sostituire' funziona su pool non ridondanti. Basta eseguire il comando 1 invece di staccare per primo.

d1 è 1G, d2 è 2G, entrambi sono file vuoti in / tmp:

/t/test #> zpool create test /tmp/test/d1
/t/test #> zpool set autoexpand=on test
/t/test #> zpool status
  pool: test
 state: ONLINE
  scan: none requested
config:

    NAME            STATE     READ WRITE CKSUM
    test            ONLINE       0     0     0
      /tmp/test/d1  ONLINE       0     0     0

errors: No known data errors
/t/test #> zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
test   1008M   258K  1008M         -     0%     0%  1.00x  ONLINE  -


/t/test #> zpool replace test /tmp/test/d1 /tmp/test/d2


/t/test #> zpool status
  pool: test
 state: ONLINE
  scan: resilvered 61K in 0h0m with 0 errors on Sun Sep 18 18:55:32 2016
config:

    NAME            STATE     READ WRITE CKSUM
    test            ONLINE       0     0     0
      /tmp/test/d2  ONLINE       0     0     0

errors: No known data errors
/t/test #> zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
test   1.98G   408K  1.98G         -     0%     0%  1.00x  ONLINE  -

12
zpool attach pool old-disk new-disk

Ciò convertirà il vecchio disco in un mirror sia con il vecchio disco sia con il nuovo disco e avvierà il resilver dopo il quale è possibile staccare il vecchio disco.

zpool detach pool old-disk

Testato con dispositivi loop:

# truncate -s 1G a b
# truncate -s 1200M c
# losetup  /dev/loop0 a
# losetup  /dev/loop1 b
# losetup  /dev/loop2 c
# zpool create test loop{0,1}
# zpool attach test loop1 loop2
# zpool status
      pool: test
 state: ONLINE
  scan: resilvered 62K in 0h0m with 0 errors on Wed Jul 31 13:43:19 2013
config:

        NAME        STATE     READ WRITE CKSUM
        test        ONLINE       0     0     0
          loop0     ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            loop1   ONLINE       0     0     0
            loop2   ONLINE       0     0     0
# zpool detach test loop1
# zpool status
  pool: test
 state: ONLINE
  scan: resilvered 62K in 0h0m with 0 errors on Wed Jul 31 13:43:19 2013
config:

        NAME        STATE     READ WRITE CKSUM
        test        ONLINE       0     0     0
          loop0     ONLINE       0     0     0
          loop2     ONLINE       0     0     0

Quindi stai dicendo che ZFS non supporta un'operazione simile in modo nativo? Sembra strano. ( Sembrerebbe che tutto ciò che serve sia avere entrambe le unità collegate e quindi informare ZFS che la vecchia unità sta per essere messa offline, dando così la possibilità di migrare i dati su di essa su altre unità esattamente come si farebbe se si trattasse di un ripristino in un array ridondante.)
— un CVn

@ MichaelKjörling, non lo sto dicendo. Dico solo che quanto sopra dovrebbe funzionare perché non vedo alcun motivo per cui non dovrebbe.
— Stéphane Chazelas,

Detto questo, sembra che ZFS lo supporti davvero. Risposta aggiornata
— Stéphane Chazelas,

Grande! Questo è il tipo di risposta che stavo cercando e sperando di ottenere. Ti darei un altro +1 per provarlo se potessi.
— un CVn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.