=====Migrer son système sur un nouveau disque====

<note warning> ce sujet suppose un bon niveau de connaissances de GNU/Linux et de l'attention dans la réalisation des commandes, certains outils employés peuvent réduire en tas d'octets inertes le plus beau des systèmes...</note>
 
Pour ce sujet nous utiliserons le live-cd [[:System Rescue CD]]

===La situation type===

Vous venez d'acheter un beau disque tout neuf, plus gros/rapide que celui sur lequel est installé votre système, et vous voulez “migrer” votre GNU/Linux adoré sur ce nouveau matériel.
Pour ça il vous faut juste un nouveau disque dur ;-) , et le live-cd System Rescue CD (alias SysRescueCD)

===La mécanique===

Pour ce qui est du matériel il vous suffit de brancher le nouveau disque, comme celui-ci va devenir votre disque principal mettez-le en position “maître” si c'est un disque (p)ata (mettre le cavalier sur le disque au bon endroit et placer le disque en bout de nappe).
S'il s'agit d'un disque sata il suffit de le connecter là où il y a de la place, en prenant soin de s'assurer que le connecteur utilisé est bootable (voir manuel de la carte mère).

===Faire une image du système===

Une fois la mécanique en place il faut démarrer sur le live-cd SysRescueCD, basé sur [[:Gentoo]] ce cédérom offre une excellente reconnaissance matérielle et devrait démarrer sur la grande majorité des machines x86 (des versions ppc et sparc existent).

Le choix du clavier passé vous arrivez à un invite de commande en console où vous tapez “startx” pour lancer le mode graphique, d'un “clic droit > launch” vous démarrez ensuite [[:Gparted]] (le gestionnaire de partitions).

Prenez le temps de bien identifier vos différents disques dans le menu déroulant de Gparted, puis placez-vous sur le nouveau disque pour y créer une table des partitions et le schéma de partitionnement désiré (ici nous supposerons juste que vous disposez d'au moins deux partitions avec un système de fichier Linux).

Dans Gparted afficher votre ancien disque, faite un “clic droit > copier” sur la partition système, puis affichez la partition qui accueillera le système sur votre nouveau disque et faite un “clic droit > coller” dessus. Vous venez de créer une image de votre système avec un simple copier/coller, enfin presque car il reste à appliquer les modifications et à patienter un bon moment.
Procédez de la même manière pour les autres partitions, la swap peut-être simplement créée, elle n'a pas besoin d'être identique à celle d'origine.

Les partitions cibles (sur le nouveau disque) peuvent être plus grandes que celles d'origines, de type primaire ou étendue, et pourront être redimensionnées après l'opération.

Jusque là rien de compliqué !

===Fstab, menu.lst et device.map : quézaco ?===

Vous avez maintenant une image de votre système sur le nouveau disque, c'est ce disque que vous allez indiquer au bios comme périphérique d'amorçage, il prendra donc sous Linux l'identité /dev/hda ou /dev/sda. Si vous souhaitez utiliser des labels pour désigner vos partitions vous pouvez vous référer à cette [[expert:identifier les partitions par label|article de LinuxPedia]].

Il faut maintenant faire en sorte que votre système tienne compte de sa position relative dans la hiérarchie des disques. Si votre ancien système était sur la première partition du disque maître vous pouvez passer à l'étape 3, si en revanche votre ancien système était par exemple sur /dev/sda5 ou quoique ce soit d'autre, ou s'il passe d'un disque (p)ata à un disque sata, procédez comme suit :
Vous devez monter la partition système du nouveau disque pour pouvoir y effectuer des modifications, pour celà vous allez créer un répertoire qui sera le point de montage et effectuer le montage :

<code>mkdir /mnt/system
mount /dev/sda1 /mnt/system</code>

La commande suppose votre nouveau système sur /dev/sda1, il faut vérifier dans Gparted sa position et adapter à votre cas. Il est possible que SysRescueCD lui ait attribué une autre place. Encore une fois si vous voulez éviter le casse-tête des dénominations Udev utilisez des labels.

1°) **Naviguez vers /mnt/system/etc/ et éditer votre fstab pour tenir compte de la nouvelle position des partitions :**

<code>nano /mnt/system/etc/fstab</code>

(nano est un éditeur de texte simple en console, naviguez avec les flèches de direction du clavier, [ctrl o] pour enregistrer les modifications et [ctrl x] pour quitter. Libre à vous d'utiliser vi ou l'éditeur de votre choix)

