web-dev-qa-db-fra.com

Comment monter une image disque compressée?

Si je crée une image disque et la compresse avec gzip/xz/etc, existe-t-il un moyen de la monter directement sans la décompresser au préalable?

Dis que j'ai utilisé

Sudo dd if=/dev/sdc1 | gzip -9 > image1.dd.gz

comment puis-je monter l'image d'origine sans créer une copie non compressée au préalable?

Ou j'ai utilisé

Sudo dd if=/dev/sdc | gzip -9 > wholedisk.dd.gz

et le disque a plusieurs partitions, est-ce que cela le rendrait plus difficile?

Avec une image non compressée d'un disque entier, l'utilisation de kpartx ou des versions plus récentes de losetup avec son drapeau -P devrait créer une boucle pour chaque partition.

Mais existe-t-il un moyen de monter/perdre/lire l'image compressée?

Si cela ne fonctionne pas pour gzip/xz, y a-t-il une méthode de compression pour laquelle cela fonctionnerait?


Note sur la copie Q

Le duplicata actuellement suggéré

N'UTILISE PAS LA COMPRESSION , et N'EST PAS UN DUPLICATA .

mount ne montera pas une image compressée par elle-même.

10
Xen2050

J'ai pu obtenir un serveur NBD pour "servir" une version non compressée d'un fichier .gz ou .xz. Je ne sais pas s'il doit lire très souvent l'intégralité du fichier compressé (testé jusqu'à présent avec de petits fichiers en RAM), mais au moins cela fonctionne sans avoir à extraire une copie complète non compressée.

Visualisation d'une image dd compressée gz/xz "à la volée"

  1. Installer nbdkit et client

    apt install nbdkit nbd-client
    
  2. Créer un fichier de style "dd" - un fichier 50M vide avec un système de fichiers ext et le compresser (facultatif pour les tests uniquement)

    fallocate -l 50M 50m
    mkfs.ext3 -v 50m
    

    Compressez ensuite avec gzip ou xz

    gzip -vk9 50m
    xz -v9k 50m
    

    Remarque: Une option xzde --block-size=16MiB devrait offrir de meilleures performances d'accès aléatoire, mais aux dépens d'une compression moindre (peut-être 1%?). Voir le description du plugin xz du nbdkit .

  3. Exécuter le serveur sur l'image COMPRESSED

    nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-gzip-plugin.so file=~/Downloads/50m.gz
    

    ou pour xz

    nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-xz-plugin.so file=~/Downloads/50m.xz
    

    Le --no-fork indique au serveur "Ne pas basculer en arrière-plan" . Il est donc un peu plus facile de voir les messages d'erreur possibles et de les éliminer avec CTRL-C.

    -v peut afficher/affichera trop de messages d'état, notamment lors de la lecture.

  4. Exécuter le client (dans un autre terminal/fenêtre)

    Sudo nbd-client -nofork 127.0.0.1 10809 /dev/nbd0
    

    Le -nofork est semblable au -no-fork ci-dessus, mais je pourrais ne pas tuer le client avec CTRL-C, kill <pid> ou Sudo kill <pid>. Terminer le serveur avec CTRL-C a arrêté le serveur et le client.

  5. Notez que /dev/nbd0 est maintenant identique à l'image UN-COMPRESSED

    $ Sudo diff -s /dev/nbd0 ~/Downloads/50m
    Files /dev/nbd0 and /home/user/Downloads/50m are identical
    

    /dev/nbd0 peut maintenant être utilisé comme l'image non compressée; monté, lecture/copie avec ddname__, ou utilisez kpartxname__, partprobename__, vgscanname__/vgchangename__, etc.!

Merci à Cristian Ciupitu sur Unix et Linux , bien que cela ait pris un peu plus de temps pour trouver le plugin et que tout soit ensemble.

6
Xen2050

Vous pouvez utiliser squashfs pour compresser les images de disque, puis les monter.

Créer l'image disque

Si vous n'avez pas encore d'image disque, utilisez dd pour en créer une:

dd if=/dev/sda1 of=/tmp/sda1.img bs=4M

Compresser l'image avec des squashfs

Installez squashfs:

apt-get install squashfs-tools

Compressez l'image:

mksquashfs /tmp/sda1.img /tmp/sda1.squash.img

Ou diffuser la compression (vous n'avez pas besoin d'un fichier dd temporaire)

mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'

Compliments to terminator14 sur UbuntuForums.org . Définitions/explications:

  • empty-dir - Rép. "Source" Fondamentalement, dans notre cas, juste un répertoire vide pour satisfaire le format d'argument d'entrée de mksquashfs
  • squash.img - la destination et le nom du fichier squashfs en sortie
  • sda_backup.img - nom de la sauvegarde dd dans le fichier squashfs
  • f - Spécifie que sda_backup.img est un fichier normal (par opposition à un répertoire, un périphérique en mode bloc ou un périphérique char).
  • 444 - autorisations du fichier sda_backup.img à l'intérieur de l'image squashfs
  • root root - UID et GID du fichier sda_backup.img dans l'image squashfs. Peut être spécifié par des nombres décimaux ou par nom
  • dd if=/dev/sda bs=4M - Commande dd utilisée pour lire le périphérique que nous voulons sauvegarder.

Monter l'image

Commencez par monter l'image squashfs:

mkdir /mnt/squash
mount /tmp/sda1.squash.img /mnt/squash

Ceci présentera l’image disque non compressée que vous souhaitez monter:

mkdir /mnt/sda1
mount /mnt/squash/sda1.img /mnt/sda1

Ou, s'il s'agit d'une image de lecteur complète (partitionnée), vous pouvez utiliser losetup pour associer l'image dd à un périphérique en boucle (éventuellement facultatif), puis kpartx -a ou partprobe pour rechercher et séparer les partitions permettant de séparer les périphériques, ou même vgscan/vgchange -ay s'il existe de LVM .

9
Eborbob

Voici ma façon de le faire, ne connais pas l’équivalent console de cela,

  • Compressez le dossier dans une iso. enter image description here
  • Montez le fichier .iso avec Disk Image Mounter. enter image description here
  • Tada j'ouvre l'iso compressé sans le décompresser. enter image description here
0
hellozee