Outils pour utilisateurs

Outils du site


expert:migrer_son_systeme_sur_un_nouveau_disque

Migrer son système sur un nouveau disque

ce sujet suppose l'utilisation d'outils de partitionnement, qui peuvent réduire en tas d'octets inertes le plus beau des systèmes… Soyez attentifs, prévoyez du temps

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, n'importe quel autre live-cd peut convenir.)

Un signe $ précède les commandes qui ne nécessitent pas de droits administrateur ; un signe # précède celles qui nécessitent des droits administrateur (ces signes ne font PAS partie des commandes). Les lignes qui ne commencent pas par un signe $ ou # correspondent au résultat de la commande précédente.
Les touches utilisées sont indiquées entre crochets, exemple [ctrl] pour la touche “contrôle”

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, “maître” ou “cable select”, et placer le disque en bout de nappe IDE).
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é permet le démarrage (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).

Pour les machines x86_64, tapez “rescue64” à l'invite de démarrage pour lancer le noyau 64bit, ceci est indispensable pour utiliser un “chroot” sur un système 64bits (voir plus bas).
Une autre option de démarrage intéressante pour les francophones: “setkmap=fr , vous pourrez toutefois choisir le clavier français plus tard.

Le choix du clavier passé vous arrivez à un invite de commande en console où vous tapez “startx” pour lancer le mode graphique, et 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.

Dans Gparted afficher votre ancien disque, faite un “clic droit > copier” sur la partition système, puis affichez 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) pourront être redimensionnées après l'opération.

Jusque là rien de compliqué !

Il existe de nombreux autres moyen de créer une image de votre système, parmi lesquelles partimage (disponible sur SysRescueCD), Clonezilla-live, ou encore la commande “dd”. On peut également créer des partitions vides, les monter et copier l'ensemble des fichiers avec les commandes “rsync -aHAXP source cible” ou “cp -av source cible”.

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. Comme le nouveau disque est en position “maître” il prendra certainement sous Linux l'identité /dev/hda ou /dev/sda. Avec des disques sata la situation peut-être un peu plus aléatoire. Si vous souhaitez éviter les problèmes d'identification des partitions utilisez des labels pour désigner vos partitions, ou les UUID.

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, car sa position n'ayant pas changé il n'y a aucune modification à faire. Si en revanche votre ancien système était par exemple sur /dev/sda5, ou quoique ce soit d'autre, et change de position, ou encore 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 cela vous allez créer un répertoire qui sera le point de montage et effectuer le montage :

# mkdir /mnt/system
# mount /dev/sda1 /mnt/system

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 ou UUID.

  • Naviguez vers /mnt/system/etc/ et éditer votre fichier fstab pour tenir compte de la nouvelle position des partitions :
# nano /mnt/system/etc/fstab

(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.

Si votre disque était un (p)ata et le nouveau un sata, il y a des chances pour que la dénomination passe de “hda1” à “sda1”, n'oubliez pas d'adapter le fichier fstab à cette nouvelle notation si nécessaire.
Si vous utilisez les UUID pour identifier vos partitions, n'oubliez pas que si vous conservez votre ancien disque et votre ancien système dans l'ordinateur, les anciennes partitions vont porter les mêmes UUID que leurs images. Le plus simple est de changer les UUID sur le nouveau ou l'ancien disque, et d'adapter le contenu du fichier fstab. Pour changer l'UUID de la partition /dev/sda1 faite :

# tune2fs -U time /dev/sda1

Pour plus de détails consultez la page sur les UUID.

La même précaution s'applique pour les labels, voyez la page sur les labels pour plus de détails.

Quand tout est en ordre, jetez un œil au fichier /etc/mtab, il est normalement dynamiquement mis à jour par “mount” et reflète les systèmes de fichiers montés, mais si vous y trouvez une référence à votre partition racine autant l'adapter au nouveau schéma de partitionnement.

  • Naviguez vers /mnt/system/boot/grub/ et éditer votre fichier menu.lst :
# nano /mnt/system/boot/grub/menu.lst

Là, modifiez 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.

Si vous utilisez Grub2, il n'est pas nécessaire de modifier le fichier de configuration /boot/grub/grub.cfg à ce stade, en revanche il peut être utile de modifier /etc/default/grub si vous y avez inclue des options permanentes.

  • Modifer le /boot/grub/device.map :
# nano /boot/grub/device.map

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 :

# mkdir /mnt/system
# mount /dev/sda1 /mnt/system

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”.

:!: Si vous avez une partition /boot séparée, il est indispensable de la monter pendant cette opération. Montez votre partition /boot sur /mnt/system/boot.

Pour que le chroot fonctionne, vous devez également monter ”/dev“ afin de rendre accessible les périphériques à l'intérieur du “chroot”, utilisez :

# mount -o bind /dev /mnt/system/dev

Quand tout est prêt, on “chroot” sur la partition montée. La commande de base est “chroot [système_cible]” (par exemple ici “chroot /mnt/system”), mais il y a une subtilité.

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:

# chroot /mnt/system/ bin/bash

Après ça on se retrouve dans un shell bash avec comme /root celui du système monté sur /mnt/system, on peut également monter les partitions présentent dans le fstab du système chrooté avec “mount -a”.

On peut ensuite (ré)installer grub simplement avec :

# grub-install --recheck "(hd0)"

(l'option ”--recheck“ est facultative, la notation grub ”(hd0)“ peut-être remplacée par /dev/sda si désiré). Cette commande est valable pour “grub” (“legacy”) ou “grub2”.

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

# update-grub

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 “grub2” la commande sera “update-grub2” (“update-grub” est parfois un lien vers cette commande), ou encore “grub-mkconfig” qui s'utilise avec l'option ”-o“ pour désigner l'emplacement du fichier “grub.cfg” :

# grub-mkconfig -o /boot/grub/grub.cfg


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.

Notes sur les LABEL et UUID

Je l'ai déjà évoqué précédemment, pour éviter les problèmes d'identification des partitions, il est recommandé d'utiliser des labels ou les uuid dans le fstab et le menu grub. Soyez cependant vigilant car un clone de partition aura le même label/uuid que l'original, ce qui peut créer des situations très confuses lors d'un redémarrage. Ces cas et leurs solutions sont couverts dans les articles sur les labels et les UUID.

Cette méthode n'est évidemment 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. Knoppix est un bon choix également pour la maintenance, le dépannage système, et beaucoup plus ! Également utilisables Parted Magic, GRML

Liens

expert/migrer_son_systeme_sur_un_nouveau_disque.txt · Dernière modification: 2014/05/09 18:56 (modification externe)