Il modo migliore per far crescere il software Linux da RAID 1 a RAID 10


22

mdadm non sembra supportare la crescita di un array dal livello 1 al livello 10.

Ho due dischi in RAID 1. Voglio aggiungere due nuovi dischi e convertire l'array in un array RAID 10 a quattro dischi.

La mia strategia attuale:

  1. Fai un buon backup.
  2. Crea un array RAID 10 a 4 dischi degradato con due dischi mancanti.
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove un disco dall'array RAID 1.
  5. Aggiungi il disco disponibile all'array RAID 10 e attendi il completamento della risincronizzazione.
  6. Distruggi l'array RAID 1 e aggiungi l'ultimo disco all'array RAID 10.

Il problema è la mancanza di ridondanza al punto 5.

Esiste un modo migliore?


5
Non dimenticare il passaggio 0. Fai un buon backup di tutto.
Anthony Lewis,

Credo che i tuoi passi siano corretti. Si perde la ridondanza durante il periodo in cui si copiano i dati da un set all'altro.
Kevin Kuphal,

È possibile creare un RAID10 a 4 dischi degradato?
pauska,

1
Sì, usi semplicemente "/ dev / hda missing / dev / hdb missing", perché altrimenti perdi un'intera coppia e tutto cade a pezzi. La "risposta accettata" per questa domanda, per inciso, è completamente sbagliata e non funziona.
womble

Sto anche cercando un buon modo per farlo, e penso che il metodo descritto nella domanda sia il migliore che ho trovato finora. La risposta di Mark Turner non aiuta perché crea un array a 2 dispositivi che non può essere modificato in 4 dispositivi (gli altri 2 possono essere aggiunti solo come pezzi di ricambio). E la risposta di Suresh Kumar è la stessa descritta nella domanda, tranne per il fatto che non funzionerà esattamente così; i dispositivi mancanti devono essere il 2o e il 4o, non il 3o e il 4o. Informazioni sui passaggi della domanda: penso che il passaggio 5 abbia ridondanza completa e il passaggio 6 abbia ridondanza per metà dei dati. In realtà vedo che i passaggi erano renumbere
aditsu,

Risposte:


8

Con Linux softraid è possibile creare un array RAID 10 con solo due dischi.

Nomi dei dispositivi utilizzati di seguito:

  • md0 è il vecchio array di tipo / livello RAID1.
  • md1 è il nuovo array di tipo / livello RAID10.
  • sda1e sdb2sono nuove partizioni vuote (senza dati).
  • sda2e sdc1sono vecchie partizioni (con dati cruciali).

Sostituisci i nomi per adattarli al tuo caso d'uso. Utilizzare ad es. lsblkPer visualizzare il layout corrente.

0) Backup, Backup, Backup, Backup oh e BACKUP

1) Crea il nuovo array (4 dispositivi: 2 esistenti, 2 mancanti):

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

Si noti che in questo esempio il layout sda1ha una controparte mancante e sdb2un'altra controparte mancante. I tuoi dati su md1non sono al sicuro a questo punto (effettivamente è RAID0 fino a quando non aggiungi membri mancanti).

Per visualizzare il layout e altri dettagli dell'array creato utilizzare:

mdadm -D /dev/md1

Nota! È necessario salvare il layout dell'array:

# View current mdadm config:
cat /etc/mdadm/mdadm.conf
# Add new layout (grep is to make sure you don't re-add md0):
mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf
# Save config to initramfs (to be available after reboot)
update-initramfs -u

2) Formatta e monta. La /dev/md1deve essere immediatamente utilizzabile, ma hanno bisogno di essere formattato e poi montato.

3) Copia i file. Usa ad esempio rsync per copiare i dati dal vecchio RAID 1 al nuovo RAID 10. (questo è solo un comando di esempio, leggi le pagine man di rsync)

rsync -arHx / /where/ever/you/mounted/the/RAID10

4) Fallire la prima parte del vecchio RAID1 (md0) e aggiungerlo al nuovo RAID10 (md1)

mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2
mdadm /dev/md1 --add /dev/sda2

Nota! Questo cancellerà i dati da sda2. Il md0dovrebbe essere ancora utilizzabile, ma solo se l'altro membro del raid era pienamente operativo.

