Ich habe ein Image einer vorhandenen Partition mit erzeugt dd if=/dev/sdXN of=image.bin
. Jetzt möchte ich dieses Image als Basis für eine virtuelle Maschine verwenden. Ich kann das Bild in ein Format umwandeln, das VirtualBox verwenden kann.
Das Problem ist, dass das "Festplatten" -Image wirklich nur das Image einer Partition ist und daher keinen MBR oder keine Partitionstabelle enthält. Dies macht es sehr schwer, die VM zu starten.
Gibt es eine einfache Möglichkeit, bei einem bestimmten Image einer Partition ein korrektes Festplatten-Image einschließlich einer Partitionstabelle zu erstellen?
quelle
Ich bin sicher, das ursprüngliche Problem wurde vor langer Zeit gelöst, aber für alle mit einem ähnlichen Problem:
Eine Möglichkeit, das Kopieren des gesamten Abbilds zu vermeiden, besteht darin, ein Abbild im .vmdk-Format zu erstellen, das auf separate Extent-Dateien für die Partitionstabelle und den Partitionsinhalt verweist.
Ich habe dieses Snippet in einer .vmdk-Datei aus einem Test, den ich vor einiger Zeit durchgeführt habe:
Dies bedeutet, dass die 63 Sektoren ab Offset 0 aus der Raw-Datei "parttable.bin" gelesen werden, Sektor 63 und höher jedoch aus dem Raw-Partitions-Dump "partition-image.bin". (Ersetzen Sie 63 natürlich durch den tatsächlichen Versatz zur ersten Partition, normalerweise 2048 in diesen Tagen).
Das Endergebnis ist, dass Sie in VBox die Partitionstabelle an die Vorderseite des Partitionsabbilds vorangestellt haben, ohne den langwierigen Kopiervorgang ausführen zu müssen.
Partitionieren Sie das Laufwerk von der VM aus. Wenn Sie die richtigen Offsets erzielen, sollte der Inhalt Ihres Partitionsimages in der neu erstellten Partition angezeigt werden.
quelle
Interessantes Problem. Folgendes würde ich tun:
Danach müssen Sie Ihren Bootloader aktualisieren. Angenommen, Sie verwenden GRUB, hängen Sie die neu geschriebene Partition ein, chrooten Sie sie und führen
update-grub
Sie sie aus.Viel Glück!
quelle
Sie können die Größe des Dateisystems mit GParted ändern.
Erstellen Sie das Testbild:
Ich verwende resize2fs nicht, weil es die Größe der Datei ändert, anstatt freien Speicherplatz zu lassen.
Kostenlose 1 MB am Anfang.
Erstellen Sie abschließend die Partitionstabelle.
Stellen Sie den ersten Sektor auf 2048 ein (2048 Sektoren * 512 B / Sektor = 1 MB), den letzten Sektor als Standard (dh Bildende).
quelle
Ich persönlich bevorzuge das Anhängen mit
dd
.Ich gehe hier von 512-Byte-Sektoren aus. Es kann ein Fall für 2048-Byte-Sektoren geben, also tauschen Sie einfach die Zahlen ein und rechnen Sie nach.
In jedem Fall verwende ich eine 512-MB-Testdatei, zum Beispiel:
dd if=/dev/zero of=testfs.img bs=512 count=1M mkfs.ext4 testfs.img
MBR
Bild erstellen
Ich persönlich bevorzuge es, die ersten MB (2048 Sektoren) an den Anfang anzuhängen:
dd if=testfs.img skip=2048 bs=512 of=full.img
Führen Sie schließlich fdisk aus, um die Partitionstabelle zu erstellen (oder kopieren Sie sie in Ihre eigene). Ich habe 1 Partition mit Standardwerten erstellt.
Überprüfung
Erstellen Sie zur Überprüfung Schleifenpartitionen und führen Sie eine automatische Erkennung durch:
sudo losetup -fP full.img
Führen Sie
file
auf dem resultierenden partitionierten Loopback-Gerät Folgendes aus:sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
GPT
Bild erstellen
Ich persönlich bevorzuge es, das erste MB (2048 Sektoren, da die Gdisk standardmäßig auf diese Zahl eingestellt ist, da es 1 MB ausgerichtet ist) an den Anfang für den Anfangs-MBR und 34 Sektoren an das Ende (oder 2048 für ein volles MB) für das Ende anzuhängen GPT (Endsektor kann unterschiedlich sein). Wenn Sie das Ende von GPT auslassen, gehen möglicherweise Daten verloren:
dd if=testfs.img skip=2048 bs=512 of=full.img dd if=/dev/zero seek=1050624 bs=512 of=full.img count=34
Führen Sie schließlich gdisk aus, um die Partitionstabelle zu erstellen (oder kopieren Sie sie in Ihre eigene). Ich habe 1 Partition mit Standardwerten erstellt.
Überprüfung
Erstellen Sie zur Überprüfung Schleifenpartitionen und führen Sie eine automatische Erkennung durch:
sudo losetup -fP full.img
Führen Sie
file
auf dem resultierenden partitionierten Loopback-Gerät Folgendes aus:sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
Diese Methode verhindert das Erraten, Ändern der Größe oder manuelle Ausrichten.quelle
sudo file -s /dev/loop11p1
ich/dev/loop11p1: data
. Welches war zuvor ein ext4-Dateisystem. Und das resultierende full.img ist kleiner. Ich denke, Sie haben die Lösung umgekehrt.seek=2048
in diesem Befehl dd if = testfs.img skip = 2048 bs = 512 of = full.img