Duplication de disques durs ou de partitions grace à Linux

Cette page explique la méthode utilisée dans la section de BTS informatique d'Arpajon pour copier un disque dur complet multiboot ou certaines partitions sans avoir à tout réinstaller.

Structure du disque à recopier

En 2007, le découpage des disques durs 40 Go des PC élève de la section de BTS informatique est le suivant :
Partition  Début   Fin    Taille   Id  Système             Utilisation
    1          1     1      8001   83  Linux           Partition /boot Linux
    2          2   731   5863725    7  HPFS/NTFS       Système Windows XP
    3        732  1339   4883760    c  W95 FAT32 (LBA) Disque C: Windows 98
    4       1340  4865  28322595    5  Extended        Partition étendue
    5       1340  1403    514048   82  Linux swap      Partition swap Linux
    6       1404  1424    168651   83  Linux           Partition / Linux caractères ISO-8859-15
    7       1425  1445    168651   83  Linux           Partition / Linux caractères UTF-8
    8       1446  1466    168651   83  Linux           Partition /var Linux
    9       1467  1530    514048   83  Linux           Partition /tmp Linux
   10       1531  2008   3839503   83  Linux           Partition /usr Linux
   11       2009  2135   1020096   83  Linux           Partition /usr/local Linux
   12       2136  2890   6064506   83  Linux           Partition /autres Linux
   13       2891  3565   5421906   83  Linux           Système Linux installation
   14       3566  4087   4192933    c  W95 FAT32 (LBA) Disque D: sous Windows 98
    
Il s'agit d'un disque multiboot.

La partition 1, visible sous Linux comme étant le répertoire /boot , contient les fichiers nécessaires pour choisir de démarrer sur l'un des systèmes d'exploitation suivants :
L'espace disque compris entre les pistes 4088 et 4865 est pour l'instant inutilisé et pourrait héberger d'autres partitions.

Les PC disponibles

Les disques durs des PC de la section informatique sont montés sur des racks amovibles. Tous les disques d'une catégorie de PC sont du même modèle. En exploitation normale, les PC utilisent un disque dur configuré en maitre sur la première nappe IDE. Depuis le système d'exploitation Linux, ce disque est vu sous le nom /dev/hda .

Certains PC dits "de duplication" comportent un 2ème rack connecté sur la 2ème nappe IDE. Ces PC permettent la copie de disque à disque sans avoir à modifier les cavaliers, puisque tous les disques durs restent configurés en maitre aussi bien en exploitation normale que pendant une copie.

Enfin, on dispose de disques durs suplémentaires dits "disques de référence" du même modèle que les autres disques qui permettent de régénérer des disques durs propres.

Copie globale du disque dur

Pour les duplications de disque, beaucoup pensent à un logiciel propriétaire avec un nom du genre "fantome de moto anglaise" ou "moto anglaise fantome".
Ce logiciel s'est révélé rapide pour recopier un disque dur bi-boot.
Par contre, en démarrant sur le disque ainsi recopié, le système d'exploitation linux a démarré normalement, alors que le démarrage du système d'exploitation "fenêtres" se plantait sur un erreur de checksom. Le fantome avait dû passer au travers de la copie de quelques fichiers système.
De plus, "fantome" possède une licence d'utilisation inacceptable. Transposée au logiciel de traitement de texte "mots", cette licence imposerait de repayer un droit d'utilisation pour chaque nouveau document rédigé !

Heureusement, le clonage de disques durs est d'une simplicité enfantine sous Linux. Il suffit d'utiliser une caractéristique de ce système d'exploitation : tous les éléments matériels d'un ordinateur sont vus comme des fichiers.
En utilisant ce principe, le disque dur maitre de la 1ère nappe IDE s'appelle /dev/hda et le disque maitre de la 2ème nappe : /dev/hdc
Si l'ordinateur était équippé de disques SCSI, le premier disque s'appellerait /dev/sda le deuxième /dev/sdb etc...

La copie intégrale du premier disque vers le second se fait en une ligne :
La copie de cette manière d'un disque de 40 Goctets prend quelque dizaines de minutes. Si l'on a prit 2 disques sans défauts du même modèle, on obtiendra ainsi un clone parfait du premier disque.

Le seul problème est qu'avec les outils de base d'UNIX, l'affichage est "silencieux" durant la copie. Pour y remédier, j'ai écrit un petit programme C qui affiche périodiquement la nombre de méga octets copiés.
Pour dupliquer un disque complet, on tapera :

dupli /dev/hda /dev/hdc ou plus simplement dupli hda hdc

Vous pouvez consulter le source de ce programme : dupli.c

Duplication étape par étape

Le seul gros défaut de la duplication intégrale d'un disque dur est que la copie des portions de disques inutilisées prend du temps. De plus, si une seule partition du disque a été endommagée, il n'est ni nécessaire, ni souhaitable de réinitialiser chacun des systèmes d'exploitation à partir du disque de référence.
Nous allons donc voir comment on peut recopier les partitions une par une.

