![Komprimiertes Disk-Image unter Linux](https://rvso.com/image/1267762/Komprimiertes%20Disk-Image%20unter%20Linux.png)
Ich habe gerade meinen neuen Computer mit einer viel größeren Festplatte bekommen. Ich glaube, ich habe alle wichtigen Dateien kopiert, aber um sicherzugehen, möchte ich ein Disk-Image meiner alten Festplatte behalten. Um Platz zu sparen, würde ich es gerne komprimieren, aber ich habe keine Option zum Mounten eines komprimierten Images gefunden.
Meine Ziele:
- Das Ergebnis muss leicht zugänglich sein
- Ich muss nicht alles dekomprimieren, bevor ich auf irgendetwas zugreifen kann
- Dateien sollten schnell zu finden sein – kein TAR/CPIO-Archiv
- Der benötigte Speicherplatz sollte geringer sein als beim Kopieren der Dateien.
Idealerweise suche ich nach einem schreibgeschützten, komprimierten Dateisystem, das ich in einer Datei erstellen kann und das automatisch wächst.
Antwort1
Verwenden Sie eine forensische Analysesoftware wieGUYMAGER(Open Source, sourceforge.net). Es verfügt über eine nette Benutzeroberfläche, mit der sich schnell ein komprimiertes Disk-Image einer gesamten Festplatte erstellen lässt.
Verwenden Sie „Erweitertes forensisches Image (.aff)“. Dadurch wird eine einzelne, komprimierte Datei erstellt (und es wird auch eine .info-Datei erstellt).
So ändern Sie die Standardkomprimierungsrate 1 (schnellste, aber geringste Komprimierung). Wenn Sie einen schnellen Computer mit vielen Kernen haben, können Sie dies ändern, indem Sie Folgendes erstellen /etc/guymager/local.cfg
:
AffCompression = 3
9
ist die beste, aber langsamste Komprimierung. 3
Bietet eine gute Komprimierung mit guter Leistung.
Aktualisieren
Die Montage ist nicht so einfach, wie es scheint. Zunächst einmal brauchen SieAFFLIB(Ubuntu: aptitude install afflib-tools
). Jetzt können Sie das Raw-Disk-Image mit[affuse][3] <image> <mount-point>
Aber aus irgendeinem Grund schlägt das Mounten des Rohbildes fehl. parted
sagt, die erste Partition beginnt mit 1048576B
aber
mount -t ext4 -o loop,ro,offset=1048576 /mnt/backup.raw /mnt/backup
schlägt mit dem üblichen nutzlosen Mount-Fehler fehl:
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
und dmesg
sagt:
EXT4-fs (loop0): VFS: Can't find ext4 filesystem
Antwort2
Wie Matthias Krull im obigen Kommentar vorschlägt, kann qcow2 ein gutes Format sein, das Komprimierung unterstützt, um ein Disk-Image darin zu speichern. Es wird noch eine ganze Weile unterstützt, da es das Format für Disk-Images virtueller QEMU-Maschinen ist. Hier ist ein Beispielbefehl, der /dev/sda
in die komprimierte Image-Datei komprimiert sda.qcow2
. Standardmäßig wird zlib-Komprimierung verwendet, aber ich denke, zstd hat möglicherweise eine bessere Komprimierungsrate. 8 Threads werden verwendet, um den Durchsatz zu erhöhen, aber Sie sollten das an die Anzahl Ihrer Prozessorkerne anpassen.
qemu-img convert -c -p -S 512 -o compression_type=zstd" -f raw -O qcow2 -m 8 \
/dev/sda sda.qcow2
Greifen Sie auf das Image als schreibgeschütztes Blockgerät zu. NBD (Network Block Device) kann wie folgt verwendet werden:
modprobe nbd
qemu-nbd -r -c /dev/nbd0 sda.qcow2
kpartx -av /dev/nbd0
Anschließend kann das Dateisystem wie gewohnt mit mount
und das entsprechende Device in gemountet werden /dev/mapper
.
Antwort3
Bei Dateisystemen, die Blockkomprimierung unterstützen, besteht eine Möglichkeit darin, das Disk-Image direkt als Datei zu speichern. Ich weiß, dass BTRFS dies unterstützt, aber wahrscheinlich auch andere. Im Fall von BTRFS müssen Sie wahrscheinlich die Mount-Option aktivieren, compress-force
um die unkomprimierbare Heuristik zu überschreiben. Sie möchten auch eine Sparse-Datei erstellen. Dies kann mit erfolgen dd
, wie in diesem Beispiel:
dd if=/dev/sda of=/mount/btrfs/sda.img conv=sparse,fsync iflag=nocache oflag=nocache
Dadurch wird eine Sparse-Datei erstellt, sodass Null-Sektoren keinen Speicherplatz beanspruchen, und BTRFS komprimiert komprimierbare Blöcke (vorausgesetzt, Sie haben dies aktiviert). Mit dem compsize
Tool können Sie sehen, wie stark die Datei komprimiert ist. Die Verwendung von du
zeigt nur die Größe der unkomprimierten Datei abzüglich der Lücken an und ist daher nicht genau.
Um beliebige Dateisysteme im Image zu mounten, kann Folgendes verwendet werden:
LOOPDEV=$(losetup --show -f /mount/btrfs/sda.img)
kpartx -av "$LOOPDEV"
mount /dev/mapper/"$LOOPDEV"p3 # To mount the 3rd partition
Wenn Sie kein Dateisystem mit nativer Komprimierung verwenden, z. B. ext4
, können Sie diese Methode trotzdem verwenden, indem Sie das Disk-Image in ein BTRFS-Dateisystem-Image einbinden. Das könnte so aussehen:
truncate -s 100G backup-sda.btrfs.img
mkfs.btrfs backup-sda.btrfs.img
mount -o compress-force=zstd:9 backup-sda.btrfs.img /media/tmp
cd /media/tmp
# Now do commands to create disk image as above
Diese Methode ermöglicht mehr Kontrolle über die Komprimierungsalgorithmen und die Komprimierungsstufe als die Methode mit qemu-img convert
, die nur die Auswahl der Komprimierungsmethode, nicht der Stufe zulässt und über weniger verfügbare Komprimierungsmethoden verfügt.