====== 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. **Note** : **''dd if=/dev/hdb __bs=4k__ ...''** devrait etre beaucoup plus rapide... ;-) Sans oublier: __bs=4k__ de l'autre côté **''dd of=... ''** ====== 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''** pour ''RAID 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. ===== Ajouter sda au RAID ===== 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 Aprés quelques minutes, voir quelques heures: **''/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''. ===== Rebooter sur sda ===== Il faut rebooter sur **''sda''** : ca marche! on a presque fini :) ===== Recreer sdb ==== On va recreer **''sdb''** avec les mêmes partitions que **''sda''**. D'abord, sortir **''sdb''** du RAID:\\ (le swap) # mdadm /dev/md1 --fail /dev/sdb2 # mdadm /dev/md1 --remove /dev/sdb2 (le reste du disk) # mdadm /dev/md0 --fail /dev/sdb1 # mdadm /dev/md0 --remove /dev/sdb1 Recreer les mêmes partitions: # sfdisk -d /dev/sda | sfdisk /dev/sdb Remettre les partitions dans le RAID:\\ (le swap) # mdadm /dev/md1 --add /dev/sdb2 (le reste du disk) # mdadm /dev/md0 --add /dev/sdb1 Où en est-on ? # cat /proc/mdstat Attendre la reconstruction pendant quelques heures... ===== Agrandir le RAID (enfin) ===== Aprés plusieurs heures: Les partitions sont plus grandes... et alors ? # mdadm --detail /dev/md0 ... Array Size : 188708608 (179.97 GiB 193.22 GB) Device Size : 388708608 (370.70 GiB 398.04 GB) ... Agrandir ! # mdadm --grow /dev/md0 -z max C'est fait pour la couche RAID. Et pour finir, la couche **''ext2/3''** : # resize2fs /dev/md0 # mdadm --detail /dev/md0 ... Array Size : 388708608 (370.70 GiB 398.04 GB) Device Size : 388708608 (370.70 GiB 398.04 GB) ... C'est fini ! ====== RAID incomplet ====== On a installer Debian, en RAID 1, avec 1 seul disk. Maintenant, on aimerait bien le completer avec un 2ieme disk... ===== Etat des lieux ===== Etat du RAID: # cat /proc/mdstat Personalities : [raid1] md1 : active raid1 sda2[0] 292969280 blocks [1/1] [U] md0 : active raid1 sda1[0] 248896 blocks [1/1] [U] 1 seul disk, et c'est clean: # mdadm --detail /dev/md0 /dev/md0: Version : 00.90.03 Creation Time : Thu Jul 31 00:49:36 2008 Raid Level : raid1 Array Size : 248896 (243.10 MiB 254.87 MB) Device Size : 248896 (243.10 MiB 254.87 MB) Raid Devices : 1 Total Devices : 1 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Tue Aug 26 06:26:09 2008 State : clean Active Devices : 1 Working Devices : 1 Failed Devices : 0 Spare Devices : 0 UUID : 32d9f08e:22d09170:1b5fc4cb:76531e6b Events : 0.10 Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sda1 Soit, donc: * **"/dev/sda"** qui est le disk deja en place et qui va bien. * **"/dev/sdb"** qui est le disk qu'on rajoute. ===== copier structure des partitions ===== Voyons l'etat des partitions de **''/dev/sda''** : # sfdisk -d /dev/sda # partition table of /dev/sda unit: sectors /dev/sda1 : start= 63, size= 497952, Id=fd, bootable /dev/sda2 : start= 498015, size=585938745, Id=fd /dev/sda3 : start=586436760, size=194980905, Id=8e /dev/sda4 : start= 0, size= 0, Id= 0 Les 2 disks etant identiques, donc, on va faire simple...\\ On copie a la structure des partitions: # sfdisk -d /dev/sda | sfdisk /dev/sdb Checking that no-one is using this disk right now ... OK ... ... Successfully wrote the new partition table Re-reading the partition table ... ===== ajouter partition ===== ==== mauvaise piste ==== Ajouter une partition dans le RAID... # mdadm /dev/md0 --add /dev/sdb1 mdadm: added /dev/sdb1 Etat du RAID ? # cat /proc/mdstat Personalities : [raid1] md1 : active raid1 sda2[0] 292969280 blocks [1/1] [U] md0 : active raid1 sdb1[1](S) sda1[0] 248896 blocks [1/1] [U] unused devices: Hu ? c'est quoi ce **''(S)''** ? # mdadm --detail /dev/md0 /dev/md0: Version : 00.90.03 Creation Time : Thu Jul 31 00:49:36 2008 Raid Level : raid1 Array Size : 248896 (243.10 MiB 254.87 MB) Device Size : 248896 (243.10 MiB 254.87 MB) Raid Devices : 1 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Tue Aug 26 06:26:09 2008 State : clean Active Devices : 1 Working Devices : 2 Failed Devices : 0 Spare Devices : 1 UUID : 32d9f08e:22d09170:1b5fc4cb:76531e6b Events : 0.10 Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sda1 1 8 17 - spare /dev/sdb1 Ah ouai, le disk est dans le **''spare''** : en secours, en attente d'etre assembler au RAID... Donc, je retire: # mdadm /dev/md0 --remove /dev/sdb1 ==== "agrandir" le raid ==== En fait, augmenter le nombre de device actif ! actuellement il n'y a qu'un disk, et il en faut 2 (pour le RAID1) ! Augmentons le nombre de "active device": # mdadm --grow /dev/md0 -n 2 Verifions: # cat /proc/mdstat Personalities : [raid1] md1 : active raid1 sda2[0] 292969280 blocks [1/1] [U] md0 : active raid1 sda1[0] 248896 blocks [2/1] [U_] unused devices: Ah, ca ressemble a quelque chose que je connais :-) Faisons la meme chose pour **''/dev/md1''** # mdadm --grow /dev/md1 -n 2 Parfait. ==== Ajoutons partitions ! ==== # mdadm /dev/md0 --add /dev/sdb1 mdadm: re-added /dev/sdb1 Verifions: # cat /proc/mdstat Personalities : [raid1] md1 : active raid1 sda2[0] 292969280 blocks [2/1] [U_] md0 : active raid1 sdb1[1] sda1[0] 248896 blocks [2/2] [UU] unused devices: Yes! L'autre maintenant: # mdadm /dev/md1 --add /dev/sdb2 mdadm: added /dev/sdb2 # cat /proc/mdstat Personalities : [raid1] md1 : active raid1 sdb2[2] sda2[0] 292969280 blocks [2/1] [U_] [>....................] recovery = 0.0% (83264/292969280) finish=117.2min speed=41632K/sec md0 : active raid1 sdb1[1] sda1[0] 248896 blocks [2/2] [UU] unused devices: En cours de remontage... super. ===== Configurer ===== Maintenant, il faut completer la configuration, sinon, le prochain reboot risque d'être curieux. Editer le fichier **''/etc/mdadm/mdadm.conf''** afin que le nombre de device soit **''2''**. Exemple: ARRAY /dev/md0 level=raid1 num-devices=2 UUID=32d9f08e:22d09170:1b5fc4cb:76531e6b ARRAY /dev/md1 level=raid1 num-devices=2 UUID=1f25f923:59abea04:4ea8b7e2:21f680e2 En fait, ca doit ressembler a ce que la commande suivante produit comme sortie: # mdadm --detail --scan ARRAY /dev/md0 level=raid1 num-devices=2 UUID=32d9f08e:22d09170:1b5fc4cb:76531e6b ARRAY /dev/md1 level=raid1 num-devices=2 UUID=1f25f923:59abea04:4ea8b7e2:21f680e2 (Il y a peut etre un **"spares=1"** en trop, vu que le RAID est en train de remonter....) ===== Boot ===== Il faut rendre "bootable" ce disk, on pourra ainsi booter sur l'un ou l'autre disque, en cas de panne. Il faut bien annoncer a "Grub" qu'un nouveau disk bootable...\\ Editer le fichier **''/boot/grub/device.map''** , afin d'avoir (par exemple): (hd0) /dev/sda (hd1) /dev/sdb On peut alors suivre [[disk_raid#methode_1b|cette procedure]] pour rendre le disk bootable. | :!: | Attendre que le RAID soit remonté pour jouer avec ''grub'' (sinon, ca deconne un peu) |