Partitionnement

Pour commencer, on doit partitionner le disque si celà n'a jamais été fait.

Plutôt que de partitionner à la main avec fdisk chacun des disques durs à dupliquer, on peut noter toutes les frappes au clavier nécessaires pour le partitionnement complet d'un disque (en commençant par la commande  o  permettant d'effacer les partitions existantes).
Après avoir recopié ces informations dans un fichier de données, on pourra utiliser ce fichier pour le partitionnement automatique des autres disques durs.

Le shell suivant permet un partitionnement automatique :
A titre purement informatif, voici un dump du fichier .format-40g correspondant à ce qu'on saisirait au clavier sous fdisk .
     SECTEUR : 1    &0
          0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
     00: 6F 0A 6E 0A 70 0A 31 0A 0A 31 0A 6E 0A 70 0A 32     o.n.p.1..1.n.p.2
     10: 0A 0A 37 33 31 0A 6E 0A 70 0A 33 0A 0A 31 33 33     ..731.n.p.3..133
     20: 39 0A 6E 0A 65 0A 34 0A 0A 0A 6E 0A 0A 31 34 30     9.n.e.4...n..140
     30: 33 0A 6E 0A 0A 31 34 32 34 0A 6E 0A 0A 31 34 34     3.n..1424.n..144
     40: 35 0A 6E 0A 0A 31 34 36 36 0A 6E 0A 0A 31 35 33     5.n..1466.n..153
     50: 30 0A 6E 0A 0A 32 30 30 38 0A 6E 0A 0A 32 31 33     0.n..2008.n..213
     60: 35 0A 6E 0A 0A 32 38 39 30 0A 6E 0A 0A 33 35 36     5.n..2890.n..356
     70: 35 0A 6E 0A 0A 34 30 38 37 0A 74 0A 32 0A 37 0A     5.n..4087.t.2.7.
     80: 74 0A 33 0A 63 0A 74 0A 35 0A 38 32 0A 74 0A 31     t.3.c.t.5.82.t.1
     90: 34 0A 63 0A 70 0A 77 0A 0A                          4.c.p.w..
Après ce partitionnement, un redémarrage de l'ordinateur est indispensable pour que les partitions soient prises en compte.

Copie physique de la zone de boot

Après avoir partitionné le nouveau disque, il faut recopier la zone de boot.
Dans le cas de Linux, la copie du premier secteur du disque ne suffit pas. On copiera donc une zone de taille suffisante par la commande :
Attention : La copie d'une zone trop petite (par exemple avec count=20) peut entrainer un comportement très bizarre du disque dur allant jusqu'à empêcher le boot depuis un autre disque dur qui fonctionne correctement seul. Dans ce cas, on pourra réparer le disque endommagé en l'installant en maitre sur la première nappe IDE et en bootant sur une disquette MS-DOS depuis laquelle on lancera la commande fdisk /mbr

Remarque : Cette copie des premiers secteurs du disque dur réinitialisera la table des partitions primaires (numérotées de 1 à 4) ce qui peut faire double emploi avec le partitionnement précédent. Néanmoins, ce partitionnement est nécessaire d'une part pour disposer partitions logiques (numérotées à partir de 5) d'autre part parce que la position des différentes partitions doit être connue dès le démarrage de l'ordinateur, si l'on veut y accéder.

Copie physique des partitions

Pour qu'un système d'exploitation démarre, pendant les premières secondes, il dispose de peu de logiciels en mémoire. Pour faciliter de démarrage, il est nécessaire que certain fichiers soient à un emplacement physique précis dans une partition. C'est le cas :
Les partitions de disques étant vues sous Linux comme des fichiers   /dev/hd<lettre><n°partition> , il suffit d'utiliser la commande dupli décrite au chapitre précédent pour copier ces partitions une par une.

De cette manière :
Si l'on ne dispose pas de la commande dupli , on pourra utiliser la commande dd ou la commande cat comme décrit précédemment.

Remarque : Pour Linux, si l'on a créé une partition /boot dont la taille peut se limiter à une ou 2 pistes, il suffit de faire une copie physique de cette partition. Tout le reste du système d'exploitation Linux pourra être dupliqué par simple copie des fichiers.
En l'absence d'une partition /boot spécifique, il faudra faire la copie physique de la partition /

Copie des fichiers contenus dans les partitions

Pour commencer, il faut créer des systèmes de fichiers sur les partitions.
Exemple : initialisera au format ext3 les partitions 6, à 8, 10 et 11 destinées à contenir les fichiers de / /var /usr et /usr/local .

