====== dd ======
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.
===== Bootloader sichern =====
Hiermit wird der Bootloader ohne Partitionstabelle gesichert
dd if= of= bs=446 count=1
Hiermit wird der gesamte MBR mit Partitionstabelle gesichert
dd if= of= bs=512 count=1
===== Bootloader restore =====
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
===== Mount einzelner Partitionen =====
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
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
Die hier aufgeführten Informationen habe ich von der Quelle: [[http://wiki.ubuntuusers.de/| Wiki-Ubuntuusers]]
===== Testdatei =====
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.
===== Alles shreddern =====
siehe: [[linux:festplatten]]
===== Fortschritsanzeige =====
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''**
* ProzessID der laufenden Terminal-Prozesse ermitteln.
ps -a
* Signal senden
kill -USR1
Der aktuelle Fortschritt von ''dd'' wird nun in dem Terminal-Fenster ausgegeben, in dem ''dd'' gestartet wurde.
* Schleife
dd if= of= & 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.
* Signal senden
pkill -USR1 -x dd
* Schleife
dd if= of= & while [ ! $(pkill -USR1 -x dd) ]; do sleep 10 ; : ; done