Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati

CREARE UN RAID-1 SOFTWARE (CON BOOT) DA SISTEMA GIA' INSTALLATO

(TESTATO SU GUTSY )

di Emiliano Genghini


L'idea e' quella di creare un raid-1 degradato con il disco "nuovo" ed uno "missing"(mancante), copiarci il sistema presente sul disco di partenza ed avviarlo. Successivamente se l'array e' stato caricato correttamente ricostruirlo aggiungendoci il nostro disco di partenza.

N.B. Io uso come nomi delle devices sda(sistema) e sdb(nuovo) ma potrebbero anche essere hda, hdb o altro.


  • <TERMINALE>

  • $sudo su

  • ci leviamo sudo dalle...[password]

  • #apt-get install mdadm

  • Installo mdadm

  • #sfdisk -d /dev/sda | sfdisk /dev/sdb

  • Copio le partizioni tali e quali dal disco con sistema (sda) a quello di mirror (sdb). Se da' noie usare opzione -f

  • #sfdisk --change-id /dev/sdb 1 fd

  • Trasformo partizione da mettere in raid in "Linux Raid Autodetect"
  • #mdadm --zero-superblock /dev/sdb1

  • Azzero il superblock in caso il disco fosse gia' stato utilizzato da mdadm in precedenza (in caso di messaggio "Unrecognised md.." nessun problema, la partizione era pulita)

  • #mkdir /mnt/Raid1

  • Creo directory di mount utile per copia successiva di files
  • #mount /dev/sdb1 /mnt/Raid1

  • Faccio il mount della partizione del disco 1 dove risiede la cartella boot.
  • #cp -dpRx /boot /mnt/Raid1

  • Copio la suddetta cartella nella partizione (ci servira' in seguito per settare il boot anche da disco 1)
  • #umount /mnt/Raid1

  • Smonto il volume
  • #mdadm -C /dev/md0 -l1 -n2 missing /dev/sdb1

  • Creo un raid supponendo un disco mancante (sda1 che devo ancora utilizzare per copia dati) e quello vuoto (sdb1) (-C=Create -l1+Raid-1 -n2=2 unita') in caso ignorare warning e creare comunque

  • #mkfs.ext3 /dev/md0

  • Creo un filesystem per la device per poterla utilizzare


N.B. Nell'installazione guidata originale esiste solo questa partizione,oltre a quella di swap corrispondente a sda2<sda5> (prova comando fdisk -l), che non interessa mettere in raid anche perche' si dovrebbe ricreare le partizioni su entrambi i dischi ed utilizzare mkswap (non mkfs). ( si potra' sempre fare in un secondo momento). Comunque in presenza di altre partizioni ripetere le ultime 4 operazioni anche per esse (sfdisk --change-id /dev/sdb 2 fd, ... mdadm ..md1 ...sdb2, mkfs.. md1) .


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

  • Aggiorno il file di configurazione mdadm
  • #gedit /etc/fstab

  • O nano per chi preferisce o e' in shell.inizio configurazione files di sistema

Si trovera' una cosa del genere

        # /etc/fstab: static file system information.
        #
        # <file system> <mount point>   <type>  <options>       <dump>  <pass>
        proc            /proc           proc    defaults        0       0
        # /dev/sda1 
        UUID=5b918ade-f914-4376-b54c-87614c71c7c4 / ext3 defaults,errors=remount-ro 0 1
        # /dev/sda5 
        UUID=043bf781-ae6e-4de5-b50f-8aa28525d8c9 none swap sw 0 0
        /dev/scd0       /media/cdrom0   udf,iso9660 ro,user,noauto  0       0
        /dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0


N.B.Nell' installazione guidata del live cd non e' prevista partizione di boot, compresa nella root come cartella /BOOT (altrimenti di regola dovrebbe essere la sda1 es. # /dev/sda1 UUID=ecb6c120-e475-40c4-9ce4-6c2a81b7b495 /boot ext3 defaults 0 2) Al posto delle partizioni da montare /dev/sda1 .. sostituire /dev/md0... (nel caso definite da UUID eliminarli e rimuovere il # da /dev...) lasciare intatta swap .


-

Modificare

        # /etc/fstab: static file system information.
        #
        # <file system> <mount point>   <type>  <options>       <dump>  <pass>
        proc            /proc           proc    defaults        0       0
        /dev/md0  / ext3 defaults,errors=remount-ro 0 1

        # /dev/sda5 
        UUID=043bf781-ae6e-4de5-b50f-8aa28525d8c9 none swap sw 0 0     //non ho toccato ne' swap 
        /dev/scd0       /media/cdrom0   udf,iso9660 ro,user,noauto  0       0         //ne' periferiche
        /dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0


        (nel caso di partizione /boot o altre) 
        /dev/md0  /boot ext3 defaults 0 2
        /dev/md1  / ext3 defaults,errors=remount-ro 0 1
        /dev/md2 ...
  • -

  • #gedit /etc/mtab

  • Stessa cosa cambiare /dev/sda1 in /dev/md0 ...

  • #gedit /boot/grub/menu.lst

  • Momentaneamente predispongo il boot dal disco 1 dove e' presente l'array creato

Dopo varie linee si trovera' una cosa del genere

        title        Ubuntu, kernel 2.6.22-14-generic
        root        (hd0,0)
        kernel        /boot/vmlinuz-2.6.22-14-generic root=UUID=3dac90fe-82d5-4a98-b577-af104a084e0d
        ro quiet splash
        initrd        /boot/initrd.img-2.6.22-14-generic
        quiet
        savedefault

        ....title .......(recovery mode)

        .........

-

Modificare

        title        Ubuntu, kernel 2.6.22-14-generic
        root        (hd1,0)                                            //Parte da disco 1
        kernel        /boot/vmlinuz-2.6.22-14-generic root=/dev/md0    //modificata root nell'array 
        ro quiet splash
        initrd        /boot/initrd.img-2.6.22-14-generic
        quiet
        savedefault
  • -

#update-initramfs -u

Aggiorno immagine kernel

#mount /dev/md0 /mnt/Raid1

Monto md0. Ignorare eventuale messaggio se che non crea collegamento (/etc/mtab) .

#cp -dpRx / /mnt/Raid1

Copio i dati della partizione root del disco originale, in cui nel mio caso c'e' anche la cartella di BOOT (nel fstab montata su / da /dev/sda1 ) nell'array md0

#umount /mnt/Raid1

Smonto md0. Ignorare eventuale messaggio se che non crea collegamento (/etc/mtab)


N.B. Come al solito in presenza di altre partizioni ripetere i passaggi anche per quelle, chiaramente modificando i nomi mdX in riferimento a fstab. (OCCHIO SE C'E" /boot e' fondamentale per l'avvio).


  • #grub

  • Faccio setup grub per avvio da disco 1
  • >root (hd1,0)

  • >setup(hd1)

  • >quit

  • <RIAVVIARE IL SISTEMA>

  • <TERMINALE>

  • $sudo su

  • Via sudo.... [password]
  • #cat /proc/cmdline

  • Se tutto e' andato bene root=/dev/md0 ...o md1 insomma l'array
  • #cat /proc/mdstat

  • Dovrebbe restituire lo stato del raid (1 periferica assente) [2/1][_U]


N.B. Controllare qui che tutto funzioni a dovere perche' sara' l'ultima occasione di recuperare i dati dal disco originale! (semplicemente saltando da qui alla riconfigurazione del boot sul disco 0 piu' avanti e al riavvio risettando fstab mtab come prima)


  • #sfdisk --change-id /dev/sda 1 fd

  • I dati ormai sono nel raid, ora posso aggiungere le partizioni di sda (il vecchio sorgente)
  • #mdadm -a /dev/md0 /dev/sda1

  • Come al solito ripetere i 2 passaggi se presenti altre partizioni
  • #cat /proc/mdstat

  • Indichera' il resync delle periferiche, ripeterlo di tanto in tanto fino al completamento.


PATCH DI BUG NOTO (120375)

SPIEGAZIONE PER CHI INTERESSATO In pratica se uno dei due dischi si rompe o l'array risulta degradato il sistema non si avvia e cade in shell in quanto non trova devices di root. Cio' e' dovuto al fatto che nel file /etc/udev/rules.d/85-mdadm.rules e' presente le condizione di assemblamento array (mdadm --assemble --scan) --no-degraded che fa si' che esso non venga costituito se non in presenza di entrambe le periferiche. Sostituendo --no-degraded con --run (che forza la creazione dell'array anche se degradato) il tutto parte ma crea un altro problema: Il sistema vedendo la device array (mdX) gia' costituita (anche se degradata...)si avvia senza cercare altri compnenti, creando COMUNQUE un array degradato. Per ovviare a tutto cio' si interviene sul file /usr/share/initramfs-tools/local, responsabile dell'avvio delle devices. In esso e' settato un tempo di default (Slumber=180) di 180 secondi (che io abbasserei un po' e si capira' perche') entro il quale il sistema deve trovare la device di root, altrimenti cade nella "busy box" shell. Quindi lasciando intatto l'85-mdadm.rules con --no-degraded attendiamo che (in caso id degradamento) trascorra questo tempo e, solo ora, introduciamo la creazione di un array degradato.

In pratica:

1 Attesa device root di 180 secondi (3 minuti! io abbasserei lo Slumber)- se tutto va bene avvia qui e prima.

2 (Introdotto da noi) Non trovata udev crea array degradato

3 "Busy box"

Per farla breve:


  • #gedit /usr/share/initramfs-tools/scripts/local


Subito prima del commento "# We have given up, but we will let the user fix matters if they can". copiare le seguenti linee:

        # Array in stato degradato 
        if [ ! -e "${ROOT}" ] || ! /lib/udev/vol_id "${ROOT}" >/dev/null 2>&1; then 
                 log_begin_msg "Tentativo di avvio RAID degraded arrays" 
                 /sbin/mdadm --assemble --scan 
                 log_end_msg 
        fi 
  • -

  • #gedit /boot/grub/menu.lst

  • Riconfiguro il boot dal disco 0 dove ora e' presente l'array creato

Il nostro

        title        Ubuntu, kernel 2.6.22-14-generic
        root        (hd1,0)                                                                     //Parte da disco 1
        kernel        /boot/vmlinuz-2.6.22-14-generic root=/dev/md0    
        ro quiet splash
        initrd        /boot/initrd.img-2.6.22-14-generic
        quiet
        savedefault
        ....title .......(recovery mode)

        .........

-

Modificare

        title        Ubuntu, kernel 2.6.22-14-generic
        root        (hd0,0)                                                                     //Parte da disco 0
        kernel        /boot/vmlinuz-2.6.22-14-generic root=/dev/md0     
        ro quiet splash
        initrd        /boot/initrd.img-2.6.22-14-generic
        quiet
        savedefault
  • -

  • #grub

  • Faccio setup grub per disco 0
  • >root (hd0,0)

  • >setup(hd0)

  • >quit

  • update-initramfs -u

  • Aggiorno immagine kernel


<RIAVVIARE IL NOSTRO RAID-1 FUNZIONANTE>


COMANDI UTILI PER CHECK UP

    • #cat /proc/mdstat

    • stato raid
    • #mdadm -D /dev/md0

    • (o mdX) stato raid.

REBUILDING DI RAID DEGRADATO

  • sdX- disco buono sdY -degradato (sda o sdb o hda o...)
  • $sudo su #sfdisk -d /dev/sdX | sfdisk /dev/sdY

  • Copio le partizioni tali e quali dal disco con sistema (sdX) a quello di mirror (sdY) .se da' noie usare opzione -f. Utilizzare solo se sdY rimpiazzato con disco nuovo o non partizionato correttamente
  • #mkdir /mnt/Raid1

  • Creo directory di mount utile per copia successiva di files. Utilizzare solo se sdY rimpiazzato con disco nuovo o non partizionato correttamente
  • #mount /dev/sdb1 /mnt/Raid1

  • Faccio il mount della partizione del disco 1 dove risiede la cartella boot. Utilizzare solo se sdY rimpiazzato con disco nuovo o non partizionato correttamente
  • #cp -dpRx /boot /mnt/Raid1

  • Copio la suddetta cartella nella partizione (ci servira' in seguito per settare il boot anche da disco 1) .Utilizzare solo se sdY rimpiazzato con disco nuovo o non partizionato correttamente
  • #umount /mnt/Raid1

  • Smonto il volume.
  • #sfdisk --change-id /dev/sdY 1 fd

  • Trasformo partizione da mettere in raid in "Linux Raid autodetect". Utilizzare solo se sdY rimpiazzato con disco nuovo o non partizionato correttamente.
  • N.B.Se necessario rifare l'operazione di grub per il disco in questione.
  • #mdadm --zero-superblock /dev/sdY1 Azzero il superblock in caso il disco fosse gia' stato utilizzato da mdadm in precedenza

    #mdadm -a /dev/md0 /dev/sdY1 Aggiungo nuovamente la partizione all'array. Ripetere gli ultimi due (o tre) passaggi nel caso di altre partizioni ovviamente modificandone i nomi ...md1 ..sdY2


CategoryHomepage