                     Hard Disk Upgrade Mini How-To

Yves Bellefeuille, [1]yan@ottawa.com
traduction Eric Cano, [2]Eric.Cano@cern.ch

   Version 1.0, 31 janvier 1998, traduction mars 1998

   -------------------------------------------------------------------

   Comment copier un systme Linux d'un disque dur  un autre

   -------------------------------------------------------------------

1. Introduction

   Rcemment, j'ai remplac mon petit disque dur de 249 Mo par un
   disque plus grand. Je voulais transfrer mon Linux entier, LILO
   inclus, de l'ancien au nouveau disque. Voici comment je l'ai fait.

   Dans les explications qui suivent, j'utilise "/dev/hda" pour
   dsigner mon "ancien" disque, "/dev/hda1" dsigne mon ancienne
   partition Linux. "/dev/hdb" dsigne le nouveau disque, et
   "/dev/hdb1" la nouvelle partition Linux.

   Je suppose donc que Linux est sur la premire partition du premier
   disque. Adaptez ceci  votre propre configuration.

   Ce document est bas sur mon propre systme, qui fait tourner une
   Red Hat 4.2, et j'ai test toutes les commandes qui suivent sous
   cette distribution. Je les ai aussi testes sous une Debian 1.3.1
   et une Slackware 3.3, et j'indique quelques diffrences  prendre
   en compte si vous utilisez ces distributions.

   Si ces commandes ne marchent pas correctement sous votre systme,
   faites le moi - NdT l'auteur, pas le traducteur - savoir, en
   indiquant la version de Linux que vous utilisez.

2. Installez les deux disques dans votre systme

   Comme les systmes modernes peuvent accepter quatre priphriques
   "EIDE" sur le contrleur de disque dur, vous ne devriez pas avoir
   de problme pour installer en mme temps les deux disques sur
   votre systme, mme si vous avez d'autres priphriques EIDE. Les
   disques durs et les lecteurs de CD-ROM sont des priphriques EIDE
   typiques. Les lecteurs de disquettes et de bandes sont connects
   le plus souvent sur le contrleur de disquettes plutt que sur le
   contrleur de disque dur.

   Les contrleurs SCSI sont plus souples et peuvent accepter sept
   priphriques. Si vous tes assez chanceux (et riche) pour avoir
   un contrleur SCSI, vous savez sans doute dj cela, et vous savez
   probablement lesquels, parmi vos priphriques, sont SCSI ! Pour
   plus d'information, voyez le [3]SCSI How-To.

   Mme les systmes les plus vieux peuvent accepter deux
   priphriques sur le contrleur de disque dur, donc vous pouvez
   toujours installer deux disques en mme temps. Toutefois, si vous
   avez un autre priphrique install en plus de votre disque dur,
   (par exemple, si vous avez un disque dur et un CD-ROM) vous devrez
   retirer l'autre priphrique pour pouvoir installer le nouveau et
   l'ancien disque dur en mme temps.

   Vous devez configurer les disques comme "matre" ou "esclave" en
   plaant les cavaliers de faon approprie. Vous trouverez souvent
   des informations sur leur configuration sur les disques eux mmes
   ; sinon, consultez les manuels ou les fabricants de vos disques.

   Vous devez aussi informer le BIOS de la prsence des disques et de
   leur "gomtries". En gnral vous entrez dans le Setup du BIOS en
   pressant une touche durant le dmarrage du systme. Voil la
   marche  suivre avec quelques BIOS courants :

   American Megatrends (AMI)

           Touche Suppr pendant l'autotest de dmarrage.

   Award

           Ctrl-Alt-Echap

   Compaq

           Touche F10 aprs que le carr soit apparu dans le coin en
           haut  droite de l'cran  la mise en route.

   Dell

           Ctrl-Alt-Entre

   DTK

           Touche Echap pendant l'autotest de dmarrage.

   IBM PS/2

           Ctrl-Alt-Suppr, puis Ctrl-Alt-Inser quand le curseur est
           dans le coin en haut  droite de l'cran.

   Phoenix

           Ctrl-Alt-Echap, ou Ctrl-Alt-S, ou Ctrl-Alt-Entre

   Autres...

           De nombreux autres systmes ont besoin d'une disquette
           d'installation ou de rfrence

   (Je - NdT : l'auteur - suis intress par des informations sur les
   autres BIOS pour les inclure dans cette liste.)

   Redmarrez le systme et loguez-vous root.

