Outils pour utilisateurs

Outils du site


disk_raid_sata_debian

Disk SATA en RAID

Je me suis trés fortement inspiré du lien ci-dessous
Lien:

http://xtronics.com/reference/SATA-RAID-debian-for-2.6.html

Mais il y a aussi:

http://marc.theaimsgroup.com/?l=linux-raid&m=108571782912454&w=2

Pour Lenny : http://about-gnulinux.info/dotclear/index.php?post/2009/01/18/Migrer-votre-syst%C3%A8me-debian-actuel-sur-un-systeme-en-RAID1

Actuellement, il n'est parfois pas possible de configurer un RAID fonctionnel avec des disks SATA au moment de l'installation de debian: y a un bug !!!!!!!

Donc, il faut installer le RAID

aprés l'installation.

Installation de Debian

On installe Debian en prevoyant qu'on va faire du RAID. Ca me parait mieux ainsi.
On suppose qu'on veut faire du RAID 1 et qu'on a donc de 2 disks: sda et sdb
Le partitionnage des disks:
sda:

 Partition Primaire: sda1: /boot ext3 256 MB
 Partition Logique: sda5: swap 3 GB (pour 1 GB de RAM)
 Partition Logique: sda6: / ext3 le reste du disk

sdb:

 Même decoupage, mais le systeme de fichier en 'Linux raid autodetect'

Il peut être utile de marquer les partitions sda1 et sdb1 comme bootable.

Ce qui donne a peu pres:

 Disk /dev/sdb: 81.9 GB, 81964302336 bytes
 255 heads, 63 sectors/track, 9964 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
    Device Boot      Start         End      Blocks   Id  System
 /dev/sdb1   *           1          31      248976   fd  Linux raid autodetect
 /dev/sdb2              32        9964    79786822+   5  Extended
 /dev/sdb5              32         396     2931831   fd  Linux raid autodetect
 /dev/sdb6             397        9964    76854928+  fd  Linux raid autodetect

Une fois l'installation terminé…

Note: on peut partionner autrement… tout dans une seule partition, ca doit etre possible.

mdadm

Au prealable:

Si on veut editer les partitions avant d'installer le RAID, il faut utiliser cfdisk:

 # cfdisk /dev/sdb

Non tester: Si on veut copier les partitions existantes d'un disk sur un autre:

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

Partition sdb

Donc a demarré le nouveau systeme et on a un disk sda operationnel et sans RAID, et un disk sdb non fonctionnel mais preparer pour le RAID.

Installer les outils:

 # apt-get install wajig
 # wajig install mdadm
 # wajig install rsync

wajig fait apt-get install … mais avec un je ne sais quoi de mieux…?

