Wenn Sie die Festplatte A eines Remotecomputers über SSH in einer einzelnen Datei sichern möchten, die sich auf der Festplatte Ihres lokalen Computers befindet, haben Sie folgende Möglichkeiten.
$ ssh skinner "dd if=/dev/sda5 | gzip -1 -" | dd of=image.gz
208782+0 records in
208782+0 records out
106896384 bytes (107 MB) copied, 22.7608 seconds, 4.7 MB/s
116749+1 records in
116749+1 records out
59775805 bytes (60 MB) copied, 23.9154 s, 2.5 MB/s
$ ll | grep image.gz
-rw-rw-r--. 1 saml saml 59775805 May 31 01:03 image.gz
Methoden zur Überwachung?
Melden Sie sich über sshin einem anderen Terminal und ls -lder Datei an, um zu sehen, wie groß sie ist.
Mit dieser Funktion können Sie pvden Fortschritt eines großen dd-Vorgangs überwachen. Für das obige Remote-Beispiel haben Sie beispielsweise folgende Möglichkeiten :
Senden Sie ein "SIGUSR1" -Signal an ddund es werden Statistiken gedruckt. So etwas wie:
$ pkill -USR1 dd
Verweise
Die oben genannten Methoden zur Überwachung wurden ursprünglich über Kommentare von @Ryan & @bladt und mir hinterlassen . Ich habe sie in die Antwort verschoben, um sie offensichtlicher zu machen.
Ich habe dies für ein ähnliches Problem versucht (Sichern der ONEFestplatte des Remotecomputers im TWOSpeicher des Remotecomputers ): <br /> [root @ ONE] # dd if = / dev / sda1 | ssh root @ TWO dd of=/root/Public/ONE/sda1.img<br /> 409600 + 0 Einträge in 409600 + 0 Einträge in 209715200 Bytes (210 MB) kopiert, 0,894929 s, 234 MB / s Pseudoterminal wird nicht zugewiesen, da stdin kein Kennwort für das Terminal root @ TWO ist : Das Problem ist, dass die /root/Public/ONE/sda1.imgDatei am erstellt wurde ONE, nicht am, TWOwie erwartet. Wie behebe ich das?
Urhixidur
1
Kann uns jemand ein Beispiel für die Verwendung pvvon der lokalen Maschine geben? Danke.
TCB13,
es ist besser, lbzip2 oder pigz anstelle von gzip zu verwenden
Shimon Doodkin
Warum brauche ich "| dd of = image.gz" am Ende? (nicht nur "> image.gz") weil dd 100% einer cpu benötigt
Shimon Doodkin
6
In Bezug auf die Überwachung: Neuere dd-Versionen haben ebenfalls die status=progressOption. Sie müssen also nicht pkill -USR1 ddmehr von einem anderen Terminal aus laufen .
Till Schäfer
12
Der Fehler, den Sie erhalten, ist auf die Verwendung von sudo im Remote-Zugriff zurückzuführen (Sie werden nach dem Kennwort gefragt, müssen es jedoch nicht eingeben). Auf der anderen Seite können Sie als normaler Benutzer normalerweise nicht einfach ddso verwenden, wie in einer anderen Antwort vorgeschlagen (Sie haben nicht die erforderlichen Berechtigungen für das Gerät). Sie können das Problem lösen, indem Sie sich das Recht geben, ddals sudo ohne Passwort ausgeführt zu werden. Sie können dies tun, indem Sie die sudoers-Datei (auf der Fernbedienung!) Bearbeiten:
und es sollte funktionieren. Sie könnten einen allgemeineren Eintrag in sudoers vornehmen, der es Ihnen ermöglicht, ddmit jedem Parameter zu arbeiten, aber es ist klüger, diese freien Berechtigungen auf das von Ihnen benötigte Minimum zu beschränken.
Oder Sie können einfach 'sudo ls' am entsprechenden Ende ausführen (und das Kennwort eingeben), bevor Sie den Befehl 'sudo dd ...'
ausführen
Mit neueren Versionen von dd ermöglicht das Hinzufügen von status = progress sogar die Überwachung des Kopierfortschritts.
Sensslen
7
Ich habe gerade eine modifizierte Version auf einer virtuellen Linux Mint-Box verwendet, um eine physische Festplatte auf einem veralteten RedHat-Server zu klonen.
Ich habe folgendes als root auf der virtuellen Box ausgeführt:
ONE
Festplatte des Remotecomputers imTWO
Speicher des Remotecomputers ): <br /> [root @ ONE] # dd if = / dev / sda1 | ssh root @ TWOdd of=/root/Public/ONE/sda1.img
<br /> 409600 + 0 Einträge in 409600 + 0 Einträge in 209715200 Bytes (210 MB) kopiert, 0,894929 s, 234 MB / s Pseudoterminal wird nicht zugewiesen, da stdin kein Kennwort für das Terminal root @ TWO ist : Das Problem ist, dass die/root/Public/ONE/sda1.img
Datei am erstellt wurdeONE
, nicht am,TWO
wie erwartet. Wie behebe ich das?pv
von der lokalen Maschine geben? Danke.status=progress
Option. Sie müssen also nichtpkill -USR1 dd
mehr von einem anderen Terminal aus laufen .Der Fehler, den Sie erhalten, ist auf die Verwendung von sudo im Remote-Zugriff zurückzuführen (Sie werden nach dem Kennwort gefragt, müssen es jedoch nicht eingeben). Auf der anderen Seite können Sie als normaler Benutzer normalerweise nicht einfach
dd
so verwenden, wie in einer anderen Antwort vorgeschlagen (Sie haben nicht die erforderlichen Berechtigungen für das Gerät). Sie können das Problem lösen, indem Sie sich das Recht geben,dd
als sudo ohne Passwort ausgeführt zu werden. Sie können dies tun, indem Sie die sudoers-Datei (auf der Fernbedienung!) Bearbeiten:sudo visudo
füge die folgende Zeile hinzu:
userfoo ALL=(ALL) NOPASSWD: /bin/dd if=/dev/sdX
Jetzt können Sie Folgendes ausgeben:
ssh userfoo@host "sudo /bin/dd if=/dev/sdX" | dd of=test.dd
und es sollte funktionieren. Sie könnten einen allgemeineren Eintrag in sudoers vornehmen, der es Ihnen ermöglicht,
dd
mit jedem Parameter zu arbeiten, aber es ist klüger, diese freien Berechtigungen auf das von Ihnen benötigte Minimum zu beschränken.quelle
Ich habe gerade eine modifizierte Version auf einer virtuellen Linux Mint-Box verwendet, um eine physische Festplatte auf einem veralteten RedHat-Server zu klonen.
Ich habe folgendes als root auf der virtuellen Box ausgeführt:
quelle