Winnt is not NT

Comment transférer un système Linux sur un autre disque sans devoir réinstaller

Posté le 03/01/2015

En ce début d’année 2015, j’ai voulu revoir un peu l’organisation de mes disques dur.

En effet, j’avais 2 partitions dédiées à Windows chacune sur un disque.La première qui contient le système étant sur un disque de 80 Go partitionné entre Debian et Windows sur sda.

La seconde, en fat 32, se trouvais en fin d’un disque de 2 To normalement dédié au stockage sur sdb.

Bref, c’était le bazar avec les disques et les partitions.

Surtout que bien sûr, la seconde partition Windows contenait quelques jeux (j’utilise Windows exclusivement pour, rarement, jouer) que je n’avais pas envie de réinstaller (plusieurs heures de téléchargement et installation c’est pour le moins dissuasif).

De plus, mon système Debian est sur un disque SSD que j’ai récupéré (au passage ça booste mais dommage que les capacités soient si réduites et que cela reste encore cher) et lors de la préparation de celui-ci j’avais omis d’aligner la partition sur les cylindres ce qui n’est pas conseillé d’après ce que j’ai pu lire (et cela semble ralentir sensiblement les transferts).

J’ai donc pris le taureau par les cornes et remis de l’ordre dans tout cela.

Mon objectif étant d’utiliser entièrement le disque de 80 Go pour Windows et mes autres disques pour Linux.

J’ai donc commencer par regarder la place utilisée sur chacune des partitions soit moins de 20 Go pour la plus remplie. Et voilà que je m’aperçois que sda contient 3 partitions :

partition Windows / partition non formatée / partition swap Linux.

J’ai comme l’impression que j’avais dû vouloir remettre de l’ordre déjà et remis à plus tard en cours de route pour une raison oubliée aujourd’hui.

Précautions à prendre

Avant de commencer mes manipulations je me suis donc muni d’une feuille de papier et pour chacun de mes disques j’ai reporté les informations des partitions (avec le le nom de chaque disque pour éviter toute erreur). Puis sur la deuxième moitié de la feuille, j’ai noté l’organisation cible de mes disques.Une fois ceci fait, j’ai graver la dernière version de System Rescue Cd afin d’avoir un live cd me permettant d’effectuer les opération que j’envisageais.

Voici donc la procédure que j’ai suivi pour remettre de l’ordre dans tout cela.

Les différentes étapes

Première étape : transfert des données de sdb2 sur sda2

Avec Gparted, j’ai commencé par supprimer les partitions sda2 et sda3 du disque contenant Windows. Puis, j’ai agrandi la partition ntfs sda1 en laissant 30 Go pour une nouvelle partition fat32 sda2 destinée à accueillir l’intégralité des fichiers se trouvant sur sdb2.

Une fois cela fait, j’ai monté la partition sdb2 contenant les jeux que je souhaitais basculer sur la seconde partition de sda.

Pour le transfert des données rien de bien difficile les commandes suivantes font parfaitement le travail.

mkdir /mnt/sda2 # création du répertoire sda2 dans /mnt

mkdir /mnt/sdb2 # création du répertoire sdb2 dans /mnt
mount -t vfat /dev/sda2 /mnt/sda2 # montage de la partition sda2 dans /mnt/sda2 en fat 32
mount -t vfat /dev/sdb2 /mnt/sdb2 # montage de la partition sdb2 dans /mnt/sdb2 en fat 32
cp -rav /mnt/sdb2/ /mnt/sda2 # copie de tous les fichiers et répertoire de façon récursive de sdb2 vers sda2
umount /dev/sda2 # démontage de la partition sda2
umount /dev/sdb2 # démontage de la partition sdb2
rmdir /mnt/sda2 # suppression du répertoire /mnt/sda2
rmdir /mnt/sdb2 # suppression du répertoire /mnt/sdb2

Et voilà c’est tout pour le transfert des données de la partition de jeux Windows. Lors de mon premier redémarrage, Windows a effectué une vérification du système de fichier. Rien d’anormal en soit puisque je suis intervenu sur le système de fichier lors de l’agrandissement de la partition.

La partition contenant les jeux a gardée la même lettre de lecteur ce qui fait que les jeux ont directement fonctionné sans aucun souci, une fois la vérification du système de fichier et l’indispensable redémarrage effectués.

Deuxième étape : refaire la partition de mon disque SSD afin de l’aligner sur les cylindres

Cette partition est sur le disque sdd et ne dépasse pas les 20 Go d’utilisation. Je vais donc réutiliser la partition sdb2, préalablement formatée en ext4 afin de conserver toutes les informations liées au système de fichier.

On relance donc Gparted et on formate la partition sdb2 en ext4. Une fois la partition formatée on va transférer l’intégralité du répertoire racine (les répertoires home sont sur un disque dédié) de sdd1 vers sdb2.

mkdir /mnt/sdb2 # création du répertoire sdb2 dans /mnt

mkdir /mnt/sdd1 # création du répertoire sdd1 dans /mnt
mount -t ext4 /dev/sdb2 /mnt/sdb2 # montage de la partition sdb2 dans /mnt/sdb2 en ext4
mount -t ext4 /dev/sdd1 /mnt/sdd1 # montage de la partition sdd1 dans /mnt/sdd1 en ext4
cp -rav /mnt/sdd1/ /mnt/sdb2 # copie de tous les fichiers et répertoire de façon récursive de sdd1 vers sdb2
umount /dev/sdb2 # démontage de la partition sdb2
umount /dev/sdd1 # démontage de la partition sdd1

Bien, nous avons sauvegardé avec ces quelques commandes notre disque système Linux.

