https://www.flickr.com/photos/brieucdnl/11822998135/

Ruse pour compresser efficacement une image de partition sous Linux

Quand on a fini d’installer une machine, on revient de loin ! Une fois que tout est bien configuré je vous conseille de faire une image disque (sauvegarde « bit à bit ») de votre disque dur avant de commencer à mettre vos données.

L’ennui, c’est qu’un disque neuf ou réinitialisé avec un « formatage rapide » n’a pas un zéro inscrit sur chaque secteur : l’espace libre se compose de blocs inutilisés contenant en réalité des données aléatoires. Il deviendrait paradoxalement incompressible et serait très lourd.

L’idée, c’est d’aller dans chaque point de montage remplir un fichier avec des 0 puis de le supprimer. Cela va réinitialiser tous les secteurs libres de la partition à une valeur qui sera compressible.

Préparation des outils

Pour réaliser une image disque, votre machine doit nécessairement démarrer sur un autre système d’exploitation que celui à sauvegarder.

J’ai choisi le live CD d’Ubuntu 17.04 pour le faire, car il contient (ENFIN !) l’utilitaire « xz » en version 5.2. Il utilise l’algo lzma2 de 7z pour compresser, la version 5.2 apporte quant à elle la possibilité réduire le temps de compression en utilisant tous les cœurs de notre processeur.

Sélectionnez la clé USB au démarrage et lancez Ubuntu en mode « Essayer sans installer ». Vous arrivez sur le bureau, dans le dock, cherchez l’icône du navigateur de fichiers et débrouillez vous pour accéder au contenu de chaque partition du disque de votre machine. Le live CD va les monter automatiquement dans /media/ubuntu/nom_de_la_partoche.

Première étape : aplatissement de l’espace libre

Ouvrez l’application Terminal et lancez cette commande pour chaque partition (une à la fois) montée dans /media/ubuntu/ :

dd if=/dev/zero of=/media/ubuntu/partition/zero.tmp bs=10M

Comptez quelques heures pour 1To. Puis :

rm /media/ubuntu/partition/zero.tmp

Seconde étape : copie et compression des partitions

Vous aurez besoin d’un support de stockage externe.

Démontez toutes les partitions (sauf le disque externe 😉 ) montées dans /media/ubuntu/ avec umount. Utilisez la commande suivante pour lister vos partitions :

fdisk -l

Vous pouvez à présent compresser au choix votre disque entier (/dev/sdx sans chiffre) ou les partitions inviduellement.

threads=0 signifie « tous les cœurs » :

dd if=/dev/sdc4 bs=1M | xz --threads=0 > /media/ubuntu/disque_externe/fichier.xz

La décompression se fera comme ceci :

xz --decompress --threads=0 --keep --stdout /media/ubuntu/disque_externe/fichier.xz | dd of=/dev/sdc4 bs=1M

Cette série d’articles peut vous intéresser :

  1. Un NAS-médiacenter-seedbox-steambox- PC de salon pour 1000€
  2. Comment prémunir votre NAS contre le maximum de risques
  3. Choix des composants de mon NAS 2017
  4. Montage des composants dans le BitFenix Phenom M version Micro ATX
  5. Mise en place d’un dual-boot en présence d’un RAID
  6. Montage Plug-and-Play des clés USB sous Debian sans interface graphique
  7. Installation de Kodi sur Debian 8 comme interface multimédia
  8. Installation d’OpenMediaVault 3 sur Debian 8 comme interface web d’administration
  9. Installation de Deluge sur Debian 8 comme interface web de téléchargement de torrents
  10. Ruse pour compresser efficacement une image de partition sous Linux

7 commentaires sur “Ruse pour compresser efficacement une image de partition sous Linux

  1. Hello,

    Quel intérêt par rapport à une image faite avec CloneZilla, qui ne sauvegarde que les secteurs effectivement utilisés ?

  2. Pas mal comme ruse 🙂
    Je préfère de mon côté effectuer en premier la copie bit à bit, puis monter celle-ci et réduire la partition qu’elle contient afin de libérer de la place.
    Il y a une très bonne procédure pour cela à cette adresse : https://softwarebakery.com/shrinking-images-on-linux
    Je l’ai testé avec succès sur des images de sauvegarde des cartes SD et MMC de mes Raspberry Pi et Odroid XU4.

  3. Salut Ned, eh bien je ne connaissais pas CloneZilla, j’imagine que l’intérêt le plus évident est que mon tuto fonctionne depuis n’importe quel Live CD Linux, voire même depuis un second Linux installé à même la machine, par le réseau, etc. Par ailleurs, dans les limitations de CloneZilla je lis « The destination partition must be equal or larger than the source one » ce qui m’aurait bien posé soucis.

    Hello Waraxe ! Ta solution fonctionne, mais ma problématique c’était que je devais sauvegarder un disque de 1To sur un disque externe de 1To plein de films : la place dispo pour recevoir la sauvegarde était très limitée !

    Pour vous répondre globalement, dd est un outil simple et redoutablement efficace, comme Gparted. Ça rentre ici, ça ressort là. Ça me donne une grande confiance dans le fait de pouvoir réinstaller mes images en cas de problème.

  4. @Vincent : En effet, la compression à la volée permet d’obtenir tout de suite une image de petite taille.
    De plus, ma méthode nécessite de ré-étendre la partition dont la taille a été réduite après l’avoir restauré sur le disque.

  5. Si je peux me permettre:
    J’ai une préférence pour la combinaison partclone+pigz.

    partclone ne sauvegarde que les secteurs occupés, faisant gagné un temps formidable.
    Quand à pigz, il remplace gzip et produit des fichiers compatible bien plus rapidement (multi-coeurs).

    J’embarque les package (.deb) de ces deux logiciels sur ma clé USB bootable, ce qui me permet de faire des images de n’importe quel OS à vitesse maximale.

  6. Géniale la combinaison partclone – pigz. Avec une live usb intégrant la persistance, c’est de loin la meilleure solution

  7. Ok mon commentaire précédent est nul et non avenu. lzam2 étant effectivement le format par défaut de xz.
    Dommage qu’ils n’aient pas prit le temps de le préciser explicitement au début du man

L'espace de discussion de cet article est désormais fermé.