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.