Maintenant, nous pouvons supprimer la partition sdd1, puis la recréer en prenant garde à sélectionner l’alignement sur les cylindres à la place de l’alignement sur les Mibs dans l’écran de choix de Gparted.

Une fois ceci fait, il faut rapatrier le système sur sdd1. On effectue donc les même manipulations que précédemment sauf pour la commande cp dont les cibles et destinations sont inversées.

mkdir /mnt/sdb2 # création du répertoire sdb2 dans /mnt

mkdir /mnt/sdd1 # création du répertoire sdd1 dans /mnt
mount -t ext4 /dev/sdb2 /mnt/sdb2 # montage de la partition sdb2 dans /mnt/sdb2 en ext4
mount -t ext4 /dev/sdd1 /mnt/sdd1 # montage de la partition sdd1 dans /mnt/sdd1 en ext4
cp -rav /mnt/sdb2/* /mnt/sddd1 # copie de tous les fichiers et répertoire de façon récursive de sdb2 vers sdd1
umount /dev/sdb2 # démontage de la partition sdb2
umount /dev/sdd1 # démontage de la partition sdd1
rmdir /mnt/sdb2 # suppression du répertoire /mnt/sdb2
rmdir /mnt/sdd1 # suppression du répertoire /mnt/sdd1

Et voilà encore une bonne chose de faite. Maintenant mon système est sur un disque SSD dont la partition est parfaitement alignée sur les cylindres comme préconisé par mes lectures sur le sujet.

Troisième étape : recréer une swap sur sdb

Maintenant, j’ai une partition ext4 de 30 Go à la fin de sdb qui ne me sert à rien. Et, je n’ai plus de partition de swap pour Linux. On va donc de nouveau faire appel à Gparted pour supprimer cette partition de 30 Go et installer une swap.

À ce moment là, on se dit que tout est terminé et qu’il ne reste plus qu’à rebooter notre PC.

Sauf que, puisque j’en suis à faire mumuse avec les partitions, autant tester une fonctionnalité que j’ai envie d’utiliser depuis un moment :

Les labels dans fstab

Cette possibilité offerte par fstab permet d’utiliser les étiquettes attribuées aux partitions comme identifiant de celles-ci.

Ceci implique, bien sûr, qu’elles soient uniques et qu’elles ne dépassent pas 16 caractères afin de ne pas être tronquées.

On va donc relancer notre ami Gparted afin d’attribuer des étiquettes aux partitions.

Je sais les étiquettes choisies n’ont rien d’original, mais l’intérêt est de tout de suite comprendre à quoi correspond une partition en lisant simplement son label dans fstab.

Une fois les étiquettes attribuées à nos partitions. On monte la partition sdd1. Puis avec notre éditeur préféré, on modifie le fichier fstab sans oublier de sauvegarder les modifications.

LABEL=racine    /                       ext4            defaults,relatime,errors=remount-ro     0       1
LABEL=swap      none                    swap            sw                                      0       0
LABEL=home      /home                   ext4            defaults                                0       2
LABEL=backup    /home/moi/backup      ext4            defaults                                0       2

L’un des intérêts d’utiliser les labels à la place des UUID, c’est que notre fichier fstab est beaucoup plus lisible comme le montre l’exemple qui suit. De plus, cette façon de faire est celle conseillée dans le man de la commande mount car les étiquettes sont plus facilement robustes, lisibles et portables. Et, une erreur de saisie est beaucoup plus rapidement repérable avec les labels qu’avec les UUID.

LABEL=racine    /                       ext4            defaults     0       1
UUID=8244710a-5cce-49ad-8b93-a92b5d2e53a0      /        ext4        defaults           0    1

Réinstaller grub

À partir du moment ou nous touchons aux partitions, grub perds ses repères. Ceci nous oblige donc à effectuer une réinstallation (pour plus de sûreté).

mkdir /mnt/sdd1                     # création du répertoire sdd1 dans /mnt
mount /dev/sdd1 /mnt/sdd1           # montage de la partition sdd1 dans /mnt/sdd1
mount -o bind /dev /mnt/sdd1/dev    # remontage de la hiérarchie /dev dans /mnt/sdd1/dev
mount -t proc none /mnt/sdd1/proc   # montage de proc dans /mnt/sdd1/proc
cd /mnt/sdd1                        # on se déplace dans sdd1
chroot /mnt/sdd1 /bin/bash          # on s'assure que la commande qui suit sera lancée avec le système installé
                                    sur le disque dur
grub-install /dev/sda               # installation de grub sur le premier disque
exit                                # on sort su chroot

Nous en avons pratiquement terminé.

La dernière étape consiste à rebooter la machine, enlever le live cd et lancer le système Linux du disque dur.

Normalement, tout devrai bien se passer. Une fois, le système du disque dur actif ouvrez un terminal et lancez en root la commande update-grub afin de finir la mise à jour de grub.

Chez moi cela a rajouter deux lignes au menu grub qui avaient disparues suite à la réinstallation. La première ligne ajoutée étant celle qui permet d’accéder aux anciens noyaux. La seconde est celle qui me permet de booter sur Windows Seven. Je ne sais toujours pas pourquoi j’ai 2 lignes pour Windows dont une qui plante mais ce n’est pas très important puisque tout est fonctionnel. Je m’y pencherais sans doute un jour, histoire de comprendre le pourquoi.

J’espère que cet article pourra vous servir un jour.

Personnellement, j’ai toujours trouvé pratique de pouvoir si aisément déplacer son système d’un disque à un autre en sachant que celui-ci restera fonctionnel. Ce genre d’opération est bien plus compliquée avec windows.

Commentaires

comments powered by Disqus