Ceci est une ancienne révision du document !
Table des matières
Introduc
Là, on va voir comment transferer un disk (et en particulier un RAID 1) sur une autre bécanne. En passant, les disks sont plus grand et change d'interface: hda et hdb deviennent respectivement sda et sdb.
Copier un RAID 1
Arreter temporairement le superflu
Comme on va arreter le RAID 1 en plein vol, on va limiter la casse en stoppant temporairement quelques services non-vitaux, surtout s'ils travaillent sur les disks.
La coupure devrait avoir lieu quelques minutes… donc, pas de panique.
Exemples:
# /etc/init.d/gdm stop # /etc/init.d/postfix stop # /etc/init.d/bind9 stop
Sortir un disk du RAID
# mdadm /dev/md0 --fail /dev/hdb1 # mdadm /dev/md0 --remove /dev/hdb1
Et voila, pour la première partition.
# mdadm /dev/md1 --fail /dev/hdb2 # mdadm /dev/md1 --remove /dev/hdb2
Et voila pour la partition du swap.
Maintenant, tout le disk hdb
est sortie du RAID, on va pouvoir jouer avec.
On a un etat du RAID à l'instant t
sur le disk hdb
. Le disk hda
continue de travailler normalement.
Remettre les services en route
Exemples:
# /etc/init.d/gdm start # /etc/init.d/postfix start # /etc/init.d/bind9 start
Transfert via le NET
Si on ne veut rien démonter, et qu'on utilise des equipements rapides ou qu'on a beaucoup de temps, on va faire une copie du disk hdb
via le réseau local !
Un petit install peut etre necessaire:
# apt-get install netcat gzip
Sur la (nouvelle) bécanne qui va recevoir la copie, faire ceci:
(On suppose qu'on veut copier sur le disk sdb
)
# nc -lp 32767 | gunzip | dd of=/dev/sdb
Sur la bécanne qui detient la copie du RAID en hdb
:
# dd if=/dev/hdb | gzip | nc 192.168.0.250 32767
Le pipe vers gzip
et gunzip
peut être jugé superflu et inutile dans certains cas… dépend du contenu du disk.
Le transfert démarre immediatement… et peut durer des heures… Une bonne nuit de sommeil pour moi.
de hd à sd
Nous voila sur la nouvelle machine, avec un disk en sdb
qui est la copie de hdb
de l'autre machine.
Simples manipulations
Vous voila sur un Live CD (ou avec un systeme rapidement installé sur sda
, ce qui etait mon cas) et vous aimeriez verifier l'etat de la copie:
# fdisk /dev/sdb -l
Verifier que le disk est bien une partition RAID:
# mdadm --examine /dev/sdb1
En passant, cela nous retourne UUID.
Monter le disk avec son RAID:
(J'utilise /dev/md2
comme ça…)
# mdadm --assemble /dev/md2 /dev/sdb1
Et comme j'ai un avertissement:
# mdadm --run /dev/md2
Et voila, le RAID est reviendu a la vie, sur 1 seul disk bien sur.
Mounter le contenu du disk (par exemple):
# mkdir /mnt/mymd # mount /dev/md2 /mnt/mymd
Et voila, on peut jouer avec le contenu du disk. On peut se risquer à faire un:
# e2fsk /mnt/mymd
Parce que rappellez-vous: nous avons arreter le RAID en plein vol, et il y a peut être des erreurs qui sont apparus.
Préparer le Boot
On suppose que le contenu de la copie fraiche est disponible dans /mnt/mymd
.
menu.lst
Dejà, editer /boot/grub/menu.lst
et s'assurer qu'il n'y a pas de référence à hd?
, mais bien md?
.
device.map
Editer /boot/grub/device.map
et transformer les hd?
en sd?
…
fstab
Si necessaire, corriger /etc/fstab
, qui peut faire des references (maintenant) erronées: méfiez-vous des UUID.
mdadm.conf
Corriger /etc/mdadm/mdadm.conf
afin qu'il fasse reference aux disks sd?
, et non plus hd?
.
Reboot
Rebooter sur le disk sdb
.
Preparer le swap
L'objectif initial est non seulement de changer de bécanne, mais aussi d'agrandir le RAID.
Pour cela, j'ai besoin de detruire la partition RAID du swap
et la recreer a la fin du disk.
Pour cela, j'utilise cfdisk
car il place correctement la nouvelle partition à la fin. (j'ai d'abord essayé avec fdisk
, mais je n'ai pas reussi sans avertissement etrange).
Donc: (en supposant que le RAID est unmounter)
# cfdisk /dev/sdb
- Supprimer la partition RAID du swap (c'est
/dev/sdb2
chez moi) - Recreer la partition RAID a la fin du disk. On peut en profiter pour modifier la taille aussi…
- Forcer le TYPE
fd
pourRAID autodetect
. - WRITE et QUIT
Il faut bien veuiller que l'ordre de la partition reste la même: sdb2
reste sdb2
.
Retour sous Shell, on créé le (nouveau) RAID pour le swap:
# mdadm -Cv /dev/md3 -l1 -n2 missing /dev/sdb2
Regarder le nouveau RAID:
# cat /proc/mdstat
Creer le swap
:
# mkswap /dev/md3
En deplacant le swap, je crois qu'on change son UUID
donc bien apporter la modification dans le fstab
et mdadm.conf
du futur disk de BOOT.
Connaitre le UUID:
# mdadm --examine /dev/sdb2
Apporter les modifications dans (mount sdb1)/etc/fstab
et (mount sdb1)/etc/mdadm/mdadm.conf
.
Booter dessus
(D'aprés mes tests, j'ai pu booter sur ce disk)
Booter sur le disk sdb
. Si ca ne fonctionne pas pour vous, vous allez devoir improviser avec un live CD par exemple.
initrd ?
Je crois qu'un petit update-grub
est le bienvenu quelque part…?
Agrandir le RAID
Voila, on donc un disk en sdb
sur lequel on a booté.
On a un disk en sda
qui est identique à sdb
par sa taille physique (au moins).
Mais sda
ne sert plus a rien: eventuellement l'unmounter.
Ecrasons sda
!
Copier les partitions: (c'est pour etre certains de partir sur les mêmes bases)
# sfdisk -d /dev/sdb | sfdisk /dev/sda
Voila, sda
a les même partitions que sdb
… mais rien de coohérent encore dans les partitions.
Agrandir la partition principale (accessoirement celle sur laquelle on boot aussi):
# cfdisk /dev/sda - virer **''sda1''** - recreer **''sda1''** en prenant la place souhaité. (toute ?) - BOOT activé - TYPE 0xfd (RAID autodetect) - WRITE & QUIT
Ajouter sda
au RAID:
La partition de swap (la + rapide a mounter):
# mdadm /dev/md1 --add /dev/sda2
La partition de BOOT etc…:
# mdadm /dev/md0 --add /dev/sda1
Où en est-on ?
# cat /proc/mdstat
Lorsque /dev/sda1
est totalement restauré.
Assurez-vous que la configuration est toujours en phase…
# mdadm --examine /dev/sda1
et
# mdadm --examine /dev/sda2
sont bien en phase avec mdadm.conf
?
Si non:
# mdadm --detail --scan
Et faire coincider avec mdadm.conf
.