Appunti sull'uso di mdadm per gestire il raid software

Ottenere informazioni su un raid set

Per sapere tutto cio` che il sistema puo` dirci su un raid set, si usa il comando

mdadm --detail <device raid>
mdadm --detail /dev/md0

Se possediamo solo un disco estratto da un raid set, possiamo usare

mdadm -E <partizione o device che era parte del raid set>
mdadm -E /dev/sdb1

Questi due comandi, che forniscono informazioni utili quando qualcosa e` collassato malamente e dobbiamo trovare il modo di rimettere assieme i cocci, sono innocui e possono essere usati in qualsiasi momento su raid set attivi o dischi attivi.

Creare un raid 1

Per creare un raid set (diciamo raid 1 in questo esempio) partendo da zero, occorre:

Cambiare il nome a un raid set preesistente

Poniamo di avere un raid gia` configurato, ad esempio /dev/md3 e di volerlo rinominare in /dev/md0. Ovviamente questo presuppone che md0 non esista gia`. Questa operazione richiede uno stop del raid set, il quale deve quindi non essere in uso. Se occorre dovremo avviare da una live. Dobbiamo sapere anche quali dischi sono membri del raid set, ci servira` dopo.

Cambiare UUID a un raid set preesistente

Se vogliamo impostare uno specifico UUID a un raid set (diverso da quello random assegnato alla creazione) possiamo farlo seguendo lo stesso metodo del cambio di nome del device appena descritto sopra. In questo esempio supponiamo di voler modificare lo UUID del raid /dev/md2.

Modifiche al file mdadm.conf

Supponiamo di aver fatto modifiche ai raid set presenti sulla macchina, e di voler confrontare (o modificare) il contenuto del file /etc/mdadm/mdadm.conf specialmente per quanto riguarda le righe che iniziano per "ARRAY" che contengono i dati dei raid set presenti sulla macchina. Possiamo verificare la situazione attualmente vista dal kernel (che puo` appunto essere diversa da quella indicata nel file /etc/mdadm/mdadm.conf con questo comando:

mdadm --examine --scan

L'output di questo comando puo` essere direttamente incollato nel file /etc/mdadm/mdadm.conf in quanto e` volutamente compatibile. Attenzione: dopo aver modificato mdadm.conf dovete lanciare il comando update-initramfs -u per copiare le modifiche dentro al ramdisk di avvio del kernel in uso, altrimenti al boot rischiate che i raid set modificati non vengano assemblati.

Aggiungere o togliere dischi da un raid 1

Se vogliamo sostituire i dischi di un raid funzionante, e abbiamo spazio per connetterli, potremmo decidere di aggiungere prima i nuovi dischi, e poi togliere i vecchi. Per esempio, potremmo prendere un raid1 di 2 dischi, aggiungerne due nuovi, sincronizzare, e poi rimuovere i due vecchi. Supponiamo che la situazione sia:

Per farlo, occorre:

Finito, abbiamo /dev/md0 con due dischi, come era all'inizio, pero` i dischi sono nuovi.

Ingrandire un file system in raid sostituendo i dischi con dischi piu` grandi (Lenny)

Ponendo di avere un raid (diciamo raid1, ma va bene anche con il 5) con due dischi da 500 GB e volere ingrandire il tutto a 2 TB, la cosa e` fattibile anche online (puo` essere che occorra smontare o riavviare a seconda di che fs si usa e di che controller si usa).

Prima di tutto, occorre cambiare tutti i dischi del raid (uno alla volta!) in modo da incrementare la dimensione della partizione su ogni disco. Avendo un controller che gestisce l'hot swap, è possibile fare tutto online:

A questo punto, abbiamo un device md (md2 nel nostro esempio) che pur trovandosi composto di due partizioni grandi, resta piccolo. Occorre adesso ingrandire il device. Pr farlo, dovrebbe essere sufficiente dare il comando: mdadm --grow --size=max /dev/md2. Purtroppo però nel mio test non ha funzionato, probabilmente perchè avevo fatto del casino prima. Ho dovuto smontare il file system, fermare e riavviare il device raid, e poi dare il grow, così:

mdadm --stop /dev/md2
mdadm --assemble /dev/md2
mdadm --grow --size=max /dev/md2

Se ha funzionato, ora un cat /proc/partitions ci dirà che /dev/md2 è più grande di prima, ed è grande quasi come le partizioni in cui è contenuto. Va notato che verrà anche avviato un rebuild che ricostruisce la parte "aggiunta" del device MD.

A questo punto, occorre ridimensionare il filesystem stesso all'interno della partizione. Se usiamo ext3, e un kernel sufficientemente moderno (2.6), possiamo resizeare anche online, senza smontare la partizione, cosi`: resize2fs /dev/md2. Questo comando ingrandisce il file system fino alla dimensione della partizione in cui si trova. Se vogliamo giocare sicuro, smontiamo il filesystem e diamo lo stesso comando su un fs smontato. Se vogliamo giocare ancora piu` sicuro, diamo un fsck prima e dopo il resize (ovviamente sempre a file system smontato). Tenete conto che il resize puo` essere molto lungo (decine di minuti) se il cambio di dimensione e` significativo.

Per riferimento, questo sito e` interessante: http://www.howtoforge.com/how-to-resize-raid-partitions-shrink-and-grow-software-raid

Cambiare un disco rotto

Installare un raid1 con un solo disco e poi aggiungere il secondo

Se vi capita di fare una installazione in cui sapete che farete un raid1, ma adesso avete un solo disco, potete installare facendo un raid1 con un solo device, e poi, dopo aver collegato il secondo disco, includerlo nei raid.

La procedura e`:

Questa l'ho usata su Etch con il kernel 2.6.18 e ha funzionato, pero` se sminchia a morte il vostro sistema, io non voglio sapere nulla.

Conversione di un FS da non-raid a raid1 in Sarge (procedura non collaudata ed obsoleta)

Ora ci sono due strade. Una da veri uomini e una no. Una consiste nel trasformare il file system sul disco attuale in un membro del raid1, e poi aggiungere il secondo disco. L'altra nel creare un array vuoto e degradato nel secondo disco, copiarci tutti i dati dentro, e poi riciclare il primo disco come parte dell'array.


Cominciamo con la strada per veri uomini, che va seguita a file system non montato (quindi bootando da un CD, se e` il root fs). Avete un backup? Si`, vero? NON PROCEDETE SENZA UN BACKUP!!!

Se ha funzionato tutto, ora si puo` smontare /dev/md0, poi attendere che finisca il resync, e poi ribootare e sperare in bene!


Quella che segue e` la strada piu` sicura. In questo caso non si tocca il file system originale fino a dopo il reboot.