Erstellen Sie ein Image eines USB-Laufwerks ohne nicht zugewiesene Partition

13

Ich habe ein 8 GB USB-Laufwerk an mein System angeschlossen, das so aussieht:

[root@host]# fdisk -l /dev/sdb

Disk /dev/sdb: 8462 MB, 8462008320 bytes
255 heads, 63 sectors/track, 1028 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5c0894d9

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1           9       72261    e  W95 FAT16 (LBA)
/dev/sdb2              10         103      755055   83  Linux
[root@host]# 

Im Grunde genommen ist meine FAT-Partition ungefähr 70 MB groß, die ext2-Partition ungefähr 740 MB groß und der Rest des Speicherplatzes (~ 7 GB) ist nicht zugewiesen. Jetzt, wenn ich meine USB-Festplatte über:

dd if=/dev/sdb of=myimage.img bs=1M

Die Ausgabedatei (myimage.img) hat ungefähr 8 GB, was der normale Betrieb von dd ist.

Frage: Was ich suche, ist eine Möglichkeit, meine USB-Festplatte direkt ohne den nicht zugewiesenen Speicherplatz zu klonen, sodass meine Ergebnisdatei etwa 1 GB unkomprimiert statt 8 GB enthält. Der Grund, den ich frage, ist, dass die Ausgabedatei (myimage.img) von einem Simulatorprogramm verwendet wird, um das Image zu starten. Der Simulator kann 8-GB-Dateien verarbeiten, aber ich möchte meinen Speicherplatz nicht verschwenden.

bescheiden
quelle
1
Dies ist ein ähnliches Problem mit interessanter Lösung: serverfault.com/q/281628/141604
Woche

Antworten:

15

Wenn ich das richtig verstehe, möchten Sie ein Image vom Anfang der Festplatte bis zum Ende der letzten Partition erstellen.

Der Parameter dddafür ist count=. Ihre letzte Partition endet mit 103, und die Anzahl muss 1 extra (104) betragen, und Ihre Einheitengröße beträgt 8225280 Byte (je nach fdisk -lAusgabe). Sie können Ihren Befehl also einfach folgendermaßen ändern:

dd if=/dev/sdb of=myimage.img bs=8225280 count=104

Ich würde jedoch vorschlagen, dass Sie fdisk -u -l /dev/sdbstattdessen laufen . Zylinder sind in diesem Alter nicht mehr wirklich relevant. Sie sind also besser dran, wenn Sie die Anzahl der Sektoren sehen, um Rundungsfehler zu vermeiden. Dann müssen Sie laufen:

dd if=/dev/sdb of=myimage.img count=...

Dabei wird count auf die Zahl gesetzt, die Sie fdisk -u -lam Ende der letzten Partition erhalten haben, plus eins anstelle von 104. Die Standardblockgröße für ddist 512 Byte. Dies ist auch die Einheit, fdisk -u -ldie in der Ausgabe verwendet wird.

Die Sicherungspartitionstabelle einer GPT-Partition wird am Ende der Festplatte gespeichert. Da Sie jedoch keine GPT verwenden, ist dies in Ordnung.

Chutz
quelle
2

Sie müssen dd nur anweisen, nur den Teil des Laufwerks zu lesen, an dem Sie interessiert sind. Der gesuchte Parameter ist count.

Nehmen Sie also Ihre Zylindergröße von 8.225.280 und multiplizieren Sie die Anzahl der verwendeten Zylinder mit 103, und Sie erhalten 847.203.840 Bytes. Da Sie eine Blockgröße von einem Megabyte verwenden, konvertieren Sie diese Bytes in Megabyte (808).

Ihr Befehl lautet also dd if=... of=... bs=1M count=808

langer Hals
quelle