Artisan Numérique

/système/stockage/ Recopier une partition

Dans la série des problématiques classiques lorsque l'on change de disque, arrive rapidement celle du "comment diantre vais-je transférer la partition du MauditOS sans repasser deux heures à tout ré-installer" !! Pas si compliqué en réalité... si c'est fait sous Unix ;-)

Préambule

Pour fixer le cadre, prenons donc deux disques durs de marque et de taille évidemment différentes, avec cependant assez de place pour transférer les données d'un côté vers l'autre. Le second disque est considéré comme vide. Ce n'est pas obligatoire mais dans le cas contraire, c'est à vos risques et périls si chemin faisant vous perdez de précieuses données...

Sur le premier disque nous avons une partition primaire contenant VilainOS. Le but va donc être de créer une partition de même taille sur l'autre disque, d'y recopier notre partition d'origine, et de garder l'espace restant pour une utilisation plus sérieuse. Au final, nous aurons un nouveau disque qui s'amorcera comme l'ancien.

Pour faire tout cela, nous allons utiliser un simple adaptateur USB/IDE. Ainsi le disque sera toujours /dev/sdb et la partition source ou cible /dev/sdb1.

Sauvegarder la partition originale

Malic et Dab (qui interviennent souvent ici) m'avaient parlé de trois outils libres répondant au besoin : CloneZilla, Partimage Is Not Ghost ou plus simplement PING, et justement puisqu'on en parle, PartImage.

Alors certes, comme le sous-entend PING partImage n'est pas Ghost, mais comparé aux deux autres, pour une utilisation ultra épisodique, il a l'avantage de ne pas non plus être une usine à gaz...

partImage s'utilise soit en ligne de commande, soit par une petite interface semi-graphique en nCurse. Le plus simple est de le lancer d'abord la ligne de commande avec les paramètres de base, puis ensuite d'affiner les options avec l'interface.

Pour ce faire, il suffit de l'invoquer comme suit :

rootpartimage -z1 save /dev/sdb1

Cela a pour effet de demander à partImage de créer dans le dossier courant une copie des données de la partition /dev/sdb1 en activant au passage une compression GZIP.

L'interface graphique s'affiche alors et vous pouvez affiner vos besoins en augmentant ou supprimant le taux de compression, en ajoutant ou pas une description, bref tout ce que vous voulez jusqu'au moment où, fin prêt, vous pressez la touche F5 pour démarrer la sauvegarde...

Pour cette opération nous aurions pu utiliser la commande dd avec peu ou prou le même résultat. Mais l'avantage de partImage est qu'il ne sauve que l'espace disque utilisé entraînant un très appréciable gain de temps quant la partition n'est pas pleine. Pour une partition de 10Go pleine à 60%, en USB 2.0, cela m'a pris 10 minutes tout rond. L'astuce par rapport à dd est que partImage connaît le système de fichier que vous cherchez à copier, et sait donc où celui-ci s'arrête. Attention cependant, le support NTFS est plus faible que celui des autres systèmes. Tout cela ne marchera donc bien qu'avec une partition peu fragmentée. Le cas échéant, vous n'avez plus qu'à utiliser.. dd...

Création de la partition cible

L'étape suivante est de recopier les paramètres de notre partition. Le bon outil pour cela est encore parted que nous avions vu pour la transformation d'une machine physique en machine virtuelle. Là il va juste nous servir à récupérer la taille et la position de notre partition d'origine :

parted /dev/hda
(parted)unit s
(parted)print
Model: IBM-DTTA-351010 (ide)
Disque /dev/hda : 19541088s
Taille des secteurs (logiques/physiques): 512B/512B
Table de partition : msdos
Numéro  Début  Fin        Taille     Type     Système de fichiers  Fanions
1        63s   19519919s  19519857s  primary  ntfs                 démarrage
(parted)quit
root#

Les chiffres importants ici sont le début et la fin de notre partition, soit 63 et 19519919. Mais avant de débrancher définitivement notre vieux disque, nous allons lui faucher son amorce. En effet, il ne vous aura pas échappé que notre partition ne démarre qu'au 64ième secteur, ce qui implique un espace de 63 secteur qui précède la partition, soit 512x63=31ko représentant l'amorce du disque. Et vu que c'est une amorce pour PasBeauOS, nous allons devoir la sauvegarder en vue d'une transplantation sur le nouveau disque

rootdd if=/dev/sdb1 of=amorce.image count=63 bs=512

Pour info, lorsque vous démarrez sur disque et que vous avez comme seul résultat une infamante liste du style L99 99 99 99 99 99 99...etc., c'est généralement que l'amorce est quelque peu vrillée...

Bon, il est maintenant possible de débrancher ce disque de l'adaptateur IDE-USB pour le remplacer par notre nouveau support.

La première chose à faire est de détruire les partitions existantes. Cela se fait très simplement avec parted en les listant d'abord avec la commande print, puis en les supprimant une à une avec la commande rm NUMERO.

Ensuite, lorsque le disque est vide de partition, il nous faut recréer celle du disque d'origine en s'aidant du chiffre que nous avons noté en rouge :

rootparted /dev/hda
(parted)unit s
(parted)mkpart primary 63 19519919
(parted)quit
root#

Nous avons maintenant une partition identique sur le second disque.

Recopie des données

Maintenant, pour recopier les données que nous avons précédemment sauvegardé avec partImage, il suffit de l'invoquer dans l'autre sens :

rootpartimage restore /dev/sdb1 native.image.000

Là, c'est fini en 5 minutes.... Dernière étape, insérer la fameuse amorce que nous avons chipé sur le vieux disque.

rootdd if=amorce.image of=/dev/sdb bs=512 count=63
rootsync

Et voilà, le nouveaux disque et sa nouvelle partition sont prêts, et le tout est amorçable comme avant.

Conclusion

Les outils spécialisés de clonnage permettent sûrement de faire tout cela plus rapidement pour peu que l'on ait le temps d'apprendre à les utiliser.. Disons que pour l'usage d'un néophyte, partImage est un vrai plaisir :-)