So erstellen Sie eine Remote-Festplatte mit SSH auf einem lokalen Computer und speichern sie auf einer lokalen Festplatte


85

Wie kann ich mit SSH auf meinem lokalen Computer ein Backup einer Remote-Festplatte erstellen und auf einer lokalen Festplatte speichern?


Ich habe Folgendes versucht:

ssh hostname@my.ip.address "sudo dd if=/dev/sdX " | \
  dd of=/home/username/Documents/filename.image`

Ich erhalte jedoch folgende Fehlermeldung:

kein tty vorhanden und kein askpass programm angegeben

Antworten:


114

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.

Beispiele

von einem entfernten Computer ausführen

$ dd if=/dev/sda | gzip -1 - | ssh user@local dd of=image.gz

vom lokalen Computer ausführen

$ ssh user@remote "dd if=/dev/sda | gzip -1 -" | dd of=image.gz

Live-Beispiel

$ 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?

  1. Melden Sie sich über sshin einem anderen Terminal und ls -lder Datei an, um zu sehen, wie groß sie ist.
  2. 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 :

    $ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
    
  3. 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:

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, 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:

ssh root@192.168.1.5 "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
  • 192.168.1.5 ist die physische Red Hat Enterprise Linux 2.1-Box.
  • / dev / sdb ist eine neue virtuelle Festplatte, die nach dem Klonen die Grundlage einer virtuellen Version der alten physischen Box bildet.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.