Outils pour utilisateurs

Outils du site


disk_raid_transfert

Ceci est une ancienne révision du document !


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… ;-)

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 .

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
  1. Supprimer la partition RAID du swap (c'est /dev/sdb2 chez moi)
  2. Recreer la partition RAID a la fin du disk. On peut en profiter pour modifier la taille aussi…
  3. Forcer le TYPE fd pour RAID autodetect.
  4. 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
... <snip> ...
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: <none>

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 ! et oui, il n'y a qu'1 !

# 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: <none>

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: <none>

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: <none>

En cours de remontage… super.

Configurer

Maintenant, il faut completer la configuration, sinon, le prochain reboot risque d'être curieux.

disk_raid_transfert.1219789912.txt.gz · Dernière modification : 2008/08/26 22:31 de thierry