Der Masterbootrecord, auch „MBR“ genannt, ist 512 Bytes groß und liegt am Anfang eines Datenträgers.
Der Bootloader selbst belegt die ersten 446 Bytes, gefolgt von Partitionstabelleninformationen.
Mit dem Programm dd
kann nicht nur ein Image einer Partition oder gar einer ganzen Festplatte gemacht werden.
Der Bootload sowie die Partitionstabelle lassen sich ebenso separat abspeichern.
Hiermit wird der Bootloader ohne Partitionstabelle gesichert
dd if=<Pfad_zu_Gerätedatei> of=<Pfad_zu_Sicherungsdatei> bs=446 count=1
Hiermit wird der gesamte MBR mit Partitionstabelle gesichert
dd if=<Pfad_zu_Gerätedatei> of=<Pfad_zu_Sicherungsdatei> bs=512 count=1
Zurückspielen kann man das ganze indem man die Pfade von „if“ und „of“ vertauscht.
Ein Image das mit dd
erstellt wurde lässt sich mit mount
als Loop-Device einbinden.
mount -o loop <Pfad_zu_Imagedatei> <Pfad_zu_Mountpoint>
Dies gilt für Images einzelner Partitionen, doch was ist mit Images ganzer Festplatten.
Hier ist es nicht so einfach. Man kann nicht die ganze Festplatte aus dem Image als Loop-Device einbinden.
Man muss auch hier einzelne Partitionen einbinden.
Um herauszufinden welche Partition sich wo im Image befindet, muß man den „Offset“ wissen.
Der „Offset“ gibt den Anfang der Partition an und wird mit dem Programm fdisk
ausgelesen.
fdisk -l -u <Pfad_zu_Imagedaei>
Die Ausgabe kann so aussehen:
Platte /dev/sda: 500.1 GByte, 500107862016 Byte 255 Köpfe, 63 Sektoren/Spur, 60801 Zylinder, zusammen 976773168 Sektoren Einheiten = Sektoren von 1 Ã 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000b4541 Gerät boot. Anfang Ende Blöcke Id System /dev/sda1 63 208844 104391 83 Linux /dev/sda2 208845 30925124 15358140 83 Linux /dev/sda3 30925186 976768064 472921439+ 5 Erweiterte /dev/sda5 30925188 35118089 2096451 82 Linux Swap / Solaris /dev/sda6 35118153 976768064 470824956 83 Linux
Der Wert unter „Anfang“ ist der Offset der jew. Partition die man Mounten möchte.
Damit eine Partition aus dem Image gemountet werden kann muss der „Offset“ noch mit der Sektorgröße multipliziert werden.
Also z.B. für die 6. Partition: 35118153 * 512 = 17980494336
Nun können wir die 6. Partition mounten mit
mount -o loop,offset=55841425920 <Pfad_zu_Imagedatei> <Pfad_zu_Mountpoint>
Die hier aufgeführten Informationen habe ich von der Quelle: Wiki-Ubuntuusers
Manchmal braucht man Testdateien für irgendwelche Messungen und Tests.
Mit dem Device urandom kann dd eine solche Datei erzeugen.
Hier der Befehl
dd if=/dev/zero of=./testfile bs=10M count=2
oder mit urandom
dd if=/dev/urandom of=./testfile bs=10M count=2
Mit diesem Befehl wird aktuellen Verzeichnis die Datei Testfile mit einer Größe von 20MB erstellt.
siehe: festplatten
Bei langwirigen Vorgängen, weiß man nicht bei wieviel Megabyte sich dd
gerade befindet.
Dies kann mit einem kill
-Befehl ermittelt werden.
Diesem Befehl sendet man das Signals -USR1.
Informationen, zu laufenden Prozessen, können mit den Befehlen ps
, pgrep
oder pidof
abgefragt werden.
Signale können dann mit den Befehlen kill
, pkill
oder killall
gesendet werden.
Man ermittelt, in einem weiteren Terminalfenster, also zunächst die ProzessID oder den Prozessnamen und sendet diesen das Signal „-USR1“.
Mit ps
und kill
ps -a
kill -USR1 <PROZESSID>
Der aktuelle Fortschritt von dd
wird nun in dem Terminal-Fenster ausgegeben, in dem dd
gestartet wurde.
dd if=<PFAD_ZU_GERÄT> of=<PFAD_ZU_GERÄT> & ddpid=$! ; while [ $(ps -a | grep $ddpid) ]; do kill -SIGUSR1 $ddpid; sleep 10; done
Mit pkill
Wenn nur ein dd
Prozess läuft, kann man das Signal auch an den Prozessnamen übergeben.
pkill -USR1 -x dd
dd if=<PFAD_ZU_GERÄT> of=<PFAD_ZU_GERÄT> & while [ ! $(pkill -USR1 -x dd) ]; do sleep 10 ; : ; done