
                         Hard Disk Upgrade Mini How-To

Yves Bellefeuille, yan@ottawa.com
traduction Eric Cano, 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 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' Installation
   How-To et le Partitionning Mini How-To.

   Si votre disque a plus de 1024 cylindres, voyez le 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_.