3. Dmontez les partitions non-Linux

   Certains aiment monter les partitions d'autres systmes
   d'exploitation (DOS, Windows, OS/2, etc.) pour pouvoir les
   utiliser sous Linux. Ces partitions devraient tre cres et
   copies sous leur propre systme d'exploitation, et vous devriez
   les dmonter avant de copier votre partition Linux. Par exemple,
   si vous avez une partition monte en /dos, vous devez la dmonter
   avec cette commande :

         umount /dos

   Notez que la commande est "umount", avec le premier "n" qui manque
   par rapport au mot "unmount" - NdT "dmonter" en anglais.

4. Partitionnez le nouveau disque

   Utilisez la commande :

         fdisk /dev/hdb

   pour partitionner le nouveau disque.

   Pour plus d'informations sur le partitionnement, voyez l'
   [4]Installation How-To et le [5]Partitionning Mini How-To.

   Si votre disque a plus de 1024 cylindres, voyez le [6]Large Disk
   Mini How-To. En bref, vous devriez installer tous les fichiers
   requis pour dmarrer Linux dans les 1024 premiers cylindres. Une
   faon de s'en assurer est de crer une petite partition (1Mo ou
   2Mo) juste pour le rpertoire /boot au dbut du disque.
   (spcificit Slackware : comme le noyau est plutt en /vmlinuz
   qu'en /boot/vmlinuz, vous devez mettre les rpertoires / et /boot
   dans cette partition.)

   Les partitions pour les systmes autres que Linux devraient tre
   cres en utilisant leur propre fdisk plutt que celui de Linux.

5. Formatez le nouveau disque.

   Utilisez la commande suivante pour formater le nouveau disque :

         mkfs.ext2 /dev/hdb1

   Pour rechercher les mauvais blocs (dfauts physiques) sur le
   disque, ajoutez l'option -c juste avant "/dev/hdb1".

   (Note : Contrairement  ce qu'indiquent les pages de manuel, la
   commande "mkfs -t ext2 /dev/hdb1" ne recherche pas les blocs
   dfectueux, sous aucune de la Red Hat, Debian ou Slackware.)

6. Montez le nouveau disque

   Crez un rpertoire l o vous monterez le nouveau disque, par
   exemple /new-disk, et montez le :

         mkdir /new-disk
         mount -t ext2 /dev/hdb1 /new-disk

