le premier … il en faut bien un !

Devant céder, comme bon nombre, à la mode de la virtualisation, s’est posée la problématique de la récupération d’une image d’un disque ou d’une partition.

Bien sûr, comme tout un chacun, je pourrais utiliser un logiciel spécialisé tel que ghost de Symantec, mais comme, d’une part, je ne dispose pas d’euros superflus, et que, d’autre part, je n’entends pas non plus, tomber dans la facilité du téléchargemement/copiage/crakage de logiciels commerciaux, je me suis posé la question en termes d’utilisation des outils disponibles avec un système GNU/Linux…

Je pourrais, bien sûr, utiliser une distribution telle que SystemRescueCd et les services du daemon partimaged, mais bien plus basiquement, j’ai à disposition la commande ‘dd‘ qui permet de copier bloc par bloc un fichier… Or, sous [U|*]nix, tout est fichier, y compris un disque entier ou une partition !

Donc, si j’ai un volume suffisant à disposition sur le système à virtualiser (genre disque dur externe ou autre), et que je démarre mon système à virtualiser depuis, par exemple, un quelconque live-cd GNU/Linux (votre distribution préférée fera sûrement l’affaire) :
jesuisroot:# dd if=/dev/disque_a_virtualiser of=/mon_espace_de_sauvegarde/disque_virtuel.raw
permettra de créer une image ‘raw‘ du disque à virtualiser.

En omettant le paramètre of=’…’, la commande dd envoie ses données sur la sortie standard, et il devient alors possible de compresser l’image en utilisant gzip (ou bzip2, etc…) :
jesuisroot:# dd conv=noerror,sync if=/dev/disque_a_virtualiser | gzip -cf /mon_espace_de_sauvegarde/disque_virtuel.raw.gz
C’est toujours ça de gagné !

Mais je vais pas en rester là … tout simplement parce que je n’ai pas de disque dur externe ;-((
ou encore que je ne veux pas avoir, par la suite, à copier puis effacer du support amovible le fichier obtenu …

Je veux, en fait, transférer directement, par le réseau local, mon image disque sur le système de virtualisation, et je vais utiliser une autre commande (très souvent présente sur les live-cd GNU/Linux) : netcat !

Dès lors, depuis la machine à virtualiser la création de l’image (avec compression) deviendra :

jesuisroot:# dd conv=noerror,sync if=/dev/disque_a_virtualiser | gzip -cf | nc -p 7777 -q 10 192.168.XXX.XXX

et, sur le serveur de virtualisation :

jesuisquijeveux$ nc -l -p 7777 | gzip -dfc | dd of=disque_virtuel.raw

Le port 7777 utilisé est totalement arbitraire, sauf à utiliser un port non-privilégié (c’est à dire > 1024) si l’utilisateur qui lance netcat n’est pas root.
Les options de conversion de dd lors de la lecture du disque noerror, sync devraient permettre de passer outre la rencontre de mauvais secteurs sur le disque à copier.

Et voilà, au bout d’un temps certain, l’image du disque sera à disposition sur le serveur de virtualisation.
Cette technique est également utilisable pour procéder à des sauvegardes de disques ou de partitions.

Bien évidemment, cette technique fonctionne pour d’autres commandes, telles que tar, ainsi pour réaliser une archive qui sera envoyée sur le réseau et restaurée sur une machine distante, on aura sur la machine à sauvegarder :

jesuisroot:# tar zc repertoire_cible/  | nc -q10 192.168.XXX.XXX 7777

et, sur la machine distante :

jesuisquijeveux$ nc -w 10 -l -p 7777 | tar zx

Références : The Digital Voice – article de John Ward.

posté le 1. octobre 2009 à 6:17 am par info · Permalink
Catégories : Administration système · Mots-clés: , , ,

Ajoutez un commentaire