ubuntuusers.de

Partitionen mit dd sichern und wiederherstellen

Status: Ungelöst | Ubuntu-Version: Xubuntu 22.04 (Jammy Jellyfish)
Antworten |

Fried-rich

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1128

Hallo,

wenn ich mit dd 2 Partitionen sichern und später genau an der gleichen Stelle wiederherstellen möchte, wie müsste ich da vorgehen? Angenommen ich habe das hier:

/dev/sdb1       2048    206847    204800   100M EFI-System
/dev/sdb2     206848    239615     32768    16M Microsoft reserviert
/dev/sdb3     239616 101304182 101064567  48,2G Microsoft Basisdaten
/dev/sdb4  101304320 956293119 854988800 407,7G Linux-Dateisystem

Ich möchte die /dev/sdb1 und /dev/sdb2 sichern. Das würde ich einfach mit

dd if=/dev/sdb1 of=sicherung-sdb1.img

machen. Das gleiche für die andere. Normal könnte ich, wenn die ursprünglichen Partitionen noch da sind einfach mit

dd if=sicherung-sdb1.img /dev/sdb1

wiederherstellen. Wenn die aber gelöscht wurden, wie stelle ich dann sicher, dass dd die Sicherung an genau der gleichen Position wiederherstellt? Zunächst das:

dd if=sicherung-sdb1.img /dev/sdb

also nur sdb ohne Nummer. Er muss die ersten 2027 Sektoren überspringen, also seek=2047. skip müsste nicht genutzt werden, da es Sektoren beim Lesen überspringt und damit etwas beim Image weg lässt. Also am Ende:

dd if=sicherung-sdb1.img /dev/sdb seek=2047 count=512

Ist das korrekt?

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7744

Wenn die aber gelöscht wurden, wie stelle ich dann sicher, dass dd die Sicherung an genau der gleichen Position wiederherstellt?

Dazu musst du die Partitionstabelle eben auch aufheben (und genauso wieder herstellen). Wenn du das Partitionsoffset nicht kennst, kannst du nur anhand der Größen deiner Images raten, aber Lücken in der Partitionstabelle kann man davon nicht ablesen.

seek 2027 2047 ist falsch (seek=2048), count=512 auch (du meinst vielleicht bs=512 aber das ist eh der Default). Bei den restlichen Befehlen hast du of= vergessen. Es bringt aber auch nichts, Daten an dieses Offset zu schreiben, wenn die Partition fehlt. Von daher würde ich mit seek gar nicht erst anfangen.

Mit dd kann man sich sehr leicht alles kaputt machen. Auch für erfahrene Anwender hat dd einige Stolperfallen im Angebot.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9378

Wohnort: Münster

Fried-rich schrieb:

[…]

/dev/sdb1       2048    206847    204800   100M EFI-System

[…] also nur sdb ohne Nummer. Er muss die ersten 2027 Sektoren überspringen, also seek=2047. skip müsste nicht genutzt werden, da es Sektoren beim Lesen überspringt und damit etwas beim Image weg lässt. Also am Ende:

dd if=sicherung-sdb1.img /dev/sdb seek=2047 count=512

Ist das korrekt?

Fast. Vielleicht.

  • Du willst das Image nach Sektor 2048 ff schreiben. Dafür musst Du die davor liegenden Sektoren 0 … 2047 überspringen. Das sind 2048 Stück und damit ist Deine Angabe 2047 etwas zu klein.

  • Ein logischer Sektor auf der Platte ist oft 512 Byte groß, aber nicht immer. Es gibt z.B auch Platten mit 4096 Byte großen Sektoren. Du musst also erst einmal herausfinden, wie groß ein Sektor bei Deiner Platte ist bzw. was die Angabe in der Partitionstabelle wirklich bedeutet.

  • Für dd ist die Blockgröße immer 512 Byte, sofern man sie nicht explizit angibt. Deine Angabe count=512 bedeutet also für dd, dass insgesamt 512 x 512 B = 256 KiB zu schreiben sind und das passt auf jeden Fall schlecht zu der ursprünglichen Größe von 100 MB.

Was auch immer Du mit diesem Experiment bezweckst, sofern noch wichtige Daten auf dieser gequälten Platte sind, spendiere ihnen ein neues sicheres Heim! – Vorher!

Fried-rich

(Themenstarter)

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1128

Laut fdisk ist die Sektorgröße 512. Das bezieht sich aber vermutlich auf die Sektorgröße des Dateisystems. Soweit mir bekannt werden alle heutigen Festplatten und SSDs mit 4K-Sektoren hergestellt, oder? Bei mir steht das hier:

Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 4096 Bytes
E/A-Größe (minimal/optimal): 4096 Bytes / 4096 Bytes

Das 'count=512' sollte 'bs=512' heißen. Da die Null mitgezählt wird müsste es 'seek=2048' sein?

Antworten |