Migrer votre système debian actuel sur un système en RAID1
Nous allons voir comment migrer un systeme debian déjà installé et qui tourne vers un RAID1. (solution de miroitage, mais qui ne remplace pas un système de backup, bien sûr !)
Je vous conseille fortement d'effectuer des sauvegardes de votre système (données + fichiers de conf au minimum) sur un autre disque, car il n'est pas dit que la migration se passe sans problème, je ne suis d'ailleurs pas responsable en cas de perte de vos données.
I- On admet que...
- vous utilisez le kernel officiel debian (mais tout kernel avec le support du RAID fait l'affaire) ;
- le système tourne sur un disque IDE nommé hda (possible également de faire sur disques SATA, SCSI, etc.) ;
- on ajoute un autre disque dur sur une deuxième nappe IDE (c'est mieux, au cas où la nappe de l'autre cause des problèmes), nommé hdc ;
- ce nouveau disque dur a la même taille que le premier, ou une taille supérieure ;
- vous avez accès root à la machine en question :
- il n'y a que 3 partitions, /, /home et la swap.
La migration s'est faite sur une debian lenny/sid, mais les opérations sont les mêmes sur etch.
II - Copie des partitions :
On doit tout d'abord copier la table des partitions (le schéma en quelques sortes de vos partitions) de hda sur hdc :
sfdisk -d /dev/hda | sfdisk /dev/hdc
Vous pouvez maintenant voir avec un fdisk -l que la tables des partitions est la même sur hdc que sur hda. (la table des partitions n'étant pas le contenu des partitions).
III- Création des arrays avec mdadm :
On installe tout d'abord mdadm, l'outil qui permet de gérer ce RAID1 (il est possible de mettre en place d'autres types de RAID) :
aptitude install mdadm
On crée ensuite les arrays, ces arrays permettent de créer un "device virtuel" dans /dev pour dire telles partitions vont aller être synchronisés ensemble (explication très succinte mais qui explique clairement l'array sans entrer dans les détails).
Nous allons créer les arrays pour la racine / (dev/md0) et pour /home (/dev/md1) :
mdadm --create /dev/md0 --level 1 --raid-devices=2 missing /dev/hdc1
mdadm --create /dev/md1 --level 1 --raid-devices=2 missing /dev/hdc2
Vérifiez que cela est bon dans le fichier /proc/mdstats
IV - Copie des données :
On doit maintenant copier les données de hda sur hdc, c'est-à-dire la racine / et /home.
- D'abord pour la racine / :
mount -t auto /dev/md0 /mnt/ cp -dpRx / /mnt
(cette opération peut être très longue, à fond de la taille des données)
- Ensuite pour /home :
mount -t auto /dev/md1 /mnt/home cp -dpRx /home/* /mnt/home/
V - Avant le reboot, des modifications sont à faire :
Comme le système tourne sur hda, nous devons redémarrer sur hdc pour ajouter hda aux deux arrays, quelques modifications sont à faire dans grub et dans le fstab et dans mdadm.conf.
le fstab :
Nous devons modifier le fstab pour lui indiquer de démarrer sur md0 et md1 (c'est-à-dire sur hdc, puisque le RAID n'est pour l'instant que sur ce disque).
# cat /etc/fstab :
# <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/md0 / ext3 defaults,errors=remount-ro 0 1 /dev/md1 /home ext3 defaults,errors=remount-ro 0 1 /dev/hda3 none swap sw 0 0 /dev/hdc3 none swap sw 0 0
grub :
Apparemment, avec grub, il faut regénérer un initrd, sinon, impossible de démarrer sur le RAID, pour cela :
mkinitramfs -o /boot/new-initrd # donnez le nom de votre kernel plutôt)
Si vous utilisez etch, il faut peut-être utiliser mkinitrd 1
Ensuite, dans /boot/grub/menu.lst :
# cat /boot/grub/menu.lst
title Debian GNU/Linux, kernel 2.6.24.4-686 raid (hd0) root (hd0,0)
kernel /boot/vmlinuz-2.6.24.4-686 root=/dev/md0 ro # adaptez à votre kernel initrd /boot/new-initrd savedefault title Debian GNU/Linux, kernel 2.6.24.4-686 raid (hd1) root (hd1,0)
kernel /boot/vmlinuz-2.6.24.4-686 root=/dev/md0 ro # adaptez à votre kernel initrd /boot/new-initrd
mdadm.conf :
mdadm --detail --scan >> /mnt/etc/mdadm/mdadm.conf
Maintenant; on redémarre le système avec un reboot.
VI - On ajoute hda aux arrays :
mdadm --add /dev/md0 /dev/hda1 mdadm --add /dev/md1 /dev/hda2
Enfin, mdadm synchronise le tout :
# cat /proc/mdstat :
Personalities : [raid1]
md0 : active raid1 hda1[2] hdc1[1]
24707840 blocks [2/1] [_U]
[==========>..........] recovery = 51.5% (12734080/24707840) finish=20.3min speed=9814K/sec
md1 : active raid1 hda2[2] hdc2[1]
54685184 blocks [2/1] [_U]
[=>...................] recovery = 5.9% (3260992/54685184) finish=71.5min speed=11982K/sec
VII - Erreurs possibles :
"filesystem doesn't have /sbin/init"
=> retentez une copie des données de la racine (voir l'étape "Copie des données").
"waiting for root file system" :
=> vous devez alors absolument regénérer le initrd (voir l'étape "grub").
"device or resource busy" :
=> Vous devez impérativement redémarrer sur hdc (md0) !! Voir l'étape " Avant le reboot, des modifications sont à faire".
VIII - Mais aussi...
Pour tester si votre RAID fonctionne, vous pouvez, c'est un peu sale, debrancher la nappe d'un des disques et voir si votre systeme est toujours ok. Pour re-ajouter votre disque :
mdadm /dev/mdNum -a /dev/le-device
Je vais prochainement écrire un nouveau billet, ou compléter celui-ci pour donner des conseils pour vérifier que le RAID fonctionne correctement.
Publié le dimanche, janvier 18 2009, par Scurz dans la catégorie : Administration système/réseaux - Lien permanent
Commentaires
lundi, janvier 11 2010
15:06
Bonjour,
Je me pose une question, il n'y pas d'installation de GRUB sur le nouveau disque?
Merci.
— Alex