ubuntuusers.de

Probleme mit dd-Script

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

I-Punkt Team-Icon

Anmeldungsdatum:
9. Oktober 2008

Beiträge: 1180

Hallo liebes Forum, ich erstellte für meinen Vater eine Live-CD, um via dd die Festplatte zurückzuspiegeln. Er ist schon über 60 und ist permanent am basteln und versuchen unter Kubuntu 9.04. Um unabhängig von mir jederzeit ohne Aufwand das System zurückzusetzten, ist diese CD für ihn sehr wertfoll und er nutzt sie regelmäßig. Nach dem Live-CD Start sind lediglich drei Knöpfe auf dem Desktop. Es gibt kein Startmenü, keine Taskleiste oder ähnliches. Folgende Scripte habe ich laut dem dd-Wiki geschrieben. Wie gesagt. Im Prinzip funktioniert es so schon.

1. Archivplatte mounten

sudo mount /dev/sda1 /home/horst/Backup

2. Linux wiederherstellen (restore.sh)

sudo dd if=/home/horst/Backup/ext3.img of=/dev/sdb1 & # startet den dd-Prozess im Hintergrund (das & ist wichtig)
ddpid=$! # speichert die Prozess-ID vom dd-Prozess in der Variablen $ddpid
while [ "`ps -a | grep $ddpid`" ]; do sudo kill -SIGUSR1 $ddpid; sleep 10; done

3. Linux-Backup (backup.sh)

sudo dd if=/dev/sdb1 of=/home/horst/Backup/ext3.img & # startet den dd-Prozess im Hintergrund (das & ist wichtig)
ddpid=$! # speichert die Prozess-ID vom dd-Prozess in der Variablen $ddpid
while [ "`ps -a | grep $ddpid`" ]; do sudo kill -SIGUSR1 $ddpid; sleep 10; done

Nun hat die Sache nur einen Hacken. Das Backup ist genauso groß wie die Quelle. Also dachte ich mir, ich nutze ebenfalls aus dem Wiki den Code

sudo dd if=/dev/sdb1 | gzip -9 > /home/horst/Backup/ext3.img.gz

und

sudo gunzip -c /home/horst/Backup/ext3.img.gz | dd of=/dev/sdb1

Auch das funktioniert als einzeiliges Script. Die obigen Zeilen bringen mir während des Backups alle 10 Sekunden einen Status wieviel und mit welcher Schreibgeschwindigkeit wiederhergestellt wird. Aber wenn ich anstatt

sudo dd if=/dev/sdb1 of=/home/horst/Backup/ext3.img & # startet den dd-Prozess im Hintergrund (das & ist wichtig)
ddpid=$! # speichert die Prozess-ID vom dd-Prozess in der Variablen $ddpid
while [ "`ps -a | grep $ddpid`" ]; do sudo kill -SIGUSR1 $ddpid; sleep 10; done

die gezippte Version einsetzte

sudo dd if=/dev/sdb1 | gzip -9 > /home/horst/Backup/ext3.img.gz & # startet den dd-Prozess im Hintergrund (das & ist wichtig)
ddpid=$! # speichert die Prozess-ID vom dd-Prozess in der Variablen $ddpid
while [ "`ps -a | grep $ddpid`" ]; do sudo kill -SIGUSR1 $ddpid; sleep 10; done

dann kommt eine Fehlermeldung

/home/horst/scripte/backup-linux.sh: line 4:  5059 Broken pipesudo dd if=/dev/sdb1
      5060 User defined signal 1   | gzip -9 > ~/Backup/ext3.img.gz

wie gesagt das backupscript sieht so aus

1
2
3
4
#!/bin/bash
sudo dd if=/dev/sdb1 | gzip -9 > /home/horst/Backup/ext3.img.gz & # startet den dd-Prozess im Hintergrund (das & ist wichtig)
ddpid=$! # speichert die Prozess-ID vom dd-Prozess in der Variablen $ddpid
while [ "`ps -a | grep $ddpid`" ]; do sudo kill -SIGUSR1 $ddpid; sleep 10; done

Einfach den Befehl für gzip anstatt die sudo dd if=/dev/sdb1 of=/home/horst/Backup/ext3.img einzusetzten war rein spekulativ, weil ich keinen Plan vom scripten habe... Kann mir einerseits jemand erklären, warum es klemmt und anderer seits eine Lösung sagen, damit es auch bei der gzip-Version einen Stauts ausgibt, wieweit der Rechner ist? Danke für eure Hilfe...

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17620

Wohnort: Berlin

