Clonage disqueDans certaines situations, il peut être utile de cloner tout le contenu d’un disque dur « à la louche » dans le but de constituer un instantané d’un système vers lequel on pourra revenir le cas échéant. Il existe une série d’outils tout faits pour cette tâche comme Ghost For Linux, Ghost For Unix ou Clonezilla. Or, on peut se retrouver confronté à des situations où ces outils ne sont pas disponibles. Dans ce cas, on peut très bien s’en sortir manuellement en combinant les bons vieux outils Unix dd, gzip et ssh.

AstucePuisque nous faisons abstraction des systèmes de fichiers utilisés sous le capot, cette méthode est complètement agnostique en termes d’OS. Vous pouvez l’utiliser pour cloner n’importe quel Linux, BSD ou Windows.

Réduire la taille de l’image

Étant donné que nous comptons transférer le contenu d’un disque dur bloc par bloc, on imagine bien que les images résultantes sont assez volumineuses. L’astuce pour réduire la taille des images consiste à écrire des zéros sur la partie non utilisée du système.

Sur un système Linux installé, on pourra utiliser la commande suivante :

# dd status=progress if=/dev/zero of=/0bits bs=20M ; rm -f /0bits
  • L’option bs signfie blocksize et désigne la taille des blocs écrits sur le disque.

Sur un système Windows, c’est l’utilitaire nullfile.exe qui permet de réduire l’image du disque.

Cloner une machine locale

Notez que par « machine locale », j’entends une machine à laquelle j’ai accès physiquement et sur laquelle je peux booter un système Linux live comme Slax ou la console de secours Rocky Linux.

Dans l’exemple ci-dessous, je lance un système Linux live sur mon serveur, et j’envoie le tout vers le compte microlinux de mon serveur de sauvegardes local nestor.microlinux.lan :

# dd if=/dev/sdb status=progress | gzip --fast - | \
  ssh microlinux@nestor dd of=rocky-8-server-image.gz

Quelques remarques sur les options utilisées :

  • status=progress affiche la progression pour dd
  • --fast spécifie un algorithme de compression moins compact et plus rapide pour gzip

Restaurer un système local

Pour restaurer cette machine depuis le serveur de sauvegardes, il me suffit de faire l’opération en sens inverse. Concrètement, voici la commande utilisée :

# ssh microlinux@nestor dd if=rocky-8-server-image.gz | \
  gunzip --fast - | dd of=/dev/sdb status=progress

Cloner une machine publique

J’administre une série de serveurs dédiés chez Scaleway. Ce fournisseur offre l’accès à une console de secours sous forme d’une session Linux live que l’on peut démarrer par le biais de l’interface de gestion des serveurs.

Dans l’exemple, j’ai démarré une session de secours et je l’utilise pour sauvegarder une installation de Rocky Linux que j’envoie vers mon serveur de sauvegardes public :

$ sudo -s
# dd if=/dev/sda status=progress | gzip --fast - | \
  ssh microlinux@backup.microlinux.fr dd of=rocky-8-server-image.gz

Restaurer une machine publique

Pour restaurer cette machine publique, je procéderai de manière similaire. Une fois que j’ai chargé la console de secours, je récupère l’image compressée depuis mon serveur de sauvegardes public :

$ sudo -s
# ssh microlinux@backup.microlinux.fr dd if=rocky-8-server-image.gz | \
  gunzip --fast - | dd of=/dev/sda status=progress

ImportantLes opérations de réduction de la taille de l’image, de clonage et de restauration peuvent être assez chronophages. Comptez une bonne demi-journée pour compacter un disque SATA de 1 To et une journée entière pour le cloner.


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


2 commentaires

LupusMichaelis · 8 janvier 2023 à 0 h 54 min

Tiens c’est pratique ça !

Un petit détail : en shell, il est inutile d’ajouter un backslash pour échapper la fin de ligne si le dernier caractère de la ligne est un opérateur (pipe, or, and, etc)

    kikinovak · 8 janvier 2023 à 7 h 42 min

    Merci pour le tuyau, je ne savais pas !

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *