LF Tip : Cloner complètement des PC par le réseau

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

UNIX Basics

AuthorImage:[Here we need a little image from you]

this is me

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Gerrit Renker

en to fr Florent Morel

AboutTheAuthor:[A small biography about the author]

L'auteur a obtenu un diplôme en Informatique en 2001.

Abstract:[Here you write a little summary]

Often the problem arises that you have to replicate data from one computer to another. A safe, easy-to-do and effective method is to use network-based cloning as described in this howto. Il arrive souvent que vous ayiez à dupliquer les données d'un ordinateur sur un autre. Une méthode sûre, facile à mettre en oeuvre et efficace est d'utiliser le clonage à travers un réseau tel que décrit dans ce (tutoriel).

ArticleIllustration:[One image that will end up at the top of the article]

[Illustration]

ArticleBody:[The main part of the article]

Scenario

Scénario

While cloning of animals (''Dolly the sheep'') and even human embryos is a much-debated and dubious research area, there is no doubt that some knowledge in cloning computer machines is not only less harmful (if done properly) but also useful for the evolution of one's carefully written configuration scripts and settings. Due to Moore's Law and the fast progress in computer manufacturing, one is almost certain to encounter at least one cloning scenario during the lifetime of using a distribution - be it that the home PC is to be replaced by a laptop or just that a faster processor is on the market and there is enough money to buy a new computer. The task is to take the entire filesystem of computer A and put it to work on computer B.

Clôner des animaux ("Dolly la brebis") ou même des embryons humains est âprement discuté et d'un avenir incertain. Cependant, il ne fait aucun doute que clôner des machines est non seulement moins dangeureux (à condition de le faire correctement) mais aussi utile pour l'évolution de scripts de configuration et de réglages écrits avec soin. Du fait de la loi de Moore et des rapides progrès de l'industrie des composants informatiques, l'utilisateur d'une distribution est quasiment certain d'avoir à réaliser un scénario de clônage au moins une fois. Par exemple lorsque le PC de la maison est remplacé par un ordinateur portable, ou simplement qu'un processeur plus rapide est disponible et que l'achat d'un nouvel ordinateur complet est trop onéreux. La tâche à réaliser est de récupérer le système de fichiers en entier depuis une machine A et de le rendre opérationnel sur une machine B.

There are two ways of doing it; the one which is not described in this howto is to open the cases, physically swap hard drives among computers and do the copying locally on one machine. This is often not possible - opening the case cover often will result in losing the warranty - and also has dangers, since an inexperienced person can physicall and electrically damage the hardware. Even more so, I once lost disk data this way due to a buggy low-level program. The other approach requires that both PCs have network cards (which even in home systems is now frequently the case), is much safer and described here.

Il y a deux manières de le faire ; celle qui n'est pas décrite dans ce tutoriel est d'ouvrir l'ordinateur, transférer physiquement le disque dur vers la machine cible pour effectuer la copie localement. Cela n'est pas souvent possible - ouvrir le boîtier entraîne souvent l'annulation de la garantie - et présente des risques, car une personne inexpérimentée peut endommager le matériel, physiquement ou électriquement. Et encoreXXX, j'ai perdu le contenu d'un disque à cause d'un logiciel de bas niveau buggé. L'autre approche, qui nécessite que les deux PC aient des cartes réseaux (ce qui est relativement souvent le cas), est bien plus sûre et décrite ici.

