====== 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: ==== 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) **R**am **D**isk. 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. # # 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: 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: ==== 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**.