Du könntest zwischendurch die Größe der Zipdatei beobachten, und aus Erfahrung sagen, wieviel Prozent jetzt wohl erreicht sind. Am Schluß dann etwas mogeln, damit nicht 104% da steht, oder, obwohl das Programm fertig ist, eine verstörende 97% den Bildschirm ziert. ☺

Mir ist die Verwendung von -SIGUSR1 ganz unbekannt; ob "Broken pipe" damit zu tun hat, das sudo zwar dd startet, aber nicht gzip oder das Schreiben mit > auf /home/horst/Backup/?

Du könntest versuchen, ob es mit

sudo dd if=/dev/sdb1 | tar -xjf /home/horst/Backup/ext3.img.bz2 &

oder

sudo dd if=/dev/sdb1 | sudo tar -xjf /home/horst/Backup/ext3.img.bz2 &

besser wird, aber das ist bloßes Rumraten von mir, womöglich großer Humbug. ☺

Red_Radish

Anmeldungsdatum:
7. September 2007

Beiträge: 770

Jedes mal der gleiche Fehler, wenn ich hier jemand mit dd hantieren sehe. Wenn ihr den Blocksize nicht angebt, dauert das ewig mit dem kopieren ( unnötige Bewegungen des Festplattenkopfes, unnötige viele Betriebssystemaufrufe,...).

Richtig ist fast immer:

dd if=/dev/irgendwo bs=128k of=irgendwoandershin

Und statt der hässlichen while-Schleife, kannst du einfach pv nehmen. Das kümmert sich sogar selbstständig, um eine vernünftige Blockgröße und zeigt den Fortschritt an:

pv /dev/sdb1 | gzip >/home/horst/Backup/ext3.img.gz

Edit: Nachtrag zu deinem eigentlichen Fehler:

sudo dd if=/dev/sdb1 | gzip -9 > /home/horst/Backup/ext3.img.gz & # startet den dd-Prozess im Hintergrund (das & ist wichtig)
ddpid=$! # speichert die Prozess-ID vom dd-Prozess in der Variablen $ddpid

ddpid enthält nicht die Prozess-ID vom dd-Prozess, sondern von gzip,...

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17620

Wohnort: Berlin

Red Radish schrieb:

ddpid enthält nicht die Prozess-ID vom dd-Prozess, sondern von gzip,...

Logisch - Kopfklatsch!

I-Punkt Team-Icon

(Themenstarter)

Anmeldungsdatum:
9. Oktober 2008

Beiträge: 1180

Danke für die fixen Antworten. Ich werde mich mit beidem befassen und ausprobieren, was fruchtet. Zwischenzeitlich ist mir noch die Idee gekommen, die beiden Wünsche (clonen und packen) seperat auszuführen. Wenn es zusammen nicht läuft, dann nacheinander...lol

#!/bin/bash
echo -e "\033[40;1;33mDie Systemspiegelung des Linux-Systems beginnt nun.\033[0m"
echo -e "\033[40;1;33mJe nach Umfang des Backups kann dieser Vorgang sehr lange dauern.\033[0m"
echo -e "\033[40;1;33mNach Beendigung wird eine Statusmeldung ausgegeben.\033[0m"
sudo dd if=/dev/sdb1 of=~/Backup/Backup/ext3.img bs=4096 & 
ddpid=$! 
while [ "`ps -a | grep $ddpid`" ]; do sudo kill -SIGUSR1 $ddpid; sleep 4; done 
echo -e "\033[40;1;31mHerzlichen Glueckwunsch\033[0m"
echo -e "\033[40;1;31mDie Festplatte wurde erfolgreich geclont.\033[0m"
echo -e "\033[40;1;31mNun wird die Backup-Datei noch zusammengepackt.\033[0m"
gzip -9 ~/Backup/Backup/ext3.img
echo -e "\033[40;1;31mDas System wurde erfolgreich gespiegelt\033[0m"
echo -e "\033[40;1;33mDu kannst das System nun ausschalten\033[0m"

So selten wie der Script ausgeführt wird, kommt es auf Geschwindigkeit nicht an. PS: bs=4096 macht 400% schneller. Der Standardwert bei Nichtangabe ist 512 Bytes. dd if=/dev/irgendwo bs=128k of=irgendwoandershin ist Blödsinn@Red Radish

Danke erstmal

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Wenn Du Farben im Terminal willst, dann doch bitte nicht, indem Du die Steuersequenzen direkt in Deine Strings einfügst. Dafür gibt es Befehle wie tput.

I-Punkt Team-Icon

(Themenstarter)

Anmeldungsdatum:
9. Oktober 2008

Beiträge: 1180

Ich habe es dann letztendlich mit PiperViewer gelöst.

sudo dd if=/dev/sda bs=512b | pv | gzip -9 >~/Backup/Backup/ext3.img.gz
Antworten |