Differences between revisions 7 and 8
Revision 7 as of 2010-03-22 19:32:57
Size: 7415
Editor: Kurgan
Comment:
Revision 8 as of 2010-03-22 19:38:38
Size: 8233
Editor: Kurgan
Comment:
Deletions are marked like this. Additions are marked like this.
Line 15: Line 15:
 * Inserire il nuovo disco nell'array {{{mdadm --add /dev/md2 /dev/sdc1}}}  * Inserire il nuovo disco nell'array: {{{mdadm --add /dev/md2 /dev/sdc1}}}
Line 18: Line 18:

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.

Appunti sull'uso di mdadm per gestire il raid software

Ingrandire un file system in raid (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 quasi online (nel senso che occorre comunque smontare il file system ad un certo punto).

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:

  • Mettere un disco in fail: mdadm --fail /dev/md2 /dev/sdc1

  • Togliere il disco dall'array: mdadm --remove /dev/md2 /dev/sdc1

  • Togliere il disco FISICO dal suo bay (togliamo sdc, vediamo di prenderci!)
  • Infilare il disco fisico nuovo nel bay e vedere che device prende, supponiamo qui che sia nuovamente sdc
  • Partizionare il disco nuovo non copiando le partizioni dal vecchio, ma creandole nuove e più grandi, sempre di tipo FD per il raid.
  • Inserire il nuovo disco nell'array: mdadm --add /dev/md2 /dev/sdc1

  • Attendere che sincronizzi fino alla fine
  • Ripetere la procedura dall'inizio togliendo però l'altro disco, e sostituendolo come sopra.

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.

WORK IN PROGRESS!

Cambiare un disco rotto (Etch e Lenny)

  • Cambiare il disco rotto. Se non si sa riconoscere il disco, usando hdparm -i /dev/sdX e` possibile leggere il numero di serie dei vari dischi, in modo da poter riconoscere senza dubbio quale sia fisicamente quello rotto.

  • Sperare che GRUB booti dal disco che resta
  • Copiare la tabella delle partizioni dal disco buono a quello nuovo e vuoto.
    sfdisk -d /dev/discooriginale | sfdisk /dev/disconuovo
  • Mettere nel raid il nuovo disco (tutte le partizioni una per una)
    Esempio: per aggiungere il device fisico /dev/sdb1 al raid /dev/md0:
    mdadm /dev/md0 --add /dev/sdb1

Installare un raid1 con un solo disco e poi aggiungere il secondo (Etch e Lenny)

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`:

  • Installare il secondo disco
  • Copiare la tabella delle partizioni dall'uno all'altro (dal pieno al vuoto, magari!)
    sfdisk -d /dev/discooriginale | sfdisk /dev/disconuovo
  • Per ognuno dei device raid1, aggiungere il secondo disco.
    • Prima di tutto aggiungo il secondo disco come hotspare (ridicolo un hotspare con un solo disco attivo!). Facendo questo non inizia la risincronizzazione, perche` il secondo disco e` un hotspare, non e` online.
      mdadm  /dev/md0 -a /dev/sdc1
    • Poi modifico il numero di device nel raid da 1 a 2, in questo modo l'hotspare diventa "online" ed inizia la sincronizzazione.
      mdadm  /dev/md0 --grow -n 2

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)

  • Ovviamente assicurarsi di avere il supporto per il raid compilato nel kernel
  • Aggiungere un secondo disco vuoto grande come il primo o piu` grande
  • Creare sul secondo disco le partizioni copiando quelle del primo. Se si usa il metodo da veri uomini (vedi sotto) volendo le si puo` anche creare piu` grandi, ma comunque lo spazio in eccesso non verrebbe usato. Se si usa il metodo sicuro, le partizioni devono essere uguali o piu` piccole. Un sistema semplice per clonare le partizioni dal primo al secondo disco e` questo:
    • sfdisk -d /dev/discooriginale | sfdisk /dev/disconuovo

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!!!

  • Prima di tutto, creo un device MD con due dischi di cui uno manca. Il disco che c'e` e` quello che GIA` CONTIENE I DATI. Creo /dev/md0 usando due dischi dei quali uno e` /dev/hda1, ovvero il mio disco originale pieno di dati, e l'altro e` "missing", quindi non c'e`.
    • mdadm --create /dev/md0 --raid-devices 2 --level 1 /dev/hda1 missing

  • Ora dovrei avere /dev/md0 funzionante ma degradato perche` manca un disco. Prima di procedere, devo fare un resize del filesystem in quanto ora la partizione e` leggermente piu` piccola.
    • resize2fs /dev/md0

  • Ora un check di sicurezza
    • fsck.ext3 /dev/md0 -f

  • Se tutto ha funzionato, posso aggiungere il secondo disco (quello nuovo e vuoto) al raid1
    • mdadm --manage -a /dev/md0 /dev/hdb1

  • Ora montiamo la partizione /dev/md0 da qualche parte
    • mpount /dev/md0 /mnt

    • Modificare il file /mnt/etc/fstab mettendo /dev/md0 al posto di /dev/hda1
    • Modificare il file /mnt/etc/lilo.conf mettendo /dev/md0 al posto di /dev/hda1 (nelle voci "root" e "boot") e aggiungendo la riga: raid-extra-boot=auto (oppure raid-extra-boot=/dev/hda,/dev/hdb)
    • Eseguire lilo
      • chroot /mnt /sbin/lilo -v

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.

  • Prima di tutto, creo un device MD con due dischi di cui uno manca. Il disco che uso e` quello vuoto. Creo /dev/md0 usando due dischi dei quali uno e` /dev/hdb1, ovvero il mio disco nuovo e vuoto, e l'altro e` "missing", quindi non c'e`.
    • mdadm --create /dev/md0 --raid-devices 2 --level 1 /dev/hdb1 missing

  • Poi, creo un file system su /dev/md0
    • mkfs.ext3 /dev/md0

  • Poi, copio tutto da /dev/hda1 a /dev/md0 (montando /dev/hda1 e /dev/md0 in due directory)
    • mount /dev/hda1 /src
      mount /dev/md0 /dst
      (cd /src && tar cf- .) | (cd /dst && tar xpf -)
  • Poi modifico in /dst il file /mnt/etc/fstab mettendo /dev/md0 al posto di /dev/hda1
  • Poi modifico in /dst il file /etc/lilo.conf mettendo /dev/md0 al posto di /dev/hda1 (nelle voci "root" e "boot") e aggiungendo la riga: raid-extra-boot=auto (oppure "raid-extra-boot=/dev/hdb", in questo caso questa poi andra` modificata in "raid-extra-boot=/dev/hda,/dev/hdb")
  • Per finire eseguo lilo
    • chroot /mnt /sbin/lilo -v

  • Ora non mi resta che smontare tutto e scambiare fra di loro hda e hdb, in modo che al boot la macchina parta dal disco che ora contiene il raid. Notare che ora i dischi sono scambiati, quindi hda contiene il raid e hdb contiene il vecchio disco originale)

  • Se il boot va, ed e` in effetti partito dal disco che contiene il raid, ora posso cancellare il disco originale e renderlo il secondo disco del raid
    • mdadm --manage -a /dev/md0 /dev/hdb1

  • Se occorre, ora modifico /etc/lilo.conf e metto "raid-extra-boot=/dev/hda,/dev/hdb" e poi ri-eseguo lilo.

LinuxDebian/MdAdmRaid (last edited 2018-11-23 14:38:52 by Kurgan)