The underlying idea common to all methods described below is to establish a network connection between the ''source'' computer (which is to be cloned) and the ''target'' computer (the clone). This is straightforward if both are plugged into a hub, otherwise you can connect the network cards via a crossover cable (normal straight cables can not be used). For the target PC, a Live-CD (such as Knoppix or LNX-BBC) or a minimalist installation is needed such that the network card is operable and ssh and/or netcat can be used. There are even some floppies which allow this (although in my case tomsrtb hung on initialising the network card). If you intend to install another (fresh) distribution anyway, this is an easy alternative. Both computers need to be configured with IP addresses on the same network such that they can ''talk'' to each other, as shown in the above picture. L'idée directrice de toutes les méthodes décrites ci-dessous est d'établir une connexion réseau entre la machine ''source'' (celle qui doit être clônée) et la ''cible'' (le clône). Cette étape est des plus simples si les deux machines sont branchées sur un hub, sinon vous pouvez connecter les cartes réseaux via un câble croisé (dans ce cas, les câbles normaux - droits - ne peuvent être utilisés). Pour le PC cible, un Live-CD (tel que Knoppix ou LNX-BBC) ou une installation minimale est requise afin que la carte réseau soit opérationnelle et que ssh et/ou netcat puisse être lancé. Il y a même des disquettes qui permettent cela (bien que dans mon cas tomsrtb plantait lors de l'initialisation de la carte réseau). Si vous voulez installer une autre (nouvelle) distribution quoi qu'il arrive, c'est une alternative simple. Les deux machines doivent être configurées avec des adresses IP sur le même réseau pour qu'elles puissent communiquer entre elles, tel que décrit sur l'image ci-dessus.

Possible methods

Méthodes possibles

With given basic set-up there are several ways of performing the act of cloning: Considérant une configuration de base, il existe plusieurs façons de réaliser un clônage :

The first is complicated if not impossible if your hard drives are not exactly of the same type and geometry. It is great for things such as copying iso images (dd if=/dev/cdrom of=the.iso), or floppies - here (diskcopy shell script) is an example of a diskcopy script using dd. The other disadvantage of the dd-based approach is that the unoccupied space is also copied, thus taking needless time. The tar and cpio pipes take a very long time (up to several hours) and have several problems. For instance, there are restrictions on the filenames and use of symlinks, choking on files in /dev, and the like. I would generally not recommend this approach for cloning. If you do have different filesystems on the source and the target, rsync(1) is probably the best choice. It merely requires that ssh is running and effectively transmits files due to an efficient, built-in protocol. It does even have a -D switch for device files, as well as many more options to cater to most practical scenarios. It is a very useful tool for daily backups, mirroring and the like, the man-page with its many examples is well-worth studying. An example of cloning via rsync is presented in [1].

Here, we use the method via dump and restore which amounts to re-creating the entire filesystem. It is fast, effective and delivers the desired results with minimal effort, hence ideal for full cloning. La première est compliquée sinon impossible si vos disques durs n'ont pas exactement les mêmes types et géométries. C'est une façon excellente pour copier des images iso (dd if=/dev/cdrom of=l'image.iso), ou des disquettes - ici (shell script de copie de disque - diskcopy) est un exemple de script diskcopy utilisant dd. L'autre inconvénient de l'approche basée sur dd est que l'espace inoccupé est aussi copié, prenant donc du temps inutilement. Les pipes tar et cpio prennent beaucoup de temps (jusqu'à plusieurs heures) et présentent quelques problèmes. Par exemple, il existe des restrictions sur les noms de fichiers et l'utilisation de liens symboliques, XXXles fichiers dans /dev, etc. Je ne recommenderais généralement pas cette approche pour le clônage. Si vous avez des systèmes de fichiers différents sur la machine source et cible, rsync(1) est probablement le meilleur choix. Il nécessite seulement ssh et transmet efficacement les fichiers grâce à un protocole des plus performants. Il a même une option -D pour les fichiers deviceXXX, ainsi que plusieurs options pour répondre à la plupart des scénarii pratiques. C'est un outil très utile pour les backups quotidiens, le mirroring et autres. La page de manuel contient de nombreux exemples et est une très bonne source d'informations. Un exemple de clônage via rsync est présenté dans [1].

Ici nous utilisons la méthode via dump et restore dans le but de re-créer le système de fichiers entier. C'est rapide, efficace et délivre le résultat attendu avec un minimum d'efforts, donc idéal pour le clônage. I actually had to do the entire cloning procedure twice, since the target PC was called back and replaced. In both cases absolutely no problems were encountered and lead out a functional, bootable clone within roughly one hour of copying gigabytes. This approach requires that both target and source PC feature the same filesystem. We assume that this is ext2 or ext3, since it is currently the most widely used kind (see notes below). J'ai dû réaliser la procédure entière de clônage deux fois, car la machine cible a été rappelée et remplacée. Dans les deux cas, aucun problème n'apparut et le clônage mena à un clône fonctionnel, bootable en à peine une heure de copie des gigaoctets. Cette approche requiert que la machine source et la machine cible possèdent le même système de fichiers. Nous supposons que ce soit ext2 ou ext3, puisque c'est actuellement le plus utilisé (voir notes ci-dessous).

Setting up ssh

Configurer ssh

Once you have configured a system with a minimal installation or have a Live-CD running, the next step is to set up ssh (if you are not using netcat for the transfer as detailed further below). This requires that the source PC has sshd (the secure shell daemon) running. Check /etc/init.d/ if unsure. On the target PC, type (as root) Une fois que vous avez un système minimal ou un Live-CD tournant sur la machine cible, la prochaine étape est de configurer ssh (si vous n'utilisez pas netcat pour le transfert comme détaillé plus loin). Ceci requiert que le PC source ait sshd (secure shell daemon) configuré et lancé. Vérifiez /etc/init.d/ si vous avez un doute. Sur le PC cible entrez (en tant que root) :
ssh-keygen -t rsa
To keep things simple, do not enter a passphrase. The public key is now in the file /root/.ssh/id_rsa.pub. Copy this file to your source PC via Pour faire simple, n'entrez pas de passphrase. La clé publique est maintenant dans le fichier /root/.ssh/id_rsa.pub. Copiez ce fichier sur votre machine source via
scp /root/.ssh/id_rsa   SourcePC:/tmp
where SourcePC is the IP address of the source PC. When asked whether you are sure, enter a full ''yes'' (''y'' alone sometimes does not work). You are still being prompted for the root password on the source PC. Now add the target PC as a trustworthy network node by issuing où SourcePC est l'adresse IP de votre PC source. Lorsqu'on vous demande si vous êtes sûr, entrez ''yes'' (''y'' tout seul ne fonctionne que rarement). On vous demande alors le mot de passe root du PC source. Ajoutez à présent le PC cible en tant qu'hôte de confiance sur le réseau en entrant
cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
on the source PC. To check whether everything is ok, repeat the above copy command on the target PC. You should no longer be prompted for a password. sur le PC source. Pour vérifier si tout va bien, répétez la commande de copie sur le PC cible. On ne devrait plus vous demander le mot de passe.

Creating a file system on the target PC

Créer un système de fichiers sur le PC cible

The first step is always to partition the hard drive on the target system and then to create the ext2/ext3 filesystem. The latter is the preferable journalling variant and is enabled simply by setting the -j (journalling) option in mke2fs (requires to have ext3 support in the kernel). You can even convert an ext2 system to ext3, see tune2fs(8). So let's say on the source PC we have the following configuration: La première étape est toujours de partitionner le disque dur sur le système cible et de créer le système de fichiers ext2/ext3. Le second est une variante journalisée du premier et est disponible simplement en ajoutant l'option -j (journalisation) dans mke2fs (nécessite un noyau supportant ext3). Vous pouvez même convertir un système ext2 en ext3, voir tune2fs(8). Supposons que sur le PC source nous ayons la configuration suivante :

Filesystem Size Used Use% Mounted on
/dev/hda3 2.7G 552M 22% /
/dev/hda5 7.8G
1.6G 22% /usr
/dev/hda7 6.3G 1.7G 28% /usr/share
/dev/hda8 3.4G 601M 19% /home
/dev/hda12 5.3G 1.9G 37% /opt
/dev/hda1 587M 70M 13%
/var/backup

I recommend to always do some kind of partitioning. If not, then any failure in using the filesystem or a hard-drive knock-out of just some sectors will destroy all your data. And according to Murphy's law, this is sure to happen if no precautions are taken in form of using different partitions instead of a single monolithic one. I had such a case recently with a funny kernel and had I not partitioned the drive, I would have lost all my data along with the munched root file system. The above actually shows that /usr was growing too big, therefore /usr/share had been added. Time for a bigger hard drive. Je recommande de toujours effectuer un partitionnement. Sinon, un simple problème dans l'utilisation du système ou un problème de disque dur vous fera perdre l'ensemble de vos données. Si on se reporte à la loi de Murphy, soyez certains que cela arrivera si vous ne prenez pas la précaution d'utiliser plusieurs partitions au lieur d'une seule monolithique. J'ai rencontré cela avec un noyau étrange et si je n'avais pas partitionné le disque, j'aurais perdu toutes mes données en même temps que le système racine. Le tableau ci-dessus montre que /usr devenait trop volumineux, /usr/share a donc été ajouté. Il est temps d'acquérir un disque plus grand.

On the target PC, fire up parted (recommendable) or your favourite partitioning program (Qtparted is a nice GUI-variant, said to be a Partition Magic clone). Create partitions which are all at least as big as the ones on the source PC. Don't forget the swap partition. After saving the partition table, put a filesystem on all newly created partitions, using Sur le PC cible, lancez parted (recommandé) ou votre outil de partitionnement préféré (Qtparted est une variante graphique bien réalisée, dite clône de Partition Magic). Créez les partitions au moins aussi grandes que celles du PC source. N'oubliez pas le swap. Après avoir sauvé la table de partition, désignez le système de fichiers sur toutes les partitions nouvellement créees en utilisant
mke2fs -j -L <label> /dev/xxx
where xxx is the partition name and <label> a label string. I usually just use things like ''/usr'' as labels (you will see that at boot-time). You can set various things via tune2fs(8), such as the regular file system check interval. où xxx est le nom de la partition et <label> la chaîne de label. J'utilise généralement des labels tels que ''/usr'' (vous verrez cela au moment du boot). Vous pouvez définir plusieurs points via tune2fs(8), comme l'intervalle de vérification du système de fichiers.

Transfer the filesystem

Transfert du système

First you need to mount all the newly created partitions. We start with the root filesystem (''/'') and mount the remaining directories as we go along. It is perfectly possible to condense two partitions of the source PC into a single one on the target, in fact this is what we are going to do with /usr/ and /usr/share in the above example. So mount your future root filesystem using Premièrement vous devez monter toutes les partitions nouvellement créees. Commençons par la racine (''/'') et montons les répertoires restants au cours de la procédure. Il est parfaitement possible de condenser deux partitions du PC source en une seule sur le PC cible, en fait c'est ce que nous allons faire avec /usr et /usr/share dans l'exemple ci-dessus. Montez donc votre futur système en entrant
mount /dev/xxx   /mnt
When cloning, it is necessary to chdir into the target directory Lors du clônage, il est nécessaire de faire un chdir dans le répertoire cible
cd /mnt
Now the network bit, on the target PC type Maintenant la partie réseau, sur le PC cible entrez
ssh sourcePC 'dump -0 -f - /' | restore -r -f -
where sourcePC is the IP address of the target PC. The options mean ''-0'' for a full backup, ''-f -'' tells it to use stdin/stdout as file descriptors and ''-r'' instructs restore to re-create the filesystem being piped over the network on the target PC. For more options see dump(8) and restore(8). Below you see the output for transferring the root filesystem.
sourcePC est l'adresse IP du PC source. Les options signifient ''-0'' pour un backup complet, ''-f -'' indique d'utiliser stdin/stdout comme descripteursXXX de fichier et ''-r'' indique à restore de re-créer le système copié à travers le réseau sur le PC cible. Pour plus d'options voir dump(8) et restore(8). Ci-dessous est présenté la sortie du transfert le système racine.
$ ssh 10.42.3.42 'dump -0 -f - /' | restore -r -f -
DUMP: Date of this level 0 dump: Tue Feb 22 15:50:12 2005
DUMP: Dumping /dev/hda3 (/) to standard output
DUMP: Label: debian
DUMP: Writing 10 Kilobyte records
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 547312 blocks.
DUMP: Volume 1 started with block 1 at: Tue Feb 22 15:50:14 2005
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Volume 1 completed at: Tue Feb 22 15:51:43 2005
DUMP: Volume 1 546590 blocks (533.78MB)
DUMP: Volume 1 took 0:01:29
DUMP: Volume 1 transfer rate: 6141 kB/s
DUMP: 546590 blocks (533.78MB)
DUMP: finished in 89 seconds, throughput 6141 kBytes/sec
DUMP: Date of this level 0 dump: Tue Feb 22 15:50:12 2005
DUMP: Date this dump completed: Tue Feb 22 15:51:43 2005
DUMP: Average transfer rate: 6141 kB/s
DUMP: DUMP IS DONE
Restore always creates a file restoresymtable which can be removed once you are certain that no errors occurred during the file system restoration. Restore crée toujours un fichier restoresymtable qui peut être supprimer une fois que vous êtes sûr qu'aucune erreur est intervenue lors de la restauration du système. When done with the root filesystem, we now proceed with each mounted sub-filesystem, starting with /usr (assuming your current work directory is the root of the future filesystem). Une fois le système racine copié, procédons maintenant chaque sous-système monté, en commençant par /usr (supposant que votre répertoire courant est la racine du future système de fichiers).
mount /dev/xxx  ./usr

cd ./usr

ssh targetPC 'dump -0 -f - /usr' | restore -r -f -
The mount-cd-dump/restore cycle is now repeated for all the directories you may have. With regard to /usr/share (which on the source PC had its own partition), you can, after the above step, simple chdir into ./usr/share (note the ".") and then repeat L'opération mount-cd-dump est à répéter pour tous les répertoires que vous pouvez avoir. Pour ce qui est de /usr/share (qui avait sa propre partition sur le PC source), vous pouvez, après l'étape précédente, faire un chdir vers ./usr/share (notez le ".") et ensuite répéter
ssh targetPC 'dump -0 -f - /usr/share' | restore -r -f -
Restore only complains if files already exist in the filesystem being restored, so when putting two different partitions of the source PC into a single one on the target PC there is no problem. Cloning an entire PC took just about one hour with ssh and 100MB network cards (crossover cable a bonus). Restore se plaint uniquement si des fichiers existent déjà dans le système à restaurer, donc si vous mettez deux partitions différentes (sur le PC source) en une seule (sur le PC cible) il n'y a pas de problème. Clôner un PC entier prend à peine une heure avec ssh et des cartes réseaux 100MB (un gain de performance est à noter avec un câble croisé).

Note: To dump a filesystem, it need not necessarily be mounted. You can also pass a partition name, such as /dev/hda6, instead of the directory name of a mounted partition. Note: Pour réaliser le dump d'un système, il n'est pas nécessaire qu'il soit monté. Vous pouvez aussi passer le nom de la partition , tel que /dev/hda6, en lieu et place du nom de répertoire de la partition montée.

Alternative:  netcat

Alternative :  netcat

An alternative to use instead of ssh is netcat(1), which is abbreviated as nc. Netcat is a simple-to-use TCP/IP client-server swiss army knife which allows to create a pipe over the network. The above examples are then merely modified as follows. We assume that the partition mounted under /var/backup is to be transferred via dump/restore from the source PC to the target PC. Une alternative à ssh est d'utiliser netcat(1), dont l'abbréviation est nc. Netcat est un couteau suisse facile à mettre en oeuvre, fonctionnant en mode client-serveur sur TCP/IP qui permet de créer un tuyau à travers le réseau.

On the receiving end (target PC) create a listening instance of netcat via -l which pipes its output to restore. Sur la machine cible, créez une instance de netcat qui écoute via -l qui redirige sa sortie vers restore.
nc -l -p 2000 -q 1 | restore -r -f -
On the source PC, create another instance of netcat which takes its input from a pipe where target-IP is the IP address of the target PC. Sur la machine source, créez une autre instance de netcat qui récupère l'entrée depuis le pipeXXX où target-IP représente l'adresse IP du PC cible.
dump -0 -f - /var/backup | nc <target-ip>   2000
The -q option is supposed to stop nc after receiving end-of-file, but I had to terminate it manually in my case. Would recommend using ssh anyway. L'option -q est censée arrêter netcat après avoir reçu l'identifiant de fin de fichier, mais lors de mon essai, il m'a fallu le stopper manuellement. Je recommande d'utiliser ssh malgré tout.

Cleaning up

Faire le ménage

Congratulations, if thus far successful you basically have a cloned system. Now it remains to turn this clone into a workable PC. The first thing to do is to update /etc/fstab with the new settings, otherwise you will not be able to use the cloned partitions. If the IP address changes, this also needs to be updated (/etc/hosts, /etc/network/interfaces under debian). Next important thing is the boot configuration which in almost all cases will want updating. With lilo, edit /etc/lilo.conf (in particular the root=... option) and then run lilo -v. Under grub, edit /boot/grub/menu.lst (or /boot/grub/grub.conf depending on which one is the symlink) and then enter grub, Félicitations, si vous êtes arrivés jusque ici, vous avez clôné votre système. Maintenant il est temps de rendre cette machine utilisable. La première chose à faire est de mettre à jour /etc/fstab avec les nouveaux réglages, sinon vous ne pourrez pas utiliser les partitions clônées. Si l'adresse IP change, celle-ci doit aussi être mise à jour (/etc/hosts, /etc/network/interfaces sous debian). La prochaine étape importante concerne la configuration du démarrage qu'il sera pratiquement toujours impératif de mettre à jour. Avec lilo, éditez /etc/lilo.conf (en particulier l'option root=...) puis exécutez lilo -v. Sous grub, éditez /boot/grub/menu.lst (ou /boot/grub/grub.conf, tout dépend sur lequel pointe le lien symbolique) puis entrez grub.
grub> root (hd0,xxx)

... filesystem is ...

grub> setup (hd0)

... lots of output here

grub> quit 
or run grub-install /dev/xxx where xxx is your hard drive. Here, check both for the root (hdn,xx) and the appended root=/dev/xxx settings. ou lancez grub-install /dev/xxxxxx est votre disque dur. Ici, vérifiez les réglages pour root (hdn,xx) et root=/dev/xxx.

In the likely case of now having better hardware in the newly cloned PC, you may want to update the settings for your custom-kernel. If you are using systems which come with lots of pre-configured modules (such as RedHat, SuSe, Mandrake, Fedora ...) don't worry, it is quite likely that there will be a suitable module. If not, lspci -vv and kernel compilation as usual and described elsewhere. If your video card is different now, update /etc/X11/XF86Config-4 (or xorg.conf under RH/Fedora) to reflect this, otherwise you will get no output. If possible use the graphical tools for setting up X by booting in runlevel 3 if you have such tools. Under debian, some investigation is necessary, I was lucky to find out that the driver changed from r128 to radeon and that did it. Dans le cas probable où vous avez un matériel plus récent dans votre PC clôné, vous pouvez mettre à jour les réglages pour votre noyau personnalisé. Si vous utilisez des systèmes qui proposent de nombreux modules pré-configurés (tels que RedHat, SuSE, Mandrake, Fedora...) ne vous inquiétez pas, il est fort probable qu'il existe un module correspondant. Sinon, lspci -vv et compilation du noyau habituels tels que décrit ailleurs. Si votre carte graphique est différente, mettez à jour /etc/X11/XF86Config-4 (ou xorg.conf sous RH/Fedora) pour le prendre en compte, sinon vous n'obtiendrez aucun signal. Si possible, utilisez des outils graphiques pour configurer X en démarrant en niveau 3 si vous disposez de tels outils. Sous Debian, quelques investigations sont nécessaires. Je fus chanceux de découvrir que le driver avait changé de r128 vers radeon et que cela fonctionne.

Other systems

Autres systèmes

This howto explained the cloning procedure for ext2/ext3 filesystems. Much similar commands can be found on many other Lunix systems. For instance, several Unices such as FreeBSD, HP-UX, IRIX also provide dump/restore commands; in Solaris this is called ufsdump/ufsrestore. There are filesystems which do not offer filesystem dump functionality, e.g. ReiserFS. Here it would suggest itself to use rsync. See [1] for a report of successfully using rsync to clone a Linux system. Ce tutoriel explique la procédure de clônage pour les systèmes de fichiers ext2/ext3. Des commandes similaires conviennent pour de nombreux autres systèmes Unix-like. Par exemple, plusieurs Unix tels que FreeBSD, HP-UX, IRIX disposent aussi des commandes dump/restore ; sous Solaris ce sont ufsdump/ufsrestore. Il existe des systèmes de fichiers qui n'offrent pas la fonctionnalité "dump", c'est le cas de ReiserFS. Dans ce cas, il est conseillé d'utiliser rsync. Voir [1] pour un rapport concernant l'utilisation de rsync lors d'une procédure de clônage d'un système Linux.

References

Références

[1] ''Replicating a Linux System - Yet Another Method.'' Ben Okopnik, Linux Gazette Issue 83, October 2002.