Erstellen Sie eine bootfähige Festplatte aus dem Ext4-Partitionsimage

Erstellen Sie eine bootfähige Festplatte aus dem Ext4-Partitionsimage

Mein Ziel besteht darin, ein bootfähiges Backup meines Systems ohne Neustart zu erstellen. Ich werde qemu-img verwenden, um ein RAW-DD-Image in VHDX zu konvertieren und es in Hyper-V auszuführen.

Wenn ich eine Live-CD boote und Folgendes ausführe:

dd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notrunc

Ich kann das ohne großen Aufwand in eine VHDX-Datei konvertieren und direkt in Hyper-V ausführen.

fdisk -l Ausgabe:

Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 7555D04B-D6DC-4ABB-8863-529E874BADAD

Device       Start       End   Sectors   Size Type
/dev/sda1     2048   2000895   1998848   976M EFI System
/dev/sda2  2000896 500117503 498116608 237.5G Linux filesystem

Da Sie diesen Befehl jedoch nicht verwenden können, während das System online ist, verwende ich den Dattobd-Treiber, um mein gesamtes ext4-Dateisystem wie folgt zu kopieren:

dd if=/dev/datto0 of=/nfs/sda2.raw bs=1M

Dadurch werden alle Daten /dev/sda2korrekt kopiert. Ich habe das überprüft, weil der Hash derselbe ist, wenn ich die Live-CD verwende und die /dev/sda2Partition dd. Jetzt kann ich eine Live-CD booten und kopieren. /dev/sda1Das ist die EFI-Partition, sie ändert sich also nicht sehr oft, es sei denn, ich aktualisiere Grub oder etwas, das mit dem Linux-Kernel zu tun hat. Ich bin zufrieden damit, ab und zu neu zu starten, um diese Partition zu sichern. Wenn aber jemand weiß, wie man das online macht, sagen Sie es mir bitte.

Jetzt habe ich /dev/sda1und /dev/sda2in zwei separaten Dateien, meine Frage ist, wie ich diese beiden in einer einzigen Datei zusammenfügen kann, die im Wesentlichen die gleiche Ausgabe liefert wie dd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notruncauf einer Live-CD? Müssen Sie nur die Bytes perfekt ausrichten? Ich habe überall danach gesucht und hatte kein Glück. Jede Hilfe ist sehr willkommen!

Antwort1

Sie können das gesamte Festplatten-Image mit Partitionsunterstützung per Loop-Mount einbinden und dann dddas aktualisierte sda2Image darin platzieren:

losetup -P /dev/loop0 /nfs/sda.raw  #this will create /dev/loop0p1 and loop0p2
dd if=/nfs/sda2.raw of=/dev/loop0p2
losetup -d /dev/loop0

Alternativ zeigt Ihre Partitionstabelle an, dass Ihre erste Partition bei Sektor Nr. 2048 beginnt, sodass Ihre Festplatte vor der ersten Partition („Kopf“) 2048 * 512 Bytes = 1 MiB Speicherplatz und am Ende („Schwanz“) außerhalb jeder Partition 500118192 - 500117503 - 1 = 688 Sektoren (344 KiB) Speicherplatz hat. (-1, weil der erste Sektor Nr. 0 und nicht Nr. 1 ist)

Die erste Partition endet beim Sektor Nr. 2000895 und die zweite beginnt beim Sektor Nr. 2000896. Zwischen ihnen gibt es also keinen ungenutzten Speicherplatz.

Sie verwenden eine GPT-Partitionstabelle, die eine Sicherungskopie der Partitionstabelle am Ende der Festplatte enthält, sodass auch der „Tail“-Teil erfasst werden muss. Er beginnt bei Sektor Nr. 500117504 und geht bis zum Ende der Festplatte.

Sie könnten also den Inhalt der Teile „Kopf“ und „Schwanz“ separat erfassen und dann alles zusammenfügen:

dd if=/dev/sda of=/nfs/head.raw bs=512 count=2048
dd if=/dev/sda of=/nfs/tail.raw bs=512 skip=500117504
cat /nfs/head.raw /nfs/sda1.raw /nfs/sda2.raw /nfs/tail.raw > /nfs/sda.raw

Sofern Sie die Partitionstabelle nicht ändern, müssen Sie die Abschnitte „Kopf“ und „Ende“ nur einmal erfassen: Sie sollten sich bei normaler Verwendung des Systems nicht ändern.

verwandte Informationen