Je me permets donc de le reposter pour t'éviter d'avoir à rechercher dans les archives.
Encore merci à Bernard d'ailleurs pour cet excellent petit cours.
Donc voici:
²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²Comme promis, je vous fait part de mes résultats.
Après plusieurs essais (rsync, mirrordir, tar, cp), je pense que je tiens une solution toute simple au problème de "clonage" de disques.
Avec 2 disques identiques j'aurais tout simplement utilisé la commande dd pour obtenir une réplique exacte du disque source avec la commande (sauf erreur de ma part) :
# dd if=/dev/hda of=/dev/hdc
Mais comme mon but était de remplacer un petit disque par un plus gros, et de changer la taille et le nombre de partitions, dd ne convenait pas. Dans la solution que j'ai adoptée pour copier le disque d'origine (hd0) sur le nouveau disque (hd1) il y a 3 étapes :
1 - copie des partitions et répertoires de hd0 vers hd1 à l'aide de la commande :
cp -a
2 - modification du fichier de configuration /etc/fstab
3 - modification du boot (grub ou lilo)
Ce qui donne avec un peu plus de détails :
1 - copie des partitions et répertoires de hd0 vers hd1 à l'aide de la commande cp -a
---------------------------------------------------------------------------- ------------------------
- Connecter le nouveau disque (hd1)
- Lancer Linux (MDK)
- Avec diskdrake ou au moyen des outils en ligne de commande (fdisk ou cfdisk, mkfs) créer sur hd1 les partitions désirées et les formater - Redémarrer l'ordinateur avec un Linux sur disquette ou CD : j'ai utilisé tomsrtbt (http://www.toms.net/rb/), mais tout autre Linux sur disquette ou CD doit convenir, par exemple Knoppix (http://knoppixfr.tuxfamily.org/), ou encore le CD n°1 d'installation de MDK : il suffit qu'il contienne la commande cp
- Avec la commande cp -a, copier les partitions et répertoires de hd0 vers leur emplacement prévu sur hd1
Quelques questions que vous vous posez peut-être:
* Pourquoi utiliser un Linux sur disquette ou CD ?
C'est pour obtenir une copie de ce qui est réellement sur disque et non pas de ce que Linux y met ou veut bien laisser copier lorsqu'il fonctionne. Par exemple /proc contient une série de fichiers qui n'existent qu'en RAM ; il n'y a rien sur le disque : /proc n'est qu'un point de montage pour l'accès à une partie de la RAM. * Pourquoi utiliser cp plutôt que mirrordir ou rsync plus pratiques ?
C'est parce que cp se trouve dans toutes distributions Linux ce qui n'est pas le cas des autres commandes (pas de rsync, mirrordir ... dans tomsrtbt) .
2 - modification du fichier de configuration /etc/fstab
---------------------------------------------------------------------------
- Rebooter sous MDK (ce n'est pas indispensable, mais l'interface est plus conviviale que celle d'un Linux sur disquette)
- Mettre à jour le fichier /etc/fstab sur hd1
3 - modification du boot (grub ou lilo)
-----------------------------------------------------
- Mettre à jour le fichier de configuration du programme de boot sur hd0 (et/ou sur hd1 si par la suite on veut démarrer directement à partir de hd1)
Dans le cas de GRUB, le fichier à modifier est /boot/grub/menu.lst.
Dans le cas de LILO (de mémoire, je n'ai pas testé, ça fait des lustres que je n'utilise plus lilo !) modifier /etc/lilo.conf et exécuter la commande "/sbin/lilo" avec les options -b bootdev et -C config-file pour indiquer d'une part le disque sur lequel installer le boot et d'autre part le fichier de configuration que l'on vient de modifier.
C'est tout. Au redémarrage le menu de grub ou de lilo apparaît et permet de booter le système copié sur hd1.
Et voici ce que j'ai réalisé concrètement, les vrais débutants comprendront peut-être mieux ce qu'il faut faire :
J'ai un PC qui tourne sur MDK9.1. J'utilise l'environnement graphique KDE. Le disque dur d'origine (hd0) a 3 partitions :
- hda1/
- hda2swap
- hda3home
Il devient trop petit (3 Go). J'ai récupéré un disque de 20 Go. Après montage dans le PC, ce 2° disque est vu comme hdc.
Je désire partitionner le 2° disque dur (hd1) en :
- hdc1/
- hdc2swap
- hdc3usr
- hdc5var
- hdc6home
1 - Avec diskdrake, partitionner le nouveau disque (hd1) et formater les partitions
2 - Redémarrer Linux à partir d'une disquette tomsrtbt. Se "loger" en "root" avec le mot de passe par défaut "xxxx"
3 - Créer les points de montage pour le disque source et le disque destination
# cd /mnt
# mkdir source
# mkdir dest
# cd /
4 - Monter les disques source (hda) et destination (hdc) et copier le répertoire racine
# mount /dev/hda1 /mnt/source
# mount /dev/hdc1 /mnt/dest
# cp -a /mnt/source/* /mnt/dest
# umount /mnt/dest
5 - La même chose pour /usr
# mount /dev/hdc3 /mnt/dest
# cp -a /mnt/source/usr/* /mnt/dest
# umount /mnt/dest
6 - La même chose pour /var
# mount /dev/hdc5 /mnt/dest
# cp -a /mnt/source/var/* /mnt/dest
# umount /mnt/dest
7 - La même chose pour /home
# umount /mnt/source
# mount /dev/hda3 /mnt/source
# mount /dev/hdc6 /mnt/dest
# cp -a /mnt/source/* /mnt/dest
# umount /mnt/dest
# umount /mnt/source
# reboot
Sortir la disquette tomsrtbt
7 - Redémarrer sous MDK
8 - Supprimer de hdc1 non pas les répertoires /usr, /var et /home mais leur CONTENU qui est maintenant sur les partitions respectivement hdc3, hdc5 et hdc6
# mount /dev/hdc1 /mnt/dest
puis sous konqueror supprimer le CONTENU de /usr, /var et /home
(NB : la commande
# rm -rf nom_repertoire/*
efface bien le contenu du répertoire nom_repertoire, mais pas les fichiers cachés ! Si quelqu'un sait comment faire en ligne de commande, ça m'intéresse)
9 - Mettre à jour le fichier /etc/fstab du nouveau disque
Remplacer :
/dev/hda1 / ext3 defaults 1 1
/dev/hda2 swap swap defaults 0 0
/dev/hda3 /home ext3 defaults 1 2
par :
/dev/hdc1 / ext3 defaults 1 1
/dev/hdc2 swap swap defaults 0 0
/dev/hdc3 /usr ext3 defaults 1 2
/dev/hdc5 /var ext3 defaults 1 2
/dev/hdc6 /home ext3 defaults 1 2
10 - Mettre à jour le menu de boot de grub (/boot/grub/menu.lst)
pour faire apparaître l'option de boot du système Linux installé maintenant hd1
NB : pour le moment hd0 est toujours en place. On peut donc utiliser son "boot device" ; il suffit d'ouvrir le fichier menu.lst qui se trouve sur hda1 :
# mount /dev/hda1 /mnt/source
# kwrite /mnt/source/boot/grub/menu.lst
et de le modifier : j'ai rajouté, juste en dessous de "default 0" (pour que le PC démarre par défaut sur MDK qui est sur hd1) :
title linux dd 20 Go
kernel (hd1,0)/boot/vmlinuz root=/dev/hdc1 quiet devfs=mount acpi=off vga=791
initrd (hd1,0)/boot/initrd.img
Notez vga=791 : ce n'est pas indispensable, mais ça permet de bien mieux voir les messages (d'erreurs éventuelles) au démarrage du système.
11 - Rebooter, c'est fini et la copie de MDK fonctionne apparemment correctement : c'est à partir de ce PC réinstallé (myrte.u-strasbg.fr) que je vous écrit :-)
Un petit problème est que la commande cp, au contraire des commandes rsync et mirrordir n'a pas d'option exclude-from. Si quelqu'un sait comment éviter de copier les répertoires inutiles avec la commande cp (ça prend du temps et il faut ensuite les effacer, voir points 4 et 8 ci-dessus), ça pourrait être intéressant.
Bon "clonage"
Jean-Claude
-- Stéphane
Vous souhaitez acquerir votre Pack ou des Services MandrakeSoft? Rendez-vous sur "http://www.mandrakestore.com".
Foire Aux Questions de la liste : http://mdk.mondelinux.org