Ensuite, on pourra monter les partitions initialisées et y copier les fichiers de partition de référence.
Pour celà, la combinaison des commandes find et cpio permet de copier une arborescence de fichiers en respectant leur caractéristiques UNIX (propriétaire, groupe, droits d'accès, date de dernière modification).

On peut ainsi recopier partition par partition. Par exemple, pour copier / (partition 6) seule :
L'option -mount de la commande find permet de ne pas tenir compte des fichiers et répertoires montés dans l'arborescence de /
L'emploi de la commande sort permet un meilleur suivi visuel de la copie des fichiers qui sont classés par ordre alphabétique. De plus, les répertoires sont créés avec les bon droits d'accès avant les fichiers qu'ils contiennent.

On peut aussi profiter du montage imbriqué de certaines partitions sur le disque de référence pour copier plusieurs partitions en une fois. Par exemple :
aura pour effet de recopier en une fois les partitions contenant /usr et /usr/local tout en ignorant le contenu de la partition /usr/partage importée du serveur Callisto.

Note : La commande duplipart a été écrite pour éviter d'avoir à lancer (ou à copier dans un shell) 5 lignes de commandes pour chaque partition à dupliquer.
Elle permet en précisant seulement le nom du répertoire de montage d'une partition, de dupliquer celle-ci dans la partition de même numéro sur le 2ème disque. Ainsi, les duplications de partitions expliquées dans ce chapitre pourront presque se limiter au lancement des 4 commandes suivantes :
En réalité, comme il y a 2 partitions / , Il faudra dupliquer aussi celle sur laquelle on n'a pas booté. Celà peut se faire élégamment par un calcul à partir du numéro de la partition / montée :
Plus simplement, on peut dupliquer les partitions / à partir de leur numéro :
On dupliquera de cette manière la partition 13 contenant un système d'exploitation Linux complet.

Lorsqu'on aura recopié le contenu des différentes partitions, il ne restera plus qu'à initialiser les partitions de données fournies vides Lorsqu'on aura recopié le contenu des différentes partitions, il ne restera plus qu'à initialiser les partitions de données fournies vides (dont la partition /tmp) ainsi que la partition swap.
Si on dispose de plusieurs modèles de PC

Lorsqu'on dispose de plusieurs modèles de PC (cartes mères ou cartes d'extention différentes), il est recommandé de créer un disques de référence par modèle de machine.

Toutefois, pour Linux et Windows 98, il n'est pas nécessaire de faire autant d'installations complètes que de modèles de PC.

Après avoir préparé sur un PC du modèle N°1 un premier disque de référence, on pourra le dupliquer (en utilisant un PC du modèle N° 1 pour la duplication). Ensuite, en installant le nouveau disque sur un PC du modèle N° 2, et en le démarrant successivement sous Linux et Windows 98, la détection de nouveau matériel permettra de mettre à jour les pilotes matériels. Dans le cas de Windows, il pourra être nécessaire d'utiliser un CD de pilotes fourni avec l'ordinateur. On disposera alors d'un disque de référence N° 2 adapté au modèle de machine N° 2.

Malheureusement, les concepteurs de Windows XP n'ont pas voulu que cette adaptation à un parc d'ordinateurs hétérogène soit aussi simple !

Ensuite, en installant chaque disque de référence sur un PC de duplication du modèle pour lequel ils a été prévu, on pourra les reproduire en autant d'exemplaires que de PC de ce modèle.

Si les ordinateur sont dans plusieurs salles avec une imprimante en réseau dans chacune, en préparant des disques de référence distincts pour chaque salle, on pourra créer pour chaque ordinateur des disques durs où l'imprimante de la salle sera celle choisie par défaut.

Configuration de la nouvelle machine

En procédant ainsi, que l'on ait fait une copie physique du disque complet ou que l'on ait travaillé partition par partition, on a obtenu un disque identique à l'original.
Pour faire cohabiter plusieur machines ainsi clonées, il ne restera plus qu'à modifier pour chacune d'entre elles leur nom et leur adresse IP, ceci pour chacun des systèmes d'exploitation installés.

Les différentes machines élève ont pour nom POSTEnn avec nn étant un numéro de 2 chiffres. Leur adresse IP se distingue d'une machine à l'autre par la dernière valeur de la forme 192.168.10.1nn .

Sous Windows, il est nécessaire de passer par l'environnement fenêtré, pour configurer individuellement le nom de la machine et son adresse IP, ce qui demandera au moins 30 secondes par machine sans compter le démarrage et l'arrêt.

Sous Linux, la commande chposte permet de faire le travail. On lancera :
par exemple pour que la machine devienne poste03 :
Le changement de nom et d'adresse IP sera pris en compte au prochain redémarrage.

Pour les autres ordinateurs en réseau, la commande chmachine permet de choisir à la fois le nom de l'ordinateur et le dernier nombre de son adresse IP.

Cliquer ici pour revenir à la page principale