Posso creare un software RAID 1 con un dispositivo


20

Ho un singolo disco di cui voglio creare un mirror; chiamiamo questo disco sda. Ho appena acquistato un altro disco di dimensioni identiche, che possiamo chiamare sdb. sdae sdbhanno una partizione chiamata sda1e sdb1rispettivamente.

Quando creo un raid, non voglio cancellarmi sdae ricominciare, voglio solo che inizi con il mirroring sdb. Il mio treno di pensieri era di fare:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=1 /dev/sda1

... per creare l'array senza sdbdisco, quindi eseguire qualcosa del tipo (Sto pensando ad alta voce il seguente comando, perché non sono sicuro di come ottenere questo passaggio)

mdadm /dev/md0 --add /dev/sdb1

Si sdb1presume che la nota sia formattata in modo simile asda1

È possibile?


Si, puoi. Non è così semplice come --add, e devi stare attento, ma non è molto complicato. Vedi Come configurare il mirroring del disco in Ubuntu? (Non posso proporre quella domanda come duplicato a causa delle nuove regole.)
Gilles 'SO- smetti di essere malvagio'

Risposte:


28

La semplice risposta alla domanda nel titolo è "Sì". Ma quello che vuoi davvero fare è il prossimo passo, che sta ottenendo il mirroring dei dati esistenti.

È possibile convertire il disco esistente, ma è rischioso, come detto, a causa della posizione dei metadati. Molto meglio creare un mirror vuoto (rotto) con il nuovo disco e copiare i dati esistenti su di esso. Quindi, se non funziona, è sufficiente riavviare l'originale non speculare.

Innanzitutto, inizializza /dev/sdb1come nuovo /dev/md0con un'unità mancante e inizializza il filesystem (suppongo ext3, ma la scelta è tua)

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 missing
mkfs -text3 /dev/md0

Ora, /dev/sda1molto probabilmente è il tuo file system di root ( /), quindi per sicurezza dovresti fare il passo successivo da un CD live, un disco di ripristino o un altro sistema di avvio che può accedere a entrambi /dev/sda1e /dev/md0anche se l'ho fatto con successo passando alla modalità singolo utente.

Copiare l'intero contenuto del file system su /dev/sda1a /dev/md0. Per esempio:

mount /dev/sda1 /mnt/a       # only do this if /dev/sda1 isn't mounted as root
mount /dev/md0 /mnt/b
cd /mnt/a                    # or "cd /" if it's the root filesystem
cp -dpRxv . /mnt/b

Modifica /etc/fstabo altrimenti assicurati che al prossimo avvio /dev/md0sia montato anziché /dev/sda1. Probabilmente il tuo sistema è impostato per l'avvio /dev/sda1e i parametri di avvio probabilmente lo specificano come dispositivo root, quindi al riavvio dovresti modificarlo manualmente in modo che il root sia /dev/md0(supponendo che /dev/sda1fosse root). Dopo il riavvio, verificare che /dev/md0sia montato ( df) e che sia in esecuzione come mirror degradato ( cat /proc/mdstat). Aggiungi /dev/sda1all'array:

mdadm /dev/md0 --add /dev/sda1

Poiché la ricostruzione verrà sovrascritta /dev/sda1, la versione dei metadati che usi è irrilevante. Come sempre quando si apportano modifiche importanti, eseguire un backup completo (se possibile) o almeno assicurarsi che tutto ciò che non può essere ricreato sia sicuro.

Dovrai rigenerare la configurazione di avvio per utilizzarla /dev/md0come root (se /dev/sda1era root) e probabilmente dovrai rigenerarla mdadm.confper assicurarti che /dev/md0sia sempre avviata.


Perfetto esattamente quello di cui ho bisogno: D
whoami

2
Non usare cpper copiare filesystem, ti perderai cose come hard link, attributi estesi ... Usa taro rsynccon le opzioni appropriate. Quando si avvia un Live CD, fare attenzione che la mappatura utente-utente è diversa (consultare le opzioni --numeric-owner di tar / rsync). Vedi anche clone2fs per la clonazione dei file system extx.
Stéphane Chazelas,

1
Le opzioni per cpgestire la conservazione dei collegamenti (-d), modalità, proprietà e timestamp (-p), farlo in modo ricorsivo (-R) e rimanere su un filesystem (-x), ma penso che potresti avere ragione su collegamenti duri ed estesi attributi.
StarNamer,

