<!-- Mini Howto Hard disk upgrade
Auteur : Yves Bellefeuille (yan@ottawa.com)
Traducteur : Eric Cano (eric.cano@cern.ch)
-->
<!doctype linuxdoc system>
<article>
<title> Hard Disk Upgrade Mini How-To
<author> Yves Bellefeuille, <tt/<htmlurl url="mailto:yan@ottawa.com"
name="yan@ottawa.com">/ <newline>
traduction Eric Cano, <tt/<htmlurl url="mailto:Eric.Cano@cern.ch"
name="Eric.Cano@cern.ch">/
<date> Version 1.0, 31 janvier 1998, traduction mars 1998
<abstract>
Comment copier un système <bf/Linux/ d'un disque dur à un autre
</abstract>
<sect> Introduction
<p>
Récemment, j'ai remplacé mon petit disque dur de 249 Mo
par un disque plus grand. Je voulais transférer mon <bf/Linux/
entier, <tt/LILO/ inclus, de l'ancien au nouveau disque.
Voici comment je l'ai fait.
<p>
Dans les explications qui suivent, j'utilise <sq><tt>/dev/hda</tt></sq>
pour désigner mon <sq>ancien</sq> disque,
<sq><tt>/dev/hda1</tt></sq> désigne mon ancienne partition
<bf/Linux/.
<sq><tt>/dev/hdb</tt></sq> désigne le nouveau disque,
et <sq><tt>/dev/hdb1</tt></sq> la nouvelle partition <bf/Linux/.
<p>
Je suppose donc que <bf/Linux/ est sur la première partition
du premier disque.
Adaptez ceci à votre propre configuration.
<p>
Ce document est basé sur mon propre système, qui fait
tourner une <bf/Red Hat 4.2/, et j'ai testé toutes les
commandes qui suivent sous cette distribution.
Je les ai aussi testées sous une <bf/Debian 1.3.1/
et une <bf/Slackware 3.3/, et j'indique quelques différences
à prendre en compte si vous utilisez ces distributions.
<p>
Si ces commandes ne marchent pas correctement sous votre système,
faites le moi - <em/NdT l'auteur, pas le traducteur/ - savoir, en indiquant
la version de <bf/Linux/ que vous utilisez.
<sect> Installez les deux disques dans votre système
<p>
Comme les systèmes modernes peuvent accepter quatre
périphériques "EIDE" sur le contrôleur de disque dur, vous ne devriez
pas avoir de problème pour installer en même temps les deux
disques sur votre système, même si vous avez d'autres périphériques
EIDE. Les disques durs et les lecteurs de CD-ROM sont des périphériques
EIDE typiques. Les lecteurs de disquettes et de bandes sont
connectés le plus souvent sur le contrôleur de disquettes
plutôt que sur le contrôleur de disque dur.
<p>
Les contrôleurs SCSI sont plus souples et peuvent accepter sept périphériques.
Si vous êtes assez chanceux (et riche) pour avoir un contrôleur SCSI,
vous savez sans doute déjà cela, et vous savez probablement
lesquels, parmi vos périphériques, sont SCSI ! Pour plus d'information,
voyez le
<url url="http://www.freenix.fr/linux/HOWTO/SCSI-HOWTO.html"
name="SCSI How-To">.
<p>
Même les systèmes les plus vieux peuvent accepter deux périphériques
sur le contrôleur de disque dur, donc vous pouvez toujours installer
deux disques en même temps. Toutefois, si vous avez un autre périphérique
installé en plus de votre disque dur, (par exemple, si vous avez
un disque dur et un CD-ROM) vous devrez retirer l'autre périphérique pour
pouvoir installer le nouveau et l'ancien disque dur en même temps.
<p>
Vous devez configurer les disques comme "maître" ou "esclave" en
plaçant les cavaliers de façon appropriée.
Vous trouverez souvent des informations sur leur configuration
sur les disques eux mêmes ; sinon, consultez les manuels ou
les fabricants de vos disques.
<p>
Vous devez aussi informer le BIOS de la présence des disques
et de leur "géométries". En général
vous entrez dans le Setup du BIOS en pressant une touche durant
le démarrage du système. Voilà la marche à
suivre avec quelques BIOS courants :
<descrip>
<tag/American Megatrends (AMI)/
Touche <em/Suppr/ pendant l'autotest de démarrage.
<tag/Award/
<em/Ctrl-Alt-Echap/
<tag/Compaq/ Touche <em/F10/ après que le carré soit
apparu dans le coin en haut à droite de l'écran à
la mise en route.
<tag/Dell/
<em/Ctrl-Alt-Entrée/
<tag/DTK/
Touche <em/Echap/ pendant l'autotest de démarrage.
<tag>IBM PS/2</tag>
<em/Ctrl-Alt-Suppr/, puis <em/Ctrl-Alt-Inser/ quand le curseur est
dans le coin en haut à droite de l'écran.
<tag/Phoenix/
<em/Ctrl-Alt-Echap/, ou <em/Ctrl-Alt-S/, ou <em/Ctrl-Alt-Entrée/
<tag/Autres.../
De nombreux autres systèmes ont besoin d'une disquette
d'<em/installation/ ou de <em/référence/
</descrip>
<p>
(Je - <em/NdT : l'auteur/ - suis intéressé par des
informations
sur les autres BIOS pour les inclure dans cette liste.)
<p>
Redémarrez le système et loguez-vous <tt/root/.
<sect>
Démontez les partitions non-<bf/Linux/
<p>
Certains aiment monter les partitions d'autres systèmes
d'exploitation (<bf/DOS/, <bf/Windows/, <bf>OS/2</bf>, etc.)
pour pouvoir les utiliser sous <bf/Linux/. Ces partitions devraient
être créées et copiées sous leur propre
système d'exploitation, et vous devriez les démonter
avant de copier votre partition <bf/Linux/. Par exemple, si vous avez
une partition montée en <tt>/dos</tt>, vous devez la
démonter avec cette commande :
<verb>
umount /dos
</verb>
Notez que la commande est "<tt/umount/", avec le premier "n" qui manque
par rapport au mot "<em/unmount/" <em/- NdT "démonter" en anglais/.
<sect>
Partitionnez le nouveau disque
<p>
Utilisez la commande :
<verb>
fdisk /dev/hdb
</verb>
pour partitionner le nouveau disque.
<p>
Pour plus d'informations sur le partitionnement, voyez l'<url
url="http://www.freenix.fr/linux/HOWTO/Installation-HOWTO.html"
name="Installation How-To"> et le <url
url="http://www.freenix.fr/linux/HOWTO-vo/mini/Partition"
name="Partitionning Mini How-To">.
<p>
Si votre disque a plus de 1024 cylindres, voyez le
<url url="http://www.freenix.fr/linux/HOWTO-vo/mini/Large-Disk"
name="Large Disk Mini How-To">. En bref, vous devriez installer
tous les fichiers requis pour démarrer <bf/Linux/ dans les
1024 premiers cylindres.
Une façon de s'en assurer est de créer une petite
partition (1Mo ou 2Mo) juste pour le répertoire <tt>/boot</tt>
au début du disque. (<bf/spécificité Slackware/ :
comme le noyau est plutôt en <tt>/vmlinuz</tt> qu'en <tt>/boot/vmlinuz</tt>,
vous devez mettre les répertoires <tt>/</tt> et <tt>/boot</tt>
dans cette partition.)
<p>
Les partitions pour les systèmes autres que <bf/Linux/ devraient
être créées en utilisant leur propre <tt/fdisk/ plutôt
que celui de <bf/Linux/.
<sect> Formatez le nouveau disque.
<p>
Utilisez la commande suivante pour formater le nouveau disque :
<verb>
mkfs.ext2 /dev/hdb1
</verb>
Pour rechercher les mauvais blocs (défauts physiques) sur le disque, ajoutez
l'option <tt/-c/ juste avant "<tt>/dev/hdb1</tt>".
(<em/Note :/ Contrairement à ce qu'indiquent les pages de manuel, la commande
"<tt>mkfs -t ext2 /dev/hdb1</tt>" ne recherche pas les blocs défectueux,
sous aucune de la <bf/Red Hat/, <bf/Debian/ ou <bf/Slackware/.)
<sect> Montez le nouveau disque
<p>
Créez un répertoire là où vous monterez le
nouveau disque, par exemple <tt>/new-disk</tt>, et montez le :
<verb>
mkdir /new-disk
mount -t ext2 /dev/hdb1 /new-disk
</verb>
<sect> Copiez les fichiers de l'ancien disque au nouveau
<p>
Il faut reproduire complètement la structure du disque, liens inclus.
<p>
Toutefois, il ne faut <em/pas/ copier le répertoire <tt>/new-disk</tt>,
puisque ça
reviendrait à recopier le nouveau disque sur lui-même !
<p>
De plus, il faut copier le répertoire <tt>/proc</tt> sur le nouveau
disque, mais pas son contenu : "<tt>/proc</tt>" est un système de fichiers
"virtuel" qui ne contient pas de vrais fichiers, mais plutôt des informations
sur les processus qui tournent sur le système.
<p>
Voici quatre façons de copier un vieux disque sur un nouveau. Ça peut prendre
du temps, d'autant plus que le disque est gros ou la mémoire peu importante.
Vous pouvez vous attendre à copier 10Mo par minute, ou même plus.
<p>
Vous pouvez suivre la progression de la copie en utilisant la commande "<tt/df/"
depuis un autre terminal. Si vous êtes aussi bon public que moi, essayez
"<tt/watch df/" ou "<tt>watch ls -l /new-disk</tt>" pour voir un rapport mis à jour
toutes les deux secondes ; utilisez <em/Ctrl-C/ pour
arrêter l'affichage. Soyez conscient que la commande "<tt/watch/"
va ralentir la copie.
<verb>
1. cp -ax / /new-disk
</verb>
<p>
Ceci est la méthode la plus simple, mais ne fonctionnera que si votre
système <bf/Linux/ est sur une seule partition. L'option <tt/-a/ préserve
autant que faire se peut le système original. L'option <tt/-x/ restreint <tt/cp/
à un seul système de fichiers. Ceci est nécessaire pour éviter
de copier les répertoires <tt>/proc</tt> et <tt>/new-disk</tt>.
<verb>
2. cd / && cp -a `/bin/ls -1A | egrep -v "^new-disk$|^proc$"` /newdisk
</verb>
<p>
Ceci va à la racine puis copie tous les fichiers et
répertoires sauf <tt>/proc</tt> et <tt>/new-disk</tt>. Notez que la
première option après ls est le chiffre "1", et non la lettre
"L" !
<p>
Cette commande devrait fonctionner en toutes circonstances.
<verb>
3. (cd / && tar cpf - . --exclude new-disk --exclude proc) | (cd
/new-disk && tar xpf -)
</verb>
<p>
(Ecrire cette commande sur une seule ligne)
<p>
Ceci va dans le répertoire racine, "archive" tout sauf
<tt>/proc</tt> et <tt>/new-disk</tt>, va dans <tt>/new-disk</tt> et
"désarchive" tout là. Notez qu'il ne doit pas y avoir de
slash ("/") avant ou après les noms de répertoire
dans les options <tt/--exclude/.
<p>
(<em/Note/ : L'option <tt/-l/ ne marche pas ici, puisque <tt/tar/
recréerait les répertoires <tt>/proc</tt> et <tt>/new-disk</tt>
même s'il ne copie pas leurs contenus. C'est pourquoi l'option <tt/-l/
de <tt/tar/ n'a pas le même comportement que l'option <tt/-x/
de <tt/cp/.)
<p>
Cette méthode est quelque peu plus lente que les autres.
<verb>
4. cp -a /bin /boot /dev /etc /home /lib /lost+found /mnt /root /sbin
/tmp /usr /var /new-disk
</verb>
<p>
(Ecrire la commande sur une seule ligne)
<p>
Le dernier répertoire, <tt>/new-disk</tt>, est la destination
pour la commande <tt/cp/. Tous les autres répertoires sont les
sources. C'est pourquoi je copie tous les répertoires listés dans
<tt>/new-disk</tt>.
<p>
Avec cette méthode, vous faites simplement une liste des répertoires que
vous voulez copier. Ici j'ai indiqué tous mes répertoires à
l'exception de <tt>/proc</tt> et <tt>/new-disk</tt>. Si vous ne pouvez utiliser
aucune des méthodes pour une raison quelconque, vous pouvez toujours utiliser
cette commande pour spécifier manuellement les répertoires que vous voulez
copier.
<p>
Avec cette méthode seulement, s'il y a des fichiers dans le répertoire
racine lui-même, vous avez besoin d'une autre commande pour les copier.
En particulier, ceci est requis avec les <bf/Debian/ et <bf/Slackware/, car ces
distributions placent des fichiers dans le répertoire racine :
<verb>
cp -dp /* /.* /new-disk
</verb>
<p>
Après avoir utilisé une méthode parmi les quatre,
vous devez aussi créer le répertoire <tt>/proc</tt> sur le nouveau
disque :
<verb>
mkdir /new-disk/proc
</verb>
<p>
A ce point, vous pouvez, si vous le voulez, vérifier la structure des fichiers sur le
nouveau disque :
<verb>
umount /new-disk
fsck.ext2 -f /dev/hdb1
mount -t ext2 /dev/hdb1 /new-disk
</verb>
<p>
Vous pouvez aussi utiliser le script suivant pour comparer les
deux disques, et vous assurer que les fichiers ont été
copiés correctement.
<verb>
#!/bin/sh
cd /
for file in `/bin/ls -1A | egrep -v '^new-disk$|^proc$'`
do
find $file -xtype f -exec cmp \{\} /new-disk/\{\} \;
done
</verb>
<p>
(<bf/Spécificité Slackware/ : une installation de base n'inclut
pas les commandes "<tt/cmp/" et "<tt/diff/", alors vous ne pourrez pas lancer ces scripts
si vous avez seulement installé les fichiers de base.)
<p>
Ceci compare seulement les fichiers normaux, et non les fichiers spéciaux
associés à des périphériques (dans le répertoire
<tt>/dev</tt>, les sockets, etc., car
la commande cmp ne fonctionne pas correctement avec ceux-ci. Je - <em/NdT l'auteur/ -
serais intéressé par toute suggestion sur le moyen de vérifier
ces fichiers "spéciaux").
<sect> Mettez à jour "<tt>/etc/fstab</tt>"
<p>
Si votre nouveau disque n'a pas les même partitions ou la même organisation
que l'ancien, modifiez le fichier <tt>/etc/fstab</tt> en
conséquence. Souvenez vous que ce fichier se trouve actuellement
en <tt>/new-disk/etc/fstab</tt>.
<p>
Assurez vous que les partitions de disque dans la première 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
"<tt>/</tt>", comme indiqué dans la seconde colonne.
<sect>
Préparez <tt/LILO/ pour démarrer le nouveau disque
<p>
C'est le point compliqué. Je suppose que <tt/LILO/ est installé
sur le bloc principal de démarrage (<em/master boot record, MBR/);
ceci semble être la configuration la plus courante.
<p>
Vous voulez installer <tt/LILO/ sur ce qui est actuellement le second disque dur.
Il est clair que <tt/LILO/ ne peut pas être <em/lancé/ depuis le
second disque dur;
<!-- - <em/NdT à moins qu'un autre OS loader ne pointe sur lui/ - -->
toutefois, la documentation de <tt/LILO/ anticipe le fait que vous vouliez <em/installer/
<tt/LILO/ sur le second disque dur, par exemple si le premier disque dur doit être
enlevé :
<verb>
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 désactivé,
ou si un autre lanceur, qui est capable de charger les secteurs de
démarrage d'autres disques, est installé.)
</verb>
<p>
Toutefois, la documentation n'explique pas la façon d'installer <tt/LILO/
sur le second disque dur si le premier va être retiré, et j'ai
déduit après de nombreux essais qu'il n'est pas possible d'installer
<tt/LILO/ sur le MBR du second disque dur et de le faire marcher du premier coup.
<p>
A la place, je suggère d'utiliser une disquette de démarrage
pour démarrer sur le nouveau disque dur la première fois.
<p>
Insérez une disquette vide, formatez la, créez y un système
de fichier et montez la :
<verb>
fdformat /dev/fd0H1440
mkfs.ext2 /dev/fd0
mount -t ext2 /dev/fd0 /mnt
</verb>
<p>
(<bf/Debian seulement/ : La commande "<tt/fdformat/" n'est pas incluse
dans l'installation de base chez <bf/Debian/. Si vous n'avez pas cette
commande, vous pouvez l'ignorer si la disquette est déjà formatée.
Dans ce cas, vous devez rechercher les secteurs défectueux sur la disquette
en ajoutant l'option "<tt/-c/" après la commande "<tt/mkfs.ext2/".)
<p>
(<bf/Debian et Slackware seulement/ : utilisez la commande "<tt>fdformat /dev/fd0h1440</tt>"
avec un "h" minuscule)
copiez tous les fichiers de <tt>/boot</tt> sur la disquette :
<verb>
cp -dp /boot/* /mnt
</verb>
<p>
(<bf/Slackware seulement/ : Copiez le fichier <tt>/vmlinuz</tt> sur la disquette de
boot; utilisez la commande "<tt>cp /vmlinuz /mnt</tt>".)
<p>
Créez un nouveau fichier <tt>/mnt/lilo.conf</tt> comme suit :
<verb>
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 système par défaut après 5 secondes.
# (La valeur est en dixièmes de seconde.)
image=/mnt/vmlinuz # Emplacement du noyau Linux sur la disquette.
label=linux # Etiquette du système Linux.
root=/dev/hda1 # Emplacement de la racine sur le nouveau disque
# dur. Mettre en accord avec votre système.
# Notez que vous devez utiliser le nom du futur
# emplacement, une fois que l'ancien disque aura
# été retiré.
</verb>
<p>
(<bf/Debian seulement/ : Sur la ligne "image", utilisez le vrai nom du noyau
<bf/Linux/. Par exemple avec la <bf/Debian/ 1.3.1, utilisez "<tt>/mnt/vmlinuz-2.0.29</tt>".)
<p>
Installez <tt/LILO/ sur la disquette de démarrage :
<verb>
/sbin/lilo -C /mnt/lilo.conf
</verb>
<p>
L'option "<tt/-C/" dit à "<tt>/sbin/lilo</tt>" quel fichier utiliser.
<p>
Démontez la disquette :
<verb>
umount /mnt
</verb>
et lancez la procédure d'extinction du système.
<sect> Retirez l'ancien disque
<p>
Après 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.
<sect> Redémarrez le système, installez <tt/LILO/ sur le nouveau disque
<p>
Redémarrez le système depuis la disquette que vous venez de créer.
Pour cela, vous devez modifier la séquence de démarrage de votre BIOS
en "<tt/A: C:/"
<p>
Faites tous les changement nécessaires dans le fichier <tt>/etc/lilo.conf</tt>
et lancez <tt>/sbin/lilo</tt> pour installer <tt/LILO/ sur le nouveau disque. Avec une
<bf/Debian/, assurez vous que la ligne "boot" indique "<tt>/dev/hda</tt>" plutôt
que "<tt>/dev/hda1</tt>" ou quelque chose de similaire si vous voulez installer
<tt/LILO/ sur le secteur d'amorce du disque dur.
<p>
Vous pouvez essayer de redémarrer votre système depuis votre nouveau disque
dur pour vérifier que tout marche bien. Si vous avez des problèmes, vous
pouvez toujours utiliser la disquette pour démarrer votre système.
<sect>Remerciements
<p>
Je tiens à remercier tout spécialement le <em/Dr Konrad Hinsen/
de l'Institut de Biologie structurale de Grenoble, France, qui a gentiment
agit comme mon gourou <bf/Linux/ personnel. Merci aussi à
<em/Frank Damgaard/, <em/Paul Koning/, et <em/Josh Rabinowitz/, ainsi qu'à
<em/Scott Christensen/ pour avoir attiré mon attention sur quelques
particularités de la <bf/Slackware/.
</article>