Si noti inoltre che questo inizierà i processi di sincronizzazione / recupero su md1. Per verificare lo stato, utilizzare uno dei comandi seguenti:

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

Attendere il completamento del ripristino.

5) Installa GRUB sul nuovo array (supponendo che tu ti stia avviando da esso). Alcuni CD di ripristino / avvio di Linux funzionano meglio.

6) Avvio su un nuovo array. SE FUNZIONA CORRETTAMENTE Distruggi il vecchio array e aggiungi il disco rimanente al nuovo array.

PUNTO DI NON RITORNO

A questo punto distruggerai i dati sull'ultimo membro del vecchio array md0. Assicurati assolutamente che tutto funzioni.

mdadm --stop /dev/md0
mdadm /dev/md0 --remove /dev/sdc1
mdadm /dev/md1 --add /dev/sdc1

E ancora: attendi fino al termine del ripristino md1.

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

7) Aggiorna mdadm config

Ricorda di aggiornare /etc/mdadm/mdadm.conf(rimuovi md0).

E salva la configurazione in initramfs (che sarà disponibile dopo il riavvio)

update-initramfs -u

1
Dove entrano in gioco i quattro dischi?
womble

Eh? Dichiaro chiaramente di creare l'array con 2 dischi, copiare i dati, fallire il raid 1 rimuovendo un disco, aggiungere quel disco al RAID10, quindi avviare il RAID10, se ha funzionato, distruggere il RAID1 e spostare l'ultimo disco su il nuovo RAID ....
Mark Turner,

4
Hai modificato la tua risposta dopo il mio commento. Inoltre, la tua procedura fornisce un RAID-10 a due dischi con due ricambi ... quasi un RAID-10 a quattro dischi. Neanche i volumi RAID-10 possono essere rimodellati.
womble

2
Ho eseguito i comandi mentre li hai forniti e finisco con un RAID-10 a due dischi con due ricambi, come mostrato da / proc / mdstat. Questo è sul kernel 2.6.30, con mdadm v2.6.7.2.
Womble

3
"mdadm: raid10 array / dev / md1 non può essere rimodellato." Questo è anche menzionato nella manpage mdadm.
womble

9

Segui la stessa procedura di Mark Turner ma quando crei l'array raid, menziona 2 dischi mancanti

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

E quindi procedere con altri passaggi.

In breve, crea RAID10 con un totale di 4 dischi (di cui 2 mancanti), risincronizza e aggiungi altri due dischi.


6

Ho appena finito di passare da LVM su due dischi da 2 TB mdadm RAID 1 a LVM su un RAID 10 a quattro dischi (due dischi originali + due nuovi).

Come notato da @aditsu, l'ordine di unità è importante durante la creazione dell'array.

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing

Il codice sopra fornisce un array utilizzabile con due dischi mancanti (aggiungi numeri di partizione se non stai utilizzando dischi interi). Non appena viene aggiunto il terzo disco, inizierà la sincronizzazione. Ho aggiunto il quarto disco prima che la terza terminasse la sincronizzazione. Ha mostrato come riserva fino al termine del terzo disco, quindi ha iniziato la sincronizzazione.

I passaggi per la mia situazione:

  1. Fai un buon backup.

  2. Crea un array RAID 10 a 4 dischi degradato con due dischi mancanti (chiameremo i dischi mancanti n. 2 e 4).

  3. Di 'alla moglie di non modificare / aggiungere alcun file a cui tiene

  4. Errore e rimozione di un disco dall'array RAID 1 (disco 4).

  5. Spostare le estensioni fisiche dall'array RAID 1 nell'array RAID 10 lasciando vuoto il disco 2.

  6. Uccidere l'array RAID 1 attivo, aggiungere quel disco ora vuoto (disco 2) all'array RAID 10 e attendere il completamento della risincronizzazione.

  7. Aggiungi il primo disco rimosso da RAID 1 (disco 4) all'array RAID 10.

  8. Dai alla moglie di andare avanti.

Al passaggio 7 penso che l'unità 1, 2 o OR 4 non riescano (durante la risincronizzazione del disco 4) senza uccidere l'array. Se l'unità 3 si guasta, i dati sull'array vengono tostati.


+1, in particolare per il passaggio 3;)

-1, istruzioni poco chiare, non avere moglie, perdere i miei dati
ZAB,

1