rsync -aH --delete /mnt/olddisk/ /mnt/newarray/è una buona opzione. Aggiungi -vih --progressse vuoi davvero vedere cosa sta facendo.
Rudolfbyker,

4

Certo, puoi crearlo specificando che il secondo disco è attualmente missing:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 missing /dev/sda1

Dolce grazie, sono probabilmente un DOC qui, ma c'è un motivo per cui hai aggiunto i dispersi prima di / dev / sda1, l'ordine è importante?
whoami,

Penso che l'ordine non abbia importanza.
eppesuig

3
Attento con quello! con --metadata = 1.2 (la nuova impostazione predefinita), i metadati RAID (1 MB) verranno inseriti all'inizio (sovrascrivendo il contenuto lì). E l'inizio dell'array md inizierà 1 MB in / dev / sda1 (/ dev / md0 sarà 1 MB più corto di / dev / sda1). Con metadati = 0.9 (il vecchio default), i metadati (64kB) verranno inseriti alla fine sovrascrivendo ciò che c'è. Quindi usa --metadata = 0.9 e ridimensiona prima il FS. Qualunque cosa tu faccia, fai un backup in anticipo.
Stéphane Chazelas,

3

Ce la puoi fare. Devi stare un po 'attento, ma questo non è pericoloso¹ se stai molto attento a non digitare in modo errato nulla e non lascia alcun problema nella configurazione.

Consiglio vivamente di non effettuare nessuna delle manipolazioni su un sistema live. È possibile in alcuni casi, ma richiede cure extra. Avvio da un liveCD / liveUSB come Parted o SystemRescueCD .

Innanzitutto, è necessario ridurre leggermente il volume, per fare spazio ai metadati mdraid (il superblocco). Esistono diversi formati di metadati , devi usarne uno che inserisca i metadati alla fine del disco. (In alcune configurazioni, potresti avere abbastanza spazio per mettere il superblocco all'inizio, ma è più complicato e incline al rischio, quindi entrerò in quello.)

È necessario assicurarsi che gli ultimi 128 kB del dispositivo a blocchi siano inutilizzati, per fare spazio al superblocco. Quindi dovrai ridurre il filesystem su /dev/sda1. Se si tratta di un file system ext2 / ext3 / ext4, ottenere la dimensione del file system corrente con tune2fs /dev/sda1, quindi eseguire resize2fs /dev/sda1 NNNdove NNN è quella dimensione meno 128 kB. Puoi farlo invece con Parted . Se devi ridurre un filesystem extN, devi prima smontarlo; un filesystem btrfs può essere ridotto dal vivo.

Dopo esserti assicurato che gli ultimi 128kB del dispositivo a blocchi siano liberi, chiama mdadm --createper creare un volume RAID-1. Questo non tocca nessuna parte del volume a parte il superblocco. Inizialmente, il volume avrà un singolo componente: tutti gli altri sono impostati come non riusciti. È necessario passare --level=1(o equivalentemente -n 1) (questo approccio funziona solo per RAID-1) e --metadata=0.9oppure --metadata=1.0(il formato superblocco predefinito 1.2 pone il superblocco vicino all'inizio del dispositivo, che può sovrascrivere i dati). L'argomento a --raid-devices( -n) è il numero di componenti (inclusi quelli mancanti) nel volume RAID.

mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=1.0 /dev/sda1 missing

Ora puoi attivare l'array e aggiungere altri componenti.

mdadm --add /dev/md0 /dev/sdb1

Nota sui bootloader: Grub2 comprende Linux RAID-1 e può avviarsi da esso. Bootloader come Grub1 che non comprendono il RAID leggono in modo trasparente dai volumi mirror, ma il sistema non si avvia se l'unità da cui il bootloader sta leggendo si guasta. Se il volume RAID è su una partizione, assicurarsi di installare il settore di avvio di Grub su entrambe le unità.

¹ Assicurarsi di disporre di backup. "Non pericoloso" significa "probabilmente non ne avrai bisogno", non "scommettere i tuoi dati".

Ripubblicato e leggermente adattato da Come impostare il mirroring del disco (RAID-1)

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.