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.
Antworten:
Wenn ich das richtig verstehe, möchten Sie ein Image vom Anfang der Festplatte bis zum Ende der letzten Partition erstellen.
Der Parameter
dd
dafür istcount=
. Ihre letzte Partition endet mit 103, und die Anzahl muss 1 extra (104) betragen, und Ihre Einheitengröße beträgt 8225280 Byte (je nachfdisk -l
Ausgabe). Sie können Ihren Befehl also einfach folgendermaßen ändern:Ich würde jedoch vorschlagen, dass Sie
fdisk -u -l /dev/sdb
stattdessen 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:Dabei wird count auf die Zahl gesetzt, die Sie
fdisk -u -l
am Ende der letzten Partition erhalten haben, plus eins anstelle von 104. Die Standardblockgröße fürdd
ist 512 Byte. Dies ist auch die Einheit,fdisk -u -l
die 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.
quelle
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
quelle