Comment monter une image disque compressée?

12

Si je crée une image disque et la compresse avec gzip / xz / etc, est-il possible 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 d'abord une copie non compressée?

Ou j'ai utilisé

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

et le disque a plusieurs partitions, cela rendrait-il la tâche plus difficile?

Avec une image non compressée d'un disque entier, l'utilisation de kpartxversions plus récentes ou losetupavec son -Pindicateur 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, existe-t-il une méthode de compression pour laquelle cela fonctionnerait?


Remarque sur les doublons Q

Le doublon actuellement suggéré

EST-CE PAS UTILISER COMPRESSION , et ne est pas dupliquée .

mount ne montera pas une image compressée seule.

Xen2050
la source
Je peux vous dire que c'est définitivement possible. Mais je ne peux pas vous dire comment atm parce que les instructions sont sur 2 disques durs externes et en ce moment je n'ai accès à aucun des deux mais je veux vous faire savoir que cela fonctionne. Je reviendrai avec une réponse quand j'en aurai une (et personne d'autre n'en a affiché une jusque-là).
UTF-8
3
Copie possible de la partition unique
Panther
1
@ UTF-8 C'est encourageant, merci. Pour info, l'objectif initial est de faire une sauvegarde plus petite d'un lecteur / partition qui est presque vide ou qui contient beaucoup de données facilement compressibles, et de pouvoir le lire sans écrire BEAUCOUP de données supplémentaires ou avoir besoin d'une tonne d'espace libre pour les extraire
Xen2050
Voir aussi major.io/2010/12/14/…
Panther
2
@ bodhi.zazen Pardon? Peut-être que je devrais clarifier, le montage ne décompresse pas automatiquement les images, donc ce Q n'est pas un doublon de askubuntu.com/questions/69363 (peut-être que j'ai raté la blague, j'espère que la décompression n'est pas la seule réponse :)
Xen2050

Réponses:

10

Vous pouvez utiliser squashfspour compresser les images de disque puis les monter.

Créer l'image disque

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

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

Compressez l'image avec des squashfs

Installer squashfs:

apt-get install squashfs-tools

Compressez l'image:

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

Ou diffuser la compression (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 à terminator14 sur UbuntuForums.org . Définitions / explications:

  • empty-dir- dir "source". Fondamentalement dans notre cas, juste un répertoire vide pour satisfaire le format d'arg d'entrée de mksquashfs
  • squash.img - la destination et le nom du fichier squashfs de sortie
  • sda_backup.img - le 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 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 pour le fichier sda_backup.img à l'intérieur de l'image squashfs. Peut être spécifié par des nombres décimaux ou par son nom
  • dd if=/dev/sda bs=4M - la commande dd utilisée pour lire le périphérique que nous voulons sauvegarder

Montez l'image

Montez d'abord l' squashfsimage:

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

Cela présentera l'image disque non compressée à 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 losetuppour attacher l'image dd à un périphérique en boucle (éventuellement en option), puis kpartx -aou partprobepour rechercher et séparer les partitions sur des périphériques distincts, ou même vgscan/ vgchange -ays'il y a LVM.

Eborbob
la source
2
J'ai ajouté quelques informations squashfs à la volée, pour éviter d'avoir besoin d'un fichier dd ordinaire temporaire. Excellente réponse avec squashfs, ne fait tout simplement pas les formats xz / gz plus conviviaux
Xen2050
Cela fonctionnerait-il d'une manière ou d'une autre avec une image disque complète contenant plusieurs partitions?
friederbluemle
Voir ici pour le disque complet: unix.stackexchange.com/questions/31669/…
HackerBoss
Selon le type de système de fichiers, le montage peut nécessiter les ro,noloadoptions, comme ceci:mount -o ro,noload /mnt/squash/sda1.img /mnt/sda1
HackerBoss
7

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 l'intégralité du fichier compressé très souvent (testé jusqu'à présent uniquement avec de petits fichiers en RAM) mais au moins cela fonctionne sans avoir à extraire une copie non compressée entière.

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" de démonstration - un fichier vide de 50 Mo 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 xzoption de --block-size=16MiBdevrait donner de meilleures performances d'accès aléatoire, mais au détriment de moins de compression (peut-être 1%?). Voir la description du plugin xz du nbdkit .

  3. Exécuter le serveur sur une image COMPRESSÉE

    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-forkdit au serveur "Ne pas fourrer en arrière-plan", donc voir les messages d'erreur possibles et les tuer avec CTRL-C est un peu plus facile.

    -v peut / affichera trop de messages d'état, en particulier 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 -noforkest similaire à -no-forkci-dessus, mais je n'ai pas pu tuer le client avec CTRL-C,, kill <pid>ou sudo kill <pid>. La fin du serveur avec CTRL-C a arrêté le serveur et le client.

  5. Observez que /dev/nbd0c'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/nbd0peut maintenant être utilisé comme l'image non compressée; monté, lecture / copie avec ddou utilisation kpartx, partprobe, vgscan/ vgchange, etc!

Merci à Cristian Ciupitu sur Unix et Linux , bien qu'il ait fallu un peu plus de fouilles pour trouver le plugin et tout faire fonctionner ensemble.

Xen2050
la source
Sur Fedora 31 nbdkit -v --no-fork -i 127.0.0.1 --filter=xz file ~/Downloads/50m.xzfonctionnait très bien avec la même commande client
EkriirkE
Sur Ubuntu xenial 16.04 LTS nbdkit 1.1.11 utilise l'ancien protocole NBD, qui diffère du nouveau protocole NBD, utilisé dans nbd-client 3.13, mais vous pouvez utiliser la version nbd-client avant 3.10, par exemple nbd-client 3.8 from Ubuntu precise 12.04 old LTS[utiliser les anciennes versions uniquement localement pour la sécurité!]
user1742529
0

Voici ma façon de le faire, mais je ne connais pas l'équivalent de la console,

  • Compressez le dossier en un iso. entrez la description de l'image ici
  • Montez le .isofichier avec Disk Image Mounter. entrez la description de l'image ici
  • Tada J'ouvre l'iso compressé sans le déballer. entrez la description de l'image ici
hellozee
la source
4
Cette méthode comprime- t-elle réellement les données? Il semble qu'il utilise une image iso9660 ordinaire (via un rouleau de fichiers?), Qui n'utilise pas de compression. Je l'ai essayé sur un fichier de 100 Mo de tous les zéro ( dd if=/dev/zeroet file-roller) et il ajoute en fait 362k de données (surcharge iso je suppose). Merci cependant, l'idée est sur la bonne voie
Xen2050
Désolé mais je n'ai aucune idée sur les technologies de compression, mais si vous essayez un autre format de compression, je parie que vous pouvez également le répertorier avec File-Roller, mais si vous voulez lire ce fichier, vous devez extraire uniquement ce fichier spécifique.
hellozee