
  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 systeme Linux d'un disque dur a un autre

  1.  Introduction

  Recemment,  j'ai remplace mon petit disque dur de 249 Mo par un disque
  plus grand. Je voulais transferer 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 designer
  mon "ancien" disque, "/dev/hda1" designe mon ancienne partition Linux.
  "/dev/hdb"  designe  le  nouveau  disque,  et  "/dev/hdb1" la nouvelle
  partition Linux.

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

  Ce  document est base sur mon propre systeme, qui fait tourner une Red
  Hat 4.2, et j'ai teste toutes les commandes  qui  suivent  sous  cette
  distribution.   Je  les  ai aussi testees sous une Debian 1.3.1 et une
  Slackware 3.3, et j'indique quelques differences a prendre  en  compte
  si vous utilisez ces distributions.

  Si  ces  commandes  ne  marchent  pas correctement sous votre systeme,
  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 systeme

  Comme  les  systemes  modernes  peuvent  accepter quatre peripheriques
  "EIDE" sur le controleur de disque dur, vous ne devriez pas  avoir  de
  probleme  pour  installer  en  meme  temps  les deux disques sur votre
  systeme, meme si vous avez d'autres peripheriques  EIDE.  Les  disques
  durs  et  les lecteurs de CD-ROM sont des peripheriques EIDE typiques.
  Les lecteurs de disquettes et de bandes sont connectes le plus souvent
  sur le controleur de disquettes plutot que sur le controleur de disque
  dur.

  Les controleurs SCSI  sont  plus  souples  et  peuvent  accepter  sept
  peripheriques.   Si  vous etes assez chanceux (et riche) pour avoir un
  controleur SCSI, vous savez  sans  doute  deja  cela,  et  vous  savez
  probablement  lesquels, parmi vos peripheriques, sont SCSI ! Pour plus
  d'information,         voyez          le          SCSI          How-To
  <http://www.freenix.fr/linux/HOWTO/SCSI-HOWTO.html>.

  Meme  les  systemes les plus vieux peuvent accepter deux peripheriques
  sur le controleur de disque dur, donc vous pouvez  toujours  installer
  deux  disques  en  meme  temps.  Toutefois,  si  vous  avez  un  autre
  peripherique installe en plus de votre disque dur,  (par  exemple,  si
  vous  avez  un  disque  dur  et un CD-ROM) vous devrez retirer l'autre
  peripherique pour pouvoir installer le nouveau et l'ancien disque  dur
  en meme temps.

  Vous  devez  configurer  les  disques  comme  "maitre" ou "esclave" en
  placant les cavaliers de facon appropriee.  Vous trouverez souvent des
  informations sur leur configuration sur les disques eux memes ; sinon,
  consultez les manuels ou les fabricants de vos disques.

  Vous devez aussi informer le BIOS de la presence  des  disques  et  de
  leur  "geometries".  En  general  vous entrez dans le Setup du BIOS en
  pressant une touche durant le demarrage du systeme. Voila la marche  a
  suivre avec quelques BIOS courants :

     American Megatrends (AMI)
        Touche Suppr pendant l'autotest de demarrage.

     Award
        Ctrl-Alt-Echap

     Compaq
        Touche F10 apres que le carre soit apparu dans le coin en haut a
        droite de l'ecran a la mise en route.

     Dell
        Ctrl-Alt-Entree

     DTK
        Touche Echap pendant l'autotest de demarrage.

     IBM PS/2
        Ctrl-Alt-Suppr, puis Ctrl-Alt-Inser quand le curseur est dans le
        coin en haut a droite de l'ecran.

     Phoenix
        Ctrl-Alt-Echap, ou Ctrl-Alt-S, ou Ctrl-Alt-Entree

     Autres...
        De   nombreux   autres   systemes  ont  besoin  d'une  disquette
        d'installation ou de reference

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

  Redemarrez le systeme et loguez-vous root.

  3.  Demontez les partitions non-Linux

  Certains aiment monter les partitions d'autres systemes d'exploitation
  (DOS, Windows, OS/2, etc.)  pour pouvoir les utiliser sous Linux.  Ces
  partitions  devraient  etre creees et copiees sous leur propre systeme
  d'exploitation, et vous devriez les demonter  avant  de  copier  votre
  partition  Linux.  Par  exemple,  si vous avez une partition montee en
  /dos, vous devez la demonter avec cette commande :

          umount /dos

  Notez que la commande est "umount", avec le premier "n" qui manque par
  rapport au mot "unmount" - NdT "demonter" 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 <http://www.freenix.fr/linux/HOWTO/Installation-HOWTO.html>  et
  le   Partitionning   Mini  How-To  <http://www.freenix.fr/linux/HOWTO-
  vo/mini/Partition>.

  Si votre disque a plus de 1024 cylindres, voyez  le  Large  Disk  Mini
  How-To    <http://www.freenix.fr/linux/HOWTO-vo/mini/Large-Disk>.   En
  bref, vous devriez installer tous les fichiers  requis  pour  demarrer
  Linux dans les 1024 premiers cylindres.  Une facon de s'en assurer est
  de creer une petite partition (1Mo ou 2Mo) juste  pour  le  repertoire
  /boot  au debut du disque. (specificite Slackware : comme le noyau est
  plutot  en  /vmlinuz  qu'en  /boot/vmlinuz,  vous  devez  mettre   les
  repertoires / et /boot dans cette partition.)

  Les  partitions  pour  les  systemes  autres  que Linux devraient etre
  creees en utilisant leur propre fdisk plutot 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 (defauts physiques) sur  le  disque,
  ajoutez l'option -c juste avant "/dev/hdb1".

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

  6.  Montez le nouveau disque

  Creez un repertoire la ou 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 completement la structure du disque, liens  inclus.

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

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

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

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

  1.      cp -ax / /new-disk

  Ceci  est la methode la plus simple, mais ne fonctionnera que si votre
  systeme Linux est sur une seule partition. L'option -a preserve autant
  que  faire  se peut le systeme original. L'option -x restreint cp a un
  seul systeme de fichiers. Ceci est necessaire pour  eviter  de  copier
  les repertoires /proc et /new-disk.

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

  Ceci  va  a la racine puis copie tous les fichiers et repertoires sauf
  /proc et /new-disk. Notez que la  premiere  option  apres  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 repertoire racine, "archive" tout sauf /proc et /new-
  disk, va dans /new-disk et "desarchive" tout la. Notez qu'il  ne  doit
  pas  y avoir de slash ("/") avant ou apres les noms de repertoire dans
  les options --exclude.

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

  Cette methode 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 repertoire, /new-disk, est la destination pour la commande
  cp. Tous les autres repertoires sont les sources.  C'est  pourquoi  je
  copie tous les repertoires listes dans /new-disk.

  Avec  cette  methode, vous faites simplement une liste des repertoires
  que vous voulez copier.  Ici  j'ai  indique  tous  mes  repertoires  a
  l'exception  de  /proc et /new-disk. Si vous ne pouvez utiliser aucune
  des   methodes  pour  une  raison  quelconque,  vous  pouvez  toujours
  utiliser  cette  commande  pour specifier manuellement les repertoires
  que vous voulez copier.

  Avec cette methode seulement, s'il y a des fichiers dans le repertoire
  racine  lui-meme,  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 repertoire racine :

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

  Apres avoir utilise une methode parmi les  quatre,  vous  devez  aussi
  creer le repertoire /proc sur le nouveau disque :

          mkdir /new-disk/proc

  A  ce point, vous pouvez, si vous le voulez, verifier 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 ete copies 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

  (Specificite 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 installe les fichiers de base.)

  Ceci compare seulement les  fichiers  normaux,  et  non  les  fichiers
  speciaux  associes  a  des peripheriques (dans le repertoire /dev, les
  sockets, etc., car la commande cmp ne fonctionne pas correctement avec
  ceux-ci. Je - NdT l'auteur - serais interesse par toute suggestion sur
  le moyen de verifier ces fichiers "speciaux").

  8.  Mettez a jour "/etc/fstab"

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

  Assurez  vous  que  les  partitions de disque dans la premiere colonne
  correspondent a l'organisation que vous aurez sur le  nouveau  disque,
  une  fois que l'ancien disque aura ete enleve, et que vous ne monterez
  plus qu'une partition en "/", comme indique dans la seconde colonne.

  9.  Preparez LILO pour demarrer le nouveau disque

  C'est le point complique. Je suppose que LILO est installe sur le bloc
  principal  de demarrage (master boot record, MBR); ceci semble etre 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 etre lance 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 etre enleve :

       LILO ne peut etre stocke sur aucun des emplacements suivants :

       - sur le second disque dur. (A moins que, pour des besoins de
       sauvegarde, si le premier disque dur va etre retire ou desactive,
       ou si un autre lanceur, qui est capable de charger les secteurs de
       demarrage d'autres disques, est installe.)

  Toutefois, la documentation n'explique pas la facon  d'installer  LILO
  sur  le second disque dur si le premier va etre retire, et j'ai deduit
  apres 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  suggere  d'utiliser une disquette de demarrage pour
  demarrer sur le nouveau disque dur la premiere fois.

  Inserez une disquette vide, formatez la, creez y un systeme 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 deja formatee.  Dans ce cas,
  vous devez rechercher les secteurs  defectueux  sur  la  disquette  en
  ajoutant l'option "-c" apres 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".)

  Creez 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 a copier sur le secteur d'amorce.
  prompt                  # Faire afficher l'invite "LILO boot:" par LILO.
  timeout=50              # Lancer le systeme par defaut apres 5 secondes.
                          # (La valeur est en dixiemes de seconde.)
  image=/mnt/vmlinuz      # Emplacement du noyau Linux sur la disquette.
      label=linux         # Etiquette du systeme Linux.
      root=/dev/hda1      # Emplacement de la racine sur le nouveau disque
                          # dur. Mettre en accord avec votre systeme.
                          # Notez que vous devez utiliser le nom du futur
                          # emplacement, une fois que l'ancien disque aura
                          # ete retire.

  (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 demarrage :

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

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

  Demontez la disquette :

           umount /mnt

  et lancez la procedure d'extinction du systeme.

  10.  Retirez l'ancien disque

  Apres  avoir  retire  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.  Redemarrez le systeme, installez LILO sur le nouveau disque

  Redemarrez le systeme depuis la disquette que  vous  venez  de  creer.
  Pour  cela, vous devez modifier la sequence de demarrage de votre BIOS
  en "A: C:"

  Faites tous les changement necessaires 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" plutot
  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 redemarrer votre systeme depuis  votre  nouveau
  disque  dur  pour  verifier  que  tout  marche  bien. Si vous avez des
  problemes, vous pouvez toujours utiliser la  disquette  pour  demarrer
  votre systeme.

  12.  Remerciements

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

