Lorsque l’on a passé des heures et des heures à installer des logiciels, configurer un système, trier des fichiers, et que l’on veut changer de disque dur ça fait vraiment mal… Que l’on soit sous windows ou sous Linux, ça met tout le monde d’accord !

Une solution peut être de tout simplement copier/coller toute l’arborescence dans le nouveau disque mais malheureusement ça ne fonctionne pas… La raison est simple : il existe une petite partie du disque qui contient les informations permettant à votre système de démarrer, et auxquelles ne pouvez pas accéder en vous baladant avec votre souris. Ces informations sont contenues au « début » de votre disque, dans une section que l’on nomme le MBR (Master Boot Record). Le copier/coller n’incluant pas le MBR, vous vous retrouvez avec un système qui ne démarre pas.

Un autre problème se pose : si vous avez des partitions ? Plein de petites partitions, avec un magnifique dual boot en prime ! Vous êtes obligé, avant de faire la copie, de créer et de les formater sur le disque cible. Il vous est conseillé d’être patient dans ce cas !

Ces inconvénients sont fort embarrassants, parce que le principe de la copie de disque, c’est appuyer sur bouton, glander pendant un certain temps, et récupérer à la fin une copie conforme du disque d’origine, MBR et partitionnements compris, quels que soient les formats de fichiers (windows, linux ou autre).

La solution est vraiment très simple, et c’est précisément parce qu’elle vraiment très simple que ça m’a gonflé d’y passer des heures. Par solidarité pour mes camarades d’infortune, je vais exposer la démarche que j’ai trouvé.

Linux

Tout d’abord vous devez vous procurer une version bootable de Linux (pour démarrer un ordinateur avec Linux sans l’installer). Celle que j’utilise est Mageia, mais il y en a beaucoup d’autres. Pourquoi ? Parce que vous ne pouvez démarrer en utilisant les disques que vous allez copier, si votre système a le malheur d’écrire sur un des disques pendant la copie, je peux vous assurer que le duplicata sera une boucherie. Le fait de démarrer depuis une version bootable de Linux vous permet de lire les données de vos disques durs sans toucher aux données qu’ils contiennent.

Les deux logiciels que nous utiliserons, et qui sont fournis systématiquement avec Linux, seront fdisk et dd. Attention, ce sont des machines à tuer ! Toute erreur transformera vos disques durs en champs de bataille ! Il faudra donc les utiliser avec les plus grandes précautions.

Téléchargez, gravez (il existe des versions pour clé USB), et redémarrez votre système sous Linux. Une fois cela fait, ouvrez un terminal (sous Mandriva : Menu -> outil -> konsole) et saisissez la commande su (inutile sur les Debian et dérivées…). Cette commande vous permet d’exécuter des commandes d’administration plus ou moins dangereuses…

Identifier les disques

On arrive à la partie délicate. Linux utilise pour lister les disques des expressions comme /dev/sda ou encore /dev/hdba Vous trouverez toujours /dev/ en préfixe quelquefois un numéro à la fin, de sorte que les noms de vos disques seront de la forme /dev/disquepartition ou /dev/disque

Par exemple, si vous disposez d’un disque dur contenant 3 partitions, le disque pourrait être représenté par /dev/sdb et chacune des partitions par /dev/sdb0 /dev/sdb3 /dev/sdb4
Attention, s’il n’y a pas de numéro à la fin de l’expression, elle représente le disque entier, avec les partitions qu’il contient.

Pour repérer vos disques, saisissez fdisk -l dans le terminal. Vous verrez s’afficher la liste des partitions, regroupées par disque et avec pour chacune sa taille et son type.

[guest@localhost ~]$ su
[root@localhost guest]# fdisk -l

Disque /dev/sda: 120.0 Go, 120034123776 octets
255 heads, 63 sectors/track, 14593 cylinders
Units = cylindres of 16065 * 512 = 8225280 bytes
Disk identifier: 0x1477763c

Périphérique Amorce Début Fin Blocs Id Système
/dev/sda1 * 1 3423 27495216 6 FAT16
/dev/sda2 3424 14593 89723025 5 Extended
/dev/sda5 3424 3694 2176776 82 Linux swap / Solaris
/dev/sda6 3695 12366 69657808+ 83 Linux
/dev/sda7 12367 14593 17888346 b W95 FAT32

Disque /dev/sdb: 2000.3 Go, 2000398934016 octets
255 heads, 63 sectors/track, 243201 cylinders
Units = cylindres of 16065 * 512 = 8225280 bytes
Disk identifier: 0x24796452

Périphérique Amorce Début Fin Blocs Id Système
/dev/sdb1 * 1 243201 1953512001 83 Linux

Repérez vos disques dans ce fatras et surtout ne vous gourez pas.

Glander

Une fois vos deux disques repérés et tout doute levé, nous allons pouvoir faire la copie.

Comme dernière précaution je souhaiterais porter à votre connaissance le fait que dd est la commande la plus stupide qui soit : elle lit des octets sur un disque et les écrit sur un autre, sans essayer de comprendre ce qu’elle fait. Elle va brutalement copier tout ce qu’elle trouvera sur le disque : table de partitions, MBR, etc. Tout ça sans se poser de question et tout type de partitions confondues. Rien ne se mettra en travers de votre chemin si vous lui donnez de mauvaises indications : elle transformera un de vos disques durs en bouillie sans vous demander votre avis.

Pour rester dans le mode avertissement, vous devez vous assurer qu’aucun des deux disques n’est monté. Si vous utilisez dd alors qu’un autre logiciel est en train d’écrire sur un des deux volumes, des choses indescriptibles se produiront. En même temps si vous utilisez un OS bootable, il y a peu de chance que ces disques soient montés.

La commande dd s’utilise ainsi :

dd if=source of=destination

Si par exemple on souhaite recopier /dev/sca dans /dev/sdb, il suffit de faire

dd if=/dev/sca of=/dev/sdb

Attention, il s’agit d’une copie de disque, et non de partitions ! Si vous mettez des noms de partition en argument, les mots me manqueraient pour décrire le chaos qui s’ensuivrait ! Et notez bien que comme l’intégralité du disque source est recopié dans la cible, il faut que la cible soit plus grande que la source.

Maintenant vous avez largement le temps d’aller casser la croûte, parce que ça peut prendre plusieurs heures…