a verifier: En fait, je crois qu'on pourrait faire la même chose sans wajig, mais le probleme c'est que apt-get install mdadm met immediatement en place le RAID alors que ce n'est pas ce qu'on souhaite a ce moment là. (Peut être faut-il partitionner le disk aprés l'installation de mdadm)

A installer aussi:

 # apt-get install initrd-tools

Sinon, on pourra pas utiliser mkinitrd plus tard…

Creer les volumes RAID:

 # mdadm -Cv /dev/md0 -l1 -n2 missing /dev/sdb1
 # mdadm -Cv /dev/md1 -l1 -n2 missing /dev/sdb5
 # mdadm -Cv /dev/md2 -l1 -n2 missing /dev/sdb6

Ce qui est equivalent a (pour la 1er ligne):

 # mdadm --create /dev/md0 --level 1 --raid-devices=2 missing /dev/sdb1

Cela a créé 3 RAID 1 dégradé ( /boot swap et /) avec un disk manquant.

 #cat /proc/mdstat
 Personalities : [raid1]
 md1 : active raid1 sdb5[1]
       979840 blocks [2/1] [_U]
 md0 : active raid1 sdb1[1]
       192640 blocks [2/1] [_U]
 md2 : active raid1 sdb6[1]
       159661888 blocks [2/1] [_U]
 unused devices: <none>

Creer les systemes de fichiers et les mounter

 # mkfs.ext3 /dev/md0
 # mkfs.ext3 /dev/md2
 # mkswap /dev/md1

En ext3 ou autres d'ailleurs… mais ce sera en ext3.

Pour nos manipulation ultérieur, on prépare des choses:

 # mkdir /mntroot
 # mkdir/mntboot
 # mount /dev/md2 /mntroot
 # mount /dev/md0 /mntboot

Preparer **initrd**

etch ou moins

initrd est le ce qui chargé au moment du boot dans un (temporaire) Ram Disk.

Pour les disks SATA, soyons attentif a ça: editer le fichier /etc/mkinitrd/mkinitrd.conf et modifier:

    MODULES=most

en

    ###MODULES=most
    MODULES=dep

et

    ROOT=probe

en

    ###ROOT=probe
    ROOT="/dev/md2 ext3"

Et maintenant, examinons le repetoire /boot (ou uname -r) pour savoir comment nommé les fichiers:

 # uname -r
 2.6.17-2-686
 # ls /boot -la
 ...
 -rw-r--r--  1 root root 4629674 2006-11-16 13:52 initrd.img-2.6.17-2-686
 ...

Donc on fait: maintenant:

 # mkinitrd -o /boot/initrd.img-2.6.17-2-686-md 2.6.17-2-686

Lenny

Que faire ? “mkinitrd” n'existe pas.

Il semble que l'equivalent soit: “mkinitramfs”

Et donc, il faut faire:

# mkinitramfs -o /boot/new-initrd

Comme dit ici: http://about-gnulinux.info/dotclear/index.php?post/2009/01/18/Migrer-votre-syst%C3%A8me-debian-actuel-sur-un-systeme-en-RAID1

Je ne puis confirmer.

Editer **/boot/grub/menu.lst** :

A partir la copie d'un modele: (Par exemple)

 title Debian GNU/Linux, kernel 2.6.17-2-686
 root (hd0,0)
 kernel /vmlinuz-2.6.17-2-686 root=/dev/sda6 ro 
 initrd /initrd.img-2.6.17-2-686
 savedefault
 boot

On fait les modifications suivante:

 title Debian GNU/Linux, kernel 2.6.17-2-686-md Disk1
 root (hd0,0)
 kernel /vmlinuz-2.6.17-2-686 root=/dev/md2 ro 
 initrd /initrd.img-2.6.17-686-md
 savedefault
 boot

Et a partir de ce nouveau block faire une copie et apporter les modifications suivantes:

 title Debian GNU/Linux, kernel 2.6.17-2-686-md Disk2
 root (hd1,0)
 kernel /vmlinuz-2.6.17-2-686 root=/dev/md2 ro 
 initrd /initrd.img-2.6.17-686-md
 savedefault
 boot

(Re)generer un fichier **/etc/mdadm/mdadm.conf** :

Editer /etc/mdadm/mdadm.conf et avoir pour seule ligne dans le fichier:

    DEVICE /dev/sda* /dev/sdb*

Ensuite faire:

 # mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Tout copier sur le disk RAID dégradé

 # rsync -auHxv --exclude=/proc/* --exclude=/sys/* --exclude=/boot/* --exclude=/mntboot --exclude=/mntroot/ /* /mntroot/
 # mkdir /mntroot/proc /mntroot/boot /mntroot/sys 
 # chmod 555 /mntroot/proc
 # rsync -auHx   /boot/ /mntboot/

Faire des modifications dans **/mntroot/etc/fstab**:

Les changements sont en bleu:

 /etc/fstab: static file system information.
 #
 # <file system> <mount point>   <type>  <options>       <dump>  <pass>
 proc            /proc           proc    defaults        0       0
 /dev/md2        /               ext3    defaults,errors=remount-ro 0       1
 /dev/md0        /boot           ext3    defaults        0       2
 /dev/md1        none            swap    sw              0       0
 /dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0

Reboot !

On devrait pouvoir booter sur le RAID … Disk1, sinon, on peut encore faire un autre choix.

Si tout va bien, on continue.

Attacher le disk original...

D'abord, on change les types des partitions de sda en Linux raid autodetect (FD)

 # cfdisk /dev/sda
 ... changer le type des partitions en **FD**

Puis on attache:

 # mdadm /dev/md0 -a /dev/sda1
 # mdadm /dev/md1 -a /dev/sda5
 # mdadm /dev/md2 -a /dev/sda6

Verifions que ca marche (exemple):

 # cat /proc/mdstat
 Personalities : [raid1]
 md0 : active raid1 sda1[0] sdb1[1]
       192640 blocks [2/2] [UU]
 md1 : active raid1 sda5[0] sdb5[1]
       979840 blocks [2/2] [UU]
 md2 : active raid1 sda6[2] sdb6[1]
       159661888 blocks [2/1] [_U]
       [===>.................]  recovery = 17.9% (28697920/159661888) finish=56.4min speed=38656K/sec
 unused devices: <none>

Et aprés quelques longues minutes:

 # cat /proc/mdstat
 Personalities : [raid1]
 md0 : active raid1 sda1[0] sdb1[1]
       192640 blocks [2/2] [UU]
 md1 : active raid1 sda5[0] sdb5[1]
       979840 blocks [2/2] [UU]
 md2 : active raid1 sda6[2] sdb6[1]
       159661888 blocks [2/2] [UU]
 unused devices: <none>

Regenerer initrd

Oui, il faut aboslument faire ca apres que le RAID est OK, sinon, il sera toujours degradé et recontruit a chaque mise a jour du noyau.

 # mkinitrd -o /boot/initrd.img-2.6.17-2-686-md 2.6.17-2-686

Regenerer **/etc/mdadm/mdadm.conf** :

Editer /etc/mdadm/mdadm.conf et avoir pour seul ligne de texte:

    DEVICE /dev/sda* /dev/sdb*

Et puis faire:

 # mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Au final on a un fichier qui ressemble a ça:

DEVICE /dev/sda* /dev/sdb* ARRAY /dev/md0 level=raid1 num-devices=2 UUID=4d58ade4:dd80faa9:19f447f8:23d355e3

   devices=/dev/sda1,/dev/sdb1

ARRAY /dev/md1 level=raid1 num-devices=2 UUID=3f1bdce2:c55460b0:9262fd47:3c94b6ab

   devices=/dev/sda5,/dev/sdb5

ARRAY /dev/md2 level=raid1 num-devices=2 UUID=7dfd7fcb:d65245d6:f9da98db:f670d7b6

   devices=/dev/sdb6,/dev/sda6

Configurer **grub** pour booter sur les 2 disks

Install the MBR on the second disk

 # grub --device-map=/boot/grub/device.map
 >> root (hd0,0)
 >> setup (hd0)
 >> root (hd1,0)
 >> setup (hd1)
 >> quit 

Faire en sorte que grub designe MD comme periphérique root. (Attention, le simple '#' n'est pas un commentaire !!!!)
Editer /boot/grub/menu.lst et transformer:

 # kopt=root=/dev/sda6 ro

en

 # kopt=root=/dev/md2 ro

Re-configurer le daemon mdadm:

 # dpkg-reconfigure mdadm

Et je crois que cette opération regenere encore un initrd plus clean, avec le nom original (c'est a dire sans -md a la fin)

Reboot et nettoyage

Rebooter pour voir si tout va bien…

Faire une copie de sauvegarde de menu.lst:

 # cp /boot/grub/menu.lst /boot/grub/menu.lst-old

Puis faire:

 # update-grub

Cela regenere un fichier menu.lst propre. Mais les choix pour booter sur le initrd…md a disparu. Par securite et a partir de menu.lst-old, remettre les choix …Disk1 et …Disk2 ceci fait: rebooter.

Si tout va bien, alors on peut refaire un update-grub et effacer les images initrd…md et toutes references a ce fichier: sinon, on peut encore rebooter en choissisant …Disk1.

disk_raid_sata_debian.txt · Dernière modification : 2009/06/22 11:30 de thierry