Ich erstelle gerne ein Image-Backup, wenn ich zum ersten Mal ein System sichern möchte. Nach diesem ersten Mal verwende ich rsync, um inkrementelle Sicherungen durchzuführen.
Meine übliche Image-Sicherung sieht wie folgt aus:
Hängen Sie den leeren Raum ein und nullen Sie ihn aus:
dd if=/dev/zero of=temp.dd bs=1M
rm temp.dd
mounten und dd das Laufwerk beim Komprimieren
dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz
Um das System wieder normal zu machen, mache ich normalerweise a
gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K
Dies ist wirklich unkompliziert und ermöglicht es mir, das "gesamte Laufwerk" zu speichern, aber wirklich nur den verwendeten Speicherplatz zu sparen.
Hier liegt das Problem. Nehmen wir an, ich mache das oben genannte, aber nicht auf einem sauberen System und bekomme die rsync-Sicherungen nicht schnell genug zum Laufen und es gibt Dateien, auf die ich zugreifen möchte, die sich auf dem Image befinden. Angenommen, ich habe nicht den Speicherplatz, um das Image zu entpacken und auf ein Laufwerk zu kopieren, sondern möchte das Image einbinden, um einzelne Dateien daraus zu entfernen. Ist dies möglich?
Normalerweise würde man das dd-Image nicht komprimieren, so dass Sie es einfach mit einbinden können -o loop
... aber das ist nicht mein Fall ...
Irgendwelche Vorschläge für die schnelle Montage des komprimierten Bilds?
Würde die Verwendung von AVFS zum 'Mounten' der gz-Datei und das Mounten der internen dd.img funktionieren (ich glaube nicht ... aber müsste überprüft werden ...)?
quelle
SquashFS
für diese Art von Dingen verwenden. Duplizierte Dateien werden ebenfalls de-dupiert.Antworten:
Dies hängt davon ab, ob es sich bei dem Festplattenimage um ein vollständiges Festplattenimage oder nur um eine Partition handelt.
Waschen der Partition (en)
Wenn die Festplatte in gutem Zustand ist, erhalten Sie eine bessere Komprimierung, wenn Sie den leeren Bereich auf der Festplatte mit Nullen reinigen. Wenn der Datenträger ausfällt, überspringen Sie diesen Schritt.
Wenn Sie ein Image einer gesamten Festplatte erstellen, möchten Sie alle Partitionen auf der Festplatte löschen.
VORSICHT: Achten Sie darauf, dass Sie
of
eine Datei in der bereitgestellten Partition festlegen möchten , NICHT DIE PARTITION SELBST!Partitionsimage erstellen
Wo
sda
ist der Name des Geräts und1
ist die Partitionsnummer. Passen Sie dies an Ihr System an, wenn Sie ein Image eines anderen Geräts oder einer anderen Partition erstellen möchten.Erstellen eines vollständigen Image
Wo
sda
ist der Name des Geräts? Passen Sie dies an Ihr System an, wenn Sie ein anderes Gerät abbilden möchten.Kompression
Erstellen Sie ein "Squashfs" -Bild, das das gesamte unkomprimierte Bild enthält.
Streaming-Komprimierung
Um zu vermeiden, dass eine separate temporäre Datei die volle Größe der Festplatte annimmt, können Sie ein Squashfs-Image streamen.
Mounten eines komprimierten Partitionsimages
Mounten Sie zuerst das Squashfs-Image und dann das im gemounteten Squashfs-Image gespeicherte Partitions-Image.
Nun haben Sie das komprimierte Image gemountet, mounten Sie das Image selbst (das sich innerhalb des Squashfs-Images befindet)
Nun ist Ihr Bild unter gemountet
compressed_image
.BEARBEITEN: Wenn Sie das Festplatten-Image an dieser Stelle einfach auf einer Partition wiederherstellen möchten (anstatt es zum Durchsuchen / Lesen des Inhalts anzuhängen), müssen Sie stattdessen nur
dd
das Imagesquash_mount/sda1_backup.img
auf dem Ziel speichernmount
.Mounten eines komprimierten vollständigen Disk-Image
Dazu müssen Sie ein Paket namens kpartx verwenden. Mit kpartx können Sie einzelne Partitionen in ein vollständiges Festplatten-Image einbinden.
Mounten Sie zuerst Ihre komprimierte Partition, die das vollständige Festplatten-Image enthält
Jetzt müssen Sie Geräte für jede Partition im vollständigen Festplatten-Image erstellen:
Dadurch werden Geräte für die Partitionen im vollständigen Datenträgerabbild erstellt,
/dev/mapper/loopNpP
wobei N die für das Loopback-Gerät zugewiesene Nummer und P die Partitionsnummer ist. Zum Beispiel:/dev/mapper/loop0p1
.Jetzt haben Sie die Möglichkeit, die einzelnen Partitionen im vollständigen Festplatten-Image zu mounten:
quelle
-p
oder können Sie Squashfs streamen-pf
, um eine Pseudodatei zu übergeben. Eine Pseudodatei kann verwendet werden, um Geräteknoten zu erstellen, auf die Sie sonst nicht ohne root verzichten können (nützlich zum Erstellen von Images als Teil eines Erstellungsprozesses) oder um die Ausgabe eines Befehls in das Image zu streamen. Eines der in den Dokumenten angegebenen Beispiele (/usr/share/doc/squashfs-tools/examples/pseudo-file.example
unter Debian / Ubuntu) besteht darininput f 444 root root dd if=/dev/sda1 bs=1024 count=10
, die ersten 10 KB von einem Disk-Image in eine Datei mit dem Namen "input" im squashfs-Image zu kopieren.Wenn das Bild schreibgeschützt ist , können Sie auch nbdkit ( man page ) und das xz-Plugin verwenden (xz sollte eine bessere Komprimierungs- und Direktzugriffszeit bieten als gzip).
Erstellen Sie das komprimierte Partitionsimage
Eine
--block-size
Option von 16 MB sollte eine gute Direktzugriffsleistung bieten.Hinweis: Sie können alternative xz-Komprimierungsprogramme wie pixz verwenden, die eine parallele Komprimierung ermöglichen. Stellen Sie jedoch sicher, dass die Ausgabe in mehrere kleine Blöcke aufgeteilt wird. Andernfalls muss nbdkit viele Daten dekomprimieren. Zum Beispiel unterstützt pxz ab September 2015 dies nicht.
Servieren Sie es mit Nbdkit
Stellen Sie eine Verbindung zum NBD-Server her
Mounten Sie es schreibgeschützt
Wenn Sie fertig sind
Beenden Sie nbdkit durch Drücken von Ctrl+ C(oder mit kill ).
quelle
Versuchen
archivemount
archivemount ist ein FUSE-basiertes Dateisystem für Unix-Varianten, einschließlich Linux. Der Zweck ist das Mounten von Archiven (z. B. tar, tar.gz usw.) an einem Mount-Punkt, von dem aus sie wie mit jedem anderen Dateisystem gelesen oder beschrieben werden können. Dadurch wird der Zugriff auf die Inhalte des Archivs, die komprimiert sein können, für andere Programme transparent, ohne sie zu dekomprimieren.
http://linuxaria.com/howto/how-to-mounts-an-archive-for-access-as-a-file-system
Nach dem Mounten des Archivs können Sie den Inhalt wie eine normale Datei verwenden. Vielleicht Partitionstabelle abrufen oder konvertieren, Image mit QEMU-Tools mounten.
squashfs nützlich für das Booten vom Image, aber sehr komplex für das Backup.
quelle
dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz
Diese Antwort ergänzt die Antwort von Cristian Ciupitu . Wenn Sie die xz-Komprimierung mit einer angemessenen Blockgröße verwenden, können Sie mit guestfish oder anderen libguestfs- Tools wie folgt auf das Disk-Image zugreifen :
quelle
Nicht wirklich. Sie können nicht wirklich nach einem bestimmten Block in der komprimierten Datei suchen, ohne das Ganze zuerst zu dekomprimieren, was es schwierig macht, das komprimierte Bild als Blockgerät zu verwenden.
Sie können so etwas wie
dump
undrestore
(odertar
wirklich) verwenden, die alle ein Streaming-Format verwenden. Sie können also auf einzelne Dateien zugreifen, indem Sie den unkomprimierten Stream effektiv durchsuchen. Wenn sich die gewünschte Datei am Ende des komprimierten Archivs befindet, kann es sein, dass Sie lange warten müssen, Sie müssen jedoch nicht alles auf die Festplatte dekomprimieren.Die Verwendung
tar
für Backups mag ein bisschen altmodisch erscheinen, aber Sie erhalten viel Flexibilität.quelle
Ein weiterer Nachtrag zu Cristian Ciupitu's Antwort :
Wenn Sie
nbdkit
ein vollständiges Festplatten-Image (im Gegensatz zu einem Partitions-Image) bereitstellen, müssen Sie möglicherweise die Blockgröße (Sektorgröße der Festplatte) angeben, wenn Sie eine Verbindung zum NBD-Server herstellen, da standardmäßig1024
Bytes verwendet werden. So verwenden Sie512
stattdessen Bytes:Danach erscheint der Datenträger als
/dev/nbd0
und Sie sollten in der Lage sein, die Partitionstabelle mit anzuzeigenfdisk -l
. Die Partitionen sind jedoch noch nicht bereitstellbar. Verwenden Siekpartx
(aus der Antwort von doug65536 ), um Geräte für die Partitionen zu erstellen, z.Schließlich werden die Partitionen in angezeigt
/dev/mapper/
, und Sie können sie wie gewohnt bereitstellen. Stellen Sie sicher, dass Sie den schreibgeschützten Modus (-o ro
) verwenden, da das xz-Plugin nur Lesevorgänge unterstützt:quelle