Ho spostato il mio raid1 in raid10 ora e mentre questa pagina mi ha aiutato, ma mancano alcune cose nelle risposte sopra. Soprattutto il mio obiettivo era quello di mantenere i tempi di nascita ext4.

l'installazione era:

  • 2 dischi raid1 di ogni tipo msdos e md0 con partizione ext4 e mbr con msdos
  • 2 nuovi dischi nuovi che diventano le nuove primarie (tutte uguali)
  • risultante in un raid a 4 dischi md127 ext4 ma a causa delle dimensioni ho dovuto passare da mbr a gpt
  • è il mio disco di casa, quindi non è richiesta o prevista alcuna installazione bootmanager
  • usando il mio ubuntu quotidiano (quindi: non usando il disco di ripristino esterno)
  • usando gparted, dd e mdadm

come qualcuno ha affermato prima: il passo zero dovrebbe essere il backup e ci può sempre andare qualcosa di sbagliato nel processo con conseguente perdita di dati estrema

  1. BACKUP

  2. installazione del nuovo raid

    1. crea un nuovo raid

      mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
      

      (ho scoperto che il layout è importante .. il 2 ° e il 4 ° sembrano essere i duplicati in un raid predefinito "quasi")

    2. impostare la partizione del raid che stavo usando gparted configurando gpt su md127 e quindi aggiungendo una nuova partizione (ext4) delle dimensioni di quella precedente o superiore
  3. migrare

    1. ora sto rilevando i dati ... stavo provando prima a usare rsync che funzionava ma non riuscivo a mantenere la nascita ... usare dd per clonare dal vecchio raid a quello nuovo

      dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
      

      ATTENDI È
      possibile verificare con l'invio di USR1 a tale processo

      kill -s USR1 <pid>
      
    2. fix the raid
      gparted è un ottimo strumento: gli dici di controllare e riparare la partizione e ridimensionarla alla dimensione completa di quel disco con solo pochi mouse;)

    3. imposta un nuovo uuid su quella partizione e aggiorna il tuo fstab con esso (cambia uuid)

    4. archivia il tuo raid in conf

      mdadm --examine --scan  >> /etc/mdadm/mdadm.conf
      

      e rimuovi quello vecchio

      vim /etc/mdadm/mdadm.conf 
      
    5. riavviare se non si è su un sistema di ripristino
  4. distruggendo quello vecchio

    1. fallisci il primo e aggiungilo al nuovo raid

      mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
      

      quindi crea gpt su quel dispositivo e imposta una nuova partizione vuota

      mdadm /dev/md127 --add /dev/sdc1
      

      ASPETTARLO con cui
      è possibile verificare

      cat /proc/mdstat
      
    2. ferma la seconda

      mdadm --stop /dev/md0 
      

      quindi crea gpt su quell'ultimo dispositivo e imposta nuovamente una nuova partizione vuota

      mdadm /dev/md127 --add /dev/sdd1
      

      Aspettalo di nuovo


0

L'ho fatto con LVM. Configurazione iniziale: - sda2, sdb2 - e creato raid1 md1 in cima. sda1 e sdb1 sono stati usati per la seconda partizione raid1 per / boot. - md1 era pv nello spazio del gruppo di volumi, con alcuni lvm su di esso.

Ho aggiunto dischi sdc e sdd e creato lì partizioni come su sda / sdb.

Così:

  1. creato md10 come:

    mdadm --create / dev / md10 --level raid10 --raid-devices = 4 / dev / sdc2 mancante / dev / sdd2

  2. estendere vg su di esso:

    pvcreate / dev / md10 vgextend space / dev / md10

  3. ha spostato i volumi da md1 a md10:

    pvmove -v / dev / md1 / dev / md10

(attendi) 4. ridurre il gruppo di volumi:

vgreduce space /dev/md1
pvremove /dev/md1
  1. stop array md1:

    mdadm -S / dev / md1

  2. aggiungi dischi dal vecchio md1 a md10:

    mdadm -a / dev / md10 / dev / sda2 / dev / sdb2

  3. aggiorna la configurazione in /etc/mdadm/mdadm.conf:

    mdadm -E --scan >> / dev / mdadm / mdadm.conf

(e rimuovi lì vecchio md1)

Tutto fatto su sistema live, con volumi attivi usati per kvm;)

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.