Table des matières
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
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.