Wie mounte ich ein komprimiertes Disk-Image?

10

Wenn ich ein Disk-Image mache und komprimiere sie mit gzip / XZ / etc ist es eine Möglichkeit , es zu montieren direkt , ohne sie vorher dekomprimiert?

Angenommen, ich habe verwendet

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

Wie kann ich das Originalbild mounten, ohne zuerst eine unkomprimierte Kopie zu erstellen?

Oder ich habe verwendet

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

und die Festplatte hat mehrere Partitionen. Würde das die Arbeit erschweren?

Mit einem unkomprimierten Image einer ganzen Festplatte, die dann kpartxoder neuere Versionen von losetupmit verwendet wird-P flag eine Schleife für jede Partition erstellt werden.

Aber gibt es eine Möglichkeit, das komprimierte Bild zu mounten / zu verlieren / zu lesen?

Wenn es für gzip / xz nicht funktioniert, gibt es eine Komprimierungsmethode, für die dies funktionieren würde?


Hinweis zum Duplikat Q.

Das aktuell vorgeschlagene Duplikat

Benutzt überhaupt keine COMPRESSION und kein Duplikat .

mount wird ein komprimiertes Image nicht selbst mounten.

Xen2050
quelle
Ich kann Ihnen sagen, dass es definitiv möglich ist. Aber ich kann Ihnen nicht sagen, wie atm, weil die Anweisungen auf 2 externen Festplatten sind und ich im Moment auf keine zugreifen kann, aber ich möchte Sie wissen lassen, dass es funktioniert. Ich werde mit einer Antwort zurückkommen, wenn ich eine habe (und bis dahin hat noch niemand eine gepostet).
UTF-8
1
@ UTF-8 Das ist ermutigend, danke. FYI, ursprüngliches Ziel ist es, eine kleinere Sicherung einer Platte / Partition zu machen , die fast leer sind oder haben viele leicht komprimierbaren Daten, und in der Lage sein , es zu lesen , ohne eine Menge zusätzlicher Daten zu schreiben oder eine Tonne freier Speicherplatz benötigen , um sie zu extrahieren
Xen2050
Siehe auch major.io/2010/12/14/…
Panther
1
@ bodhi.zazen Verzeihung? Vielleicht sollte ich klarstellen, dass Mount Bilder nicht automatisch dekomprimiert , daher ist dieses Q kein Duplikat von askubuntu.com/questions/69363 (vielleicht habe ich den Witz verpasst, hoffentlich ist das
Dekomprimieren

Antworten:

9

Sie können squashfsdamit Disk-Images komprimieren und dann mounten.

Erstellen Sie das Disk-Image

Wenn Sie noch kein Disk-Image haben dd, erstellen Sie eines:

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

Komprimieren Sie das Bild mit Squashfs

Installieren squashfs:

apt-get install squashfs-tools

Komprimieren Sie das Bild:

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

Oder streamen Sie die Komprimierung (benötigen Sie keine temporäre dd-Datei)

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

Kompliment an terminator14 bei UbuntuForums.org . Definitionen / Erklärungen:

  • empty-dir- "Quell" -Dir. Grundsätzlich in unserem Fall nur ein leeres Verzeichnis, um das Eingabe-Arg-Format von mksquashfs zu erfüllen
  • squash.img - Ziel und Dateiname der Ausgabe-Squashfs-Datei
  • sda_backup.img - Der Name der DD-Sicherung IN der Squashfs-Datei
  • f - Gibt an, dass sda_backup.img eine reguläre Datei ist (im Gegensatz zu einem Verzeichnis, einem Blockgerät oder einem Zeichengerät).
  • 444 - Berechtigungen der Datei sda_backup.img im squashfs-Image
  • root root- UID und GID für die Datei sda_backup.img im squashfs-Image. Kann durch Dezimalzahlen oder durch Namen angegeben werden
  • dd if=/dev/sda bs=4M - Der Befehl dd zum Lesen des Geräts, das gesichert werden soll

Montiere das Bild

Montieren Sie zuerst das squashfsBild:

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

Dadurch wird das nicht komprimierte Disk-Image angezeigt, das Sie bereitstellen können:

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

Oder wenn es ein voller Antrieb Bild ist (partitioniert) Sie nutzen könnten losetupdas dd Bild zu einem Loop - Gerät (möglicherweise optional) befestigen und dann kpartx -aoder partprobezu finden und die Partitionen separater Geräte zu trennen, oder auch vgscan/ vgchange -aywenn es LVM ist.

Eborbob
quelle
2
Ich habe einige spontane Squashfs-Informationen hinzugefügt, um zu vermeiden, dass eine temporäre einfache dd-Datei benötigt wird. Tolle Antwort mit Squashfs, macht einfach nicht die
pfeifenfreundlicheren
Würde das irgendwie mit einem vollständigen Disk-Image funktionieren, das auch mehrere Partitionen enthält?
Friederbluemle
6

Ich konnte einen NBD-Server dazu bringen, eine nicht komprimierte Version einer .gz- oder .xz-Datei "bereitzustellen". Ich bin mir nicht sicher, ob es die gesamte komprimierte Datei sehr oft lesen muss (bisher nur mit kleinen Dateien im RAM getestet), aber zumindest funktioniert es, ohne dass eine ganze nicht komprimierte Kopie extrahiert werden muss.

Anzeigen eines gz / xz-komprimierten dd-Bildes "on-the-fly"

  1. Installieren Sie nbdkit & client

    apt install nbdkit nbd-client
    
  2. Erstellen Sie eine Demo-Datei im "dd" -Stil - eine leere 50-MB-Datei mit einem ext-Dateisystem und komprimieren Sie sie (nur zum Testen optional)

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

    Dann entweder mit gzip oder xz komprimieren

    gzip -vk9 50m
    xz -v9k 50m
    

    Hinweis: Eine xzOption von --block-size=16MiBsollte eine bessere Direktzugriffsleistung bieten , jedoch auf Kosten einer geringeren Komprimierung (möglicherweise 1%?). Siehe die Beschreibung des xz-Plugins des nbdkit .

  3. Führen Sie den Server auf dem COMPRESSED-Image aus

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

    oder für 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
    

    Das --no-forksagt dem Server "Nicht in den Hintergrund treten", so dass es etwas einfacher ist, mögliche Fehlermeldungen zu sehen und sie mit STRG-C zu beenden.

    -v kann / wird zu viele Statusmeldungen anzeigen, insbesondere beim Lesen.

  4. Client ausführen (in einem anderen Terminal / Fenster)

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

    Das -noforkist ähnlich wie -no-forkoben, aber ich kann nicht den Client mit CTRL-C, töten kill <pid>, oder sudo kill <pid>. Durch Beenden des Servers mit STRG-C wurden sowohl Server als auch Client gestoppt.

  5. Beachten Sie, dass dies /dev/nbd0jetzt mit dem UN-COMPRESSED-Bild identisch ist

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

    /dev/nbd0kann jetzt genau wie das unkomprimierte Bild verwendet werden; angebracht ist , lesen / kopieren mit ddoder Verwendung kpartx, partprobe, vgscan/ vgchange, etc!

Dank Cristian Ciupitu unter Unix und Linux , obwohl es etwas länger gedauert hat , das Plugin zu finden und alles zusammenzubringen.

Xen2050
quelle
Auf Fedora 31 nbdkit -v --no-fork -i 127.0.0.1 --filter=xz file ~/Downloads/50m.xzfunktionierte großartig mit dem gleichen Client-Befehl
EkriirkE
Auf Ubuntu xenial 16.04 LTS nbdkit 1.1.11 verwendet altes Protokoll NBD, die sie von neuem NBD - Protokoll, das nbd-client 3.13, aber Sie ca NBD-Client - Version vor 3.10, zum Beispiel verwenden nbd-client 3.8 from Ubuntu precise 12.04 old LTS[Sicherheitsgründe nur lokal Gebrauch alte Versionen!]
user1742529
0

Hier ist meine Vorgehensweise, ich kenne das Konsolenäquivalent dazu jedoch nicht.

  • Komprimieren Sie den Ordner in eine ISO. Geben Sie hier die Bildbeschreibung ein
  • Hängen Sie die .isoDatei mit ein Disk Image Mounter. Geben Sie hier die Bildbeschreibung ein
  • Tada Ich öffne die komprimierte ISO, ohne sie auszupacken. Geben Sie hier die Bildbeschreibung ein
hallozee
quelle
4
Komprimiert diese Methode die Daten tatsächlich ? Es sieht so aus, als würde ein einfaches iso9660-Bild (über File-Roller?) Verwendet, das keine Komprimierung verwendet. Ich habe es mit einer 100-MB-Datei aller Nullen ( dd if=/dev/zeround einer Dateirolle) versucht und es werden tatsächlich 362 KB Daten hinzugefügt (ISO-Overhead, nehme ich an). Vielen Dank, die Idee ist auf dem richtigen Weg
Xen2050
Tut mir leid, aber ich habe keine Ahnung von Komprimierungstechnologien, aber wenn Sie ein anderes Komprimierungsformat ausprobieren, können Sie es wahrscheinlich auch mit File-Roller auflisten. Wenn Sie diese Datei lesen möchten, müssen Sie nur diese bestimmte Datei extrahieren.
Hallo,