Là indiquez la position des partitions système, /home ...etc, sans oublier la swap, et commentez ou supprimez les lignes concernant des partitions additionnelles (données, windows...) le temps que tout soit bien en place.

2°) **Naviguez vers /mnt/system/boot/grub/ et éditer votre menu.lst :**

<code>nano /mnt/system/boot/grub/menu.lst</code>

Là, modifez l'entrée concernant votre système principal (la ligne “root=”) pour indiquer la partition système (/dev/sda1 dans notre exemple), ainsi que l'adresse “grub” de la partition racine (dans notre cas (hd0,0)).
Certaines distributions utilisent les options permanentes de grub, dans ce cas il faudra aussi modifier les lignes “kopt=root=” et  “groot=” que vous trouverez au début du fichier menu.lst.

3°) **Modifer le /boot/grub/device.map :**

<code>nano /boot/grub/device.map</code>

Comme vous venez d'ajouter un disque il faut mettre une nouvelle entrée dans ce fichier sur le modèle de celles déjà présentes : 

(hd0)	/dev/sda\\ 
(hd1)	/dev/sdb

Par exemple pour deux disques sata.

Si toutes ces étapes sont pénibles, sachez que l'édition du menu.lst et device.map peuvent être “automatisées” (voir paragraphes suivants). Je préfère cependant les détailler pour la compréhension générale de l'opération et parce que “l'automagie” ne fonctionne pas toujours comme prévue... La modification manuelle du fstab est indispensable.

===Restaurer un Grub en état de marche===

La nouvelle partition système a été montée à l'étape précédente, si ce n'est pas le cas il faut le faire maintenant :

<code>mkdir /mnt/system
mount /dev/sda1 /mnt/system</code>

Ici nous allons utiliser un artifice pour exécuter la commande d'installation de grub comme si nous étions sur votre nouveau système, ceci grâce à “chroot”.

On  "chroot" sur la partition montée. La commande de base est "chroot [root cible]" (par exemple ici "chroot /mnt/system"), mais il y a deux subtilités.

Sysrescuecd n'utilise pas le shell bash, mais zsh, donc si on utilise la commande "chroot" le shell courant va essayer de lancer zsh en exécutant "/bin/zsh" sur le chroot. Nous voulons obtenir un shell bash sur le chroot, parce que c'est celui que je connais ;-) , et parce qu'il est installé en général par défaut (adaptez si vous voulez obtenir un autre type de shell, ou si vous savez que bash n'est pas installé sur le système cible). La commande sera donc :
<code>chroot /mnt/system/ /bin/bash</code>
Pour que ça fonctionne il faut se placer à la racine du chroot car la commande "chroot" ne change pas le répertoire courant (si on tape "chroot /mnt/system /bin/bash" la commande /bin/bash sera exécutée depuis le répertoire de travail (pwd) et non /mnt/system/bin, donc elle échouera).

La version définitive est donc
<code>cd /mnt/system
chroot ./ /bin/bash</code>

Après ça on se retrouve dans un shell bash avec comme /root celui du système monté sur /mnt/system, on peut alors installer grub simplement avec :
<code>grub-install --recheck hd0</code> (l'option “--recheck” est facultative, la notation grub “hd0” peut-être remplacée par /dev/sda si désiré)

Pendant qu'on est dans le chroot on peut exécuter “update-grub” qui dispense théoriquement des étapes 2 et 3 du paragrahe précédent :

<code>update-grub</code>

Si on a manuellement modifié le menu.lst et le device.map, mieux vaut ne pas exécuter la commande pour ne pas risquer de voir "l'automagie" saccager le travail effectué. 

Pour sortir du chroot on tape juste "exit".


Reste à redémarrer et indiquer dans le bios que le nouveau disque est celui de démarrage si nécessaire.


Cette méthode n'est pas la seule possible, il existe plusieurs autres procédures pour arriver au même résultat, celle-ci permet de maîtriser les étapes du processus et d'utiliser “chroot” qui est un artifice très utile pour les dépannages. [[:System Rescue CD]] est une boîte à outils fantastique, n'importe quel live-cd peut faire l'affaire mais celui-ci fonctionne quasiment à tous les coups. [[deb:Knoppix]] est un bon choix également pour la maintenance, le dépannage système, et beaucoup plus ! 