7. Copiez les fichiers de l'ancien disque au nouveau

   Il faut reproduire compltement la structure du disque, liens
   inclus.

   Toutefois, il ne faut pas copier le rpertoire /new-disk, puisque
   a reviendrait  recopier le nouveau disque sur lui-mme !

   De plus, il faut copier le rpertoire /proc sur le nouveau disque,
   mais pas son contenu : "/proc" est un systme de fichiers
   "virtuel" qui ne contient pas de vrais fichiers, mais plutt des
   informations sur les processus qui tournent sur le systme.

   Voici quatre faons de copier un vieux disque sur un nouveau. a
   peut prendre du temps, d'autant plus que le disque est gros ou la
   mmoire peu importante. Vous pouvez vous attendre  copier 10Mo
   par minute, ou mme plus.

   Vous pouvez suivre la progression de la copie en utilisant la
   commande "df" depuis un autre terminal. Si vous tes aussi bon
   public que moi, essayez "watch df" ou "watch ls -l /new-disk" pour
   voir un rapport mis  jour toutes les deux secondes ; utilisez
   Ctrl-C pour arrter l'affichage. Soyez conscient que la commande
   "watch" va ralentir la copie.


 1.      cp -ax / /new-disk

   Ceci est la mthode la plus simple, mais ne fonctionnera que si
   votre systme Linux est sur une seule partition. L'option -a
   prserve autant que faire se peut le systme original. L'option -x
   restreint cp  un seul systme de fichiers. Ceci est ncessaire
   pour viter de copier les rpertoires /proc et /new-disk.


 2.  cd / && cp -a `/bin/ls -1A | egrep -v "^new-disk$|^proc$"` /newdisk

   Ceci va  la racine puis copie tous les fichiers et rpertoires
   sauf /proc et /new-disk. Notez que la premire option aprs ls est
   le chiffre "1", et non la lettre "L" !

   Cette commande devrait fonctionner en toutes circonstances.


 3.       (cd / && tar cpf - . --exclude new-disk --exclude proc) | (cd
          /new-disk && tar xpf -)

   (Ecrire cette commande sur une seule ligne)

   Ceci va dans le rpertoire racine, "archive" tout sauf /proc et
   /new-disk, va dans /new-disk et "dsarchive" tout l. Notez qu'il
   ne doit pas y avoir de slash ("/") avant ou aprs les noms de
   rpertoire dans les options --exclude.

   (Note : L'option -l ne marche pas ici, puisque tar recrerait les
   rpertoires /proc et /new-disk mme s'il ne copie pas leurs
   contenus. C'est pourquoi l'option -l de tar n'a pas le mme
   comportement que l'option -x de cp.)

   Cette mthode est quelque peu plus lente que les autres.


 4.      cp -a /bin /boot /dev /etc /home /lib /lost+found /mnt /root /sbin
         /tmp /usr /var /new-disk

   (Ecrire la commande sur une seule ligne)

   Le dernier rpertoire, /new-disk, est la destination pour la
   commande cp. Tous les autres rpertoires sont les sources. C'est
   pourquoi je copie tous les rpertoires lists dans /new-disk.

   Avec cette mthode, vous faites simplement une liste des
   rpertoires que vous voulez copier. Ici j'ai indiqu tous mes
   rpertoires  l'exception de /proc et /new-disk. Si vous ne pouvez
   utiliser aucune des mthodes pour une raison quelconque, vous
   pouvez toujours utiliser cette commande pour spcifier
   manuellement les rpertoires que vous voulez copier.

   Avec cette mthode seulement, s'il y a des fichiers dans le
   rpertoire racine lui-mme, vous avez besoin d'une autre commande
   pour les copier. En particulier, ceci est requis avec les Debian
   et Slackware, car ces distributions placent des fichiers dans le
   rpertoire racine :

          cp -dp /* /.* /new-disk

   Aprs avoir utilis une mthode parmi les quatre, vous devez aussi
   crer le rpertoire /proc sur le nouveau disque :

         mkdir /new-disk/proc

   A ce point, vous pouvez, si vous le voulez, vrifier la structure
   des fichiers sur le nouveau disque :

         umount /new-disk
         fsck.ext2 -f /dev/hdb1
         mount -t ext2 /dev/hdb1 /new-disk

   Vous pouvez aussi utiliser le script suivant pour comparer les
   deux disques, et vous assurer que les fichiers ont t copis
   correctement.

 #!/bin/sh
 cd /
 for file in `/bin/ls -1A | egrep -v '^new-disk$|^proc$'`
 do
     find $file -xtype f -exec cmp \{\} /new-disk/\{\} \;
 done

   (Spcificit Slackware : une installation de base n'inclut pas les
   commandes "cmp" et "diff", alors vous ne pourrez pas lancer ces
   scripts si vous avez seulement install les fichiers de base.)

   Ceci compare seulement les fichiers normaux, et non les fichiers
   spciaux associs  des priphriques (dans le rpertoire /dev,
   les sockets, etc., car la commande cmp ne fonctionne pas
   correctement avec ceux-ci. Je - NdT l'auteur - serais intress
   par toute suggestion sur le moyen de vrifier ces fichiers
   "spciaux").

8. Mettez  jour "/etc/fstab"

   Si votre nouveau disque n'a pas les mme partitions ou la mme
   organisation que l'ancien, modifiez le fichier /etc/fstab en
   consquence. Souvenez vous que ce fichier se trouve actuellement
   en /new-disk/etc/fstab.

   Assurez vous que les partitions de disque dans la premire colonne
   correspondent  l'organisation que vous aurez sur le nouveau
   disque, une fois que l'ancien disque aura t enlev, et que vous
   ne monterez plus qu'une partition en "/", comme indiqu dans la
   seconde colonne.

9. Prparez LILO pour dmarrer le nouveau disque

   C'est le point compliqu. Je suppose que LILO est install sur le
   bloc principal de dmarrage (master boot record, MBR); ceci semble
   tre la configuration la plus courante.

   Vous voulez installer LILO sur ce qui est actuellement le second
   disque dur. Il est clair que LILO ne peut pas tre lanc depuis le
   second disque dur; toutefois, la documentation de LILO anticipe le
   fait que vous vouliez installer LILO sur le second disque dur, par
   exemple si le premier disque dur doit tre enlev :


      LILO ne peut tre stock sur aucun des emplacements suivants :

      - sur le second disque dur. (A moins que, pour des besoins de
      sauvegarde, si le premier disque dur va tre retir ou dsactiv,
      ou si un autre lanceur, qui est capable de charger les secteurs de
      dmarrage d'autres disques, est install.)

   Toutefois, la documentation n'explique pas la faon d'installer
   LILO sur le second disque dur si le premier va tre retir, et
   j'ai dduit aprs de nombreux essais qu'il n'est pas possible
   d'installer LILO sur le MBR du second disque dur et de le faire
   marcher du premier coup.

   A la place, je suggre d'utiliser une disquette de dmarrage pour
   dmarrer sur le nouveau disque dur la premire fois.

   Insrez une disquette vide, formatez la, crez y un systme de
   fichier et montez la :

          fdformat /dev/fd0H1440
          mkfs.ext2 /dev/fd0
          mount -t ext2 /dev/fd0 /mnt

   (Debian seulement : La commande "fdformat" n'est pas incluse dans
   l'installation de base chez Debian. Si vous n'avez pas cette
   commande, vous pouvez l'ignorer si la disquette est dj formate.
   Dans ce cas, vous devez rechercher les secteurs dfectueux sur la
   disquette en ajoutant l'option "-c" aprs la commande
   "mkfs.ext2".)

   (Debian et Slackware seulement : utilisez la commande "fdformat
   /dev/fd0h1440" avec un "h" minuscule)

   copiez tous les fichiers de /boot sur la disquette :

          cp -dp /boot/* /mnt

   (Slackware seulement : Copiez le fichier /vmlinuz sur la disquette
   de boot; utilisez la commande "cp /vmlinuz /mnt".)

   Crez un nouveau fichier /mnt/lilo.conf comme suit :

 boot=/dev/fd0           # Installe LILO sur la disquette.
 map=/mnt/map            # Emplacement du fichier de correspondance.
 install=/mnt/boot.b     # Fichier  copier sur le secteur d'amorce.
 prompt                  # Faire afficher l'invite "LILO boot:" par LILO.
 timeout=50              # Lancer le systme par dfaut aprs 5 secondes.
                         # (La valeur est en diximes de seconde.)
 image=/mnt/vmlinuz      # Emplacement du noyau Linux sur la disquette.
     label=linux         # Etiquette du systme Linux.
     root=/dev/hda1      # Emplacement de la racine sur le nouveau disque
                         # dur. Mettre en accord avec votre systme.
                         # Notez que vous devez utiliser le nom du futur
                         # emplacement, une fois que l'ancien disque aura
                         # t retir.

   (Debian seulement : Sur la ligne "image", utilisez le vrai nom du
   noyau Linux. Par exemple avec la Debian 1.3.1, utilisez
   "/mnt/vmlinuz-2.0.29".)

   Installez LILO sur la disquette de dmarrage :

          /sbin/lilo -C /mnt/lilo.conf

   L'option "-C" dit  "/sbin/lilo" quel fichier utiliser.

   Dmontez la disquette :

          umount /mnt

   et lancez la procdure d'extinction du systme.

10. Retirez l'ancien disque

   Aprs avoir retir l'ancien disque, n'oubliez pas de modifier les
   cavaliers de configuration du disque, et l'information du BIOS en
   rapport avec les changements.

11. Redmarrez le systme, installez LILO sur le nouveau disque

   Redmarrez le systme depuis la disquette que vous venez de crer.
   Pour cela, vous devez modifier la squence de dmarrage de votre
   BIOS en "A: C:"

   Faites tous les changement ncessaires dans le fichier
   /etc/lilo.conf et lancez /sbin/lilo pour installer LILO sur le
   nouveau disque. Avec une Debian, assurez vous que la ligne "boot"
   indique "/dev/hda" plutt que "/dev/hda1" ou quelque chose de
   similaire si vous voulez installer LILO sur le secteur d'amorce du
   disque dur.

   Vous pouvez essayer de redmarrer votre systme depuis votre
   nouveau disque dur pour vrifier que tout marche bien. Si vous
   avez des problmes, vous pouvez toujours utiliser la disquette
   pour dmarrer votre systme.

12. Remerciements

   Je tiens  remercier tout spcialement le Dr Konrad Hinsen de
   l'Institut de Biologie structurale de Grenoble, France, qui a
   gentiment agit comme mon gourou Linux personnel. Merci aussi 
   Frank Damgaard, Paul Koning, et Josh Rabinowitz, ainsi qu' Scott
   Christensen pour avoir attir mon attention sur quelques
   particularits de la Slackware.

References

   Visible links
   1. mailto:yan@ottawa.com
   2. mailto:Eric.Cano@cern.ch
   3. http://www.freenix.fr/linux/HOWTO/SCSI-HOWTO.html
   4. http://www.freenix.fr/linux/HOWTO/Installation-HOWTO.html
   5. http://www.freenix.fr/linux/HOWTO-vo/mini/Partition
   6. http://www.freenix.fr/linux/HOWTO-vo/mini/Large-Disk
