La grande réplication

Ce que nous avons
  • Un disque dur /dev/sda avec deux partitions ext4, et une partition swap.
    • Les partitions ext4 contiennent respectivement / et le contenu de /home.
    • La partition swap est utilisée pour l'hibernation.


Ce que nous voudrions que cela devienne
  • Nous venons de monter un second disque dur, reconnu comme /dev/sdb
    • Ce disque va servir à répliquer le premier disque dur.
    • Il est partitionné avec deux partitions ext4, et une partition de swap.
    • Ses partitions n'ont bien sûr pas la même taille que le premier (le but n'est pas de faire une réplication à l'identique, mais bien de gagner de la place!).


En résumé
  • Nous voulons copier sda vers sdb.
    • sda1 = /
    • sda2 = /home



Procédons !

  • Nous venons de booter sur le disque servant de base à la réplication (sda).
    • Pour l'instant, sdb ne contient rien (je pars toutefois du principe que fdisk est déja passé par là).


Formatage des partitions sur sdb

mkfs.ext4 /dev/sdb1 -L arch_root
mkfs.ext4 /dev/sdb2 -L arch_home

  • Il est important de nommer les partitions (argument -L), car cela permet ensuite de se passer des noms de devices.
    • fstab utilisera les noms de partitions pour le mount.



Montage des partitions de destination

mount /dev/sdb1 /media/hd
mkdir /media/hd/home
mount /dev/sdb2 /media/hd/home

  • A adapter selon vos goûts (et votre schéma de partitionnement) bien entendu.



Re-montage de la partition système en cours d'utilisation
  • Pourquoi re-monter une partition forcément déja montée, puisqu'en cours d'utilisation ?
    • Parce qu'on ne peut pas faire un cp -a / /media/hd directement.
    • En effet, il y aurait copie récursive lorsque cp arriverait sur /media/hd du premier disque.
  • Il faut donc remounter / avec:

mount -o bind / /mnt/root

  • le but du mount -o bind est de donner accès a la partition root brute (sans aucun mount, ni /proc monté).
  • Elle reste bien sûr montée sur / par ailleurs (fort heureusement).



La copie peut débuter

cp -a /mnt/root/* /media/hd/

  • Comme dit précédemment, ça ne copie pas /home. Il est toujours monté à son emplacement d'origine.
  • Nous allons donc le copier à son tour.

cp -a /home/* /media/hd/home/
(puis, eventuellement:)
chown jseb.jseb /media/hd/home/jseb



Cooooopie, c'est fiiiiini ...
  • Avant de démonter, nous créons un fichier à la racine du nouveau disque pour le repérer plus facilement dans grub.

touch /media/hd/nouveau_disque

  • Cette astuce va nous permettre de ne pas commettre d'impair avec grub.


  • On peut ensuite démonter les partitions.

umount /media/hd/home
umount /media/hd



Fignolagisation

  • Cet horrible néologisme qui raye l'émail n'avait que pour but de réveiller les lecteurs assoupis pendant la copie.
    • En effet, tout n'est pas fini: nous voulons que ce disque soit bootable, et que l'hibernation soit toujours fonctionnelle.
  • Avez-vous vérifié que la partition destination système avait le flag bootable, au fait ?


fstab
  • Tout d'abord, occupons nous du fstab présent sur le disque de destination.
  • Si vous n'avez pas changé les noms et les emplacements de vos points de montage, vous pouvez laisser telles les entrée concernées.
  • Il vous faudra cependant au moins modifier l'entrée pour la swap, dont l'id va changer.
  • Vous devriez avoir quelque chose dans ce genre (j'ai isolé ce qui nous intéresse, le vrai fstab est plus long):

LABEL=arch_root / ext4 defaults 0 1
LABEL=arch_home /home ext4 defaults 0 1
#pour monter automatiquement le swap d'après son UUID (et non plus le premier trouvé dans l'ordre d'énumération des devices)
UUID=5e6d9679-16dc-48f7-889b-2c7181c01e15 swap  swap defaults          0      0

  • Quelques explications à propos du swap et son identification par l'UUID.
    • Si on reboote avec l'ancien disque branché, et que le swap n'a pas été précisé dans la config, le premier trouvé (quel que soit le device) sera utilisé.
    • On ne peut pas utiliser les lettres de device (sda, sdb ..) pour indiquer où se trouve le swap, car le nommage est dynamique et ne tombera pas forcément sur le device précisé dans la config.
    • Il faut utiliser l'UUID de la nouvelle partition de swap, obtenu avec "mkswap".
    • Si vous n'avez pas noté l'UUID du disque au moment de la création du swap, vous pourrez le retrouver ici: /dev/disk/by-uuid



Configuration du pingouin gelé
  • Les fichiers de configuration de TuxOnIce se trouvent généralement ici: /etc/hibernate/
  • Dans tuxonice.conf, vous devriez ajouter l'uuid de votre nouveau swap.
    • Ceci évitera l'utilisation du swap de votre ancien disque, si celui-ci est trouvé en premier.

SuspendDevice swap:UUID=5e6d9679-16dc-48f7-889b-2c7181c01e15

  • Ne modifiez pas l'emplacement du swap pour l'hibernation dans la configuration du kernel, cela ne concerne pas TuxOnIce.
    • Donc pas la peine de recompiler un noyau.



grub
  • Contenu potentiel de menu.lst

# /boot/grub/menu.lst:

title  2.6.36-ToI JSeb
root   (hd0,0)
#kernel /boot/vmlinuz26 root=/dev/disk/by-label/arch_root ro VGA=ask
kernel /boot/vmlinuz26 root=/dev/disk/by-label/arch_root ro resume=swap:UUID=5e6d9679-16dc-48f7-889b-2c7181c01e15 VGA=ask
initrd /boot/kernel26.img

  • On remarquera que le root pointe sur mon premier disque.
  • La copie s'est faite vers sdb (dans l'ordre des énumérations).
    • Ce n'est pas grave: sdb devient tout simplement sda.
    • Vu que les devices ne sont pas utilisés dans la suite du boot (repérage par nom de partition et par UUID pour le swap), tout fonctionne.


  • Ensuite, lancez grub en root.

grub> find /nouveau_disque
 (hd1,0)

grub> root (hd1,0)
 Filesystem type is ext2fs, partition type 0x83

grub> setup (hd1)

  • A noter l'astuce du find, sur le fichier précédemment créé à la racine.
    • Ceci permet de repérer à coup sûr le disque.


  • Voila, grub est installé sur le MBR.
    • pour installer sur sdb1 , ce que certains préfèrent , il aurait fallu faire:
    • setup (hd1,0)



C'est dans la boite

  • Que dire de plus ?
  • reboot ! Et croisez les doigts, on ne sait jamais.