Come creare un disco remoto usando SSH sul computer locale e salvarlo su un disco locale


85

Come posso creare un backup di un disco remoto usando SSH sul mio computer locale e salvarlo su un disco locale?


Ho provato quanto segue:

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

Tuttavia, ricevo il seguente errore:

nessun programma presente e nessun programma askpass specificato

Risposte:


114

Se il tuo intento è di eseguire il backup dell'HDD A di un computer remoto tramite SSH su un singolo file presente sull'HDD del tuo computer locale, puoi eseguire una delle seguenti operazioni.

Esempi

eseguire dal computer remoto

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

eseguito dal computer locale

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

Esempio dal vivo

$ 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

Metodi di monitoraggio?

  1. Accedi tramite sshun altro terminale e ls -lil file per vedere qual è la sua dimensione.
  2. È possibile utilizzare pvper monitorare l'avanzamento di un'operazione dd di grandi dimensioni, ad esempio, per l'esempio remoto sopra, è possibile eseguire:

    $ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
    
  3. Invia un segnale "SIGUSR1" a dde stamperà le statistiche. Qualcosa di simile a:

    $ pkill -USR1 dd
    

Riferimenti

I metodi sopra menzionati per il monitoraggio sono stati originariamente lasciati tramite commenti di @Ryan & @bladt e di me stesso. Li ho spostati nella risposta per renderli più ovvi.


Ho provato questo per un problema simile (backup ONEdel disco rigido del computer remoto nella TWOmemoria del computer remoto ), in questo modo: <br /> [root @ ONE] # dd if = / dev / sda1 | ssh root @ TWO dd of=/root/Public/ONE/sda1.img<br /> 409600 + 0 record in 409600 + 0 record 209715200 byte (210 MB) copiati, 0,894929 s, 234 MB / s Lo pseudo-terminale non verrà assegnato perché stdin non è un terminale radice @ password TWO : Il problema è che il /root/Public/ONE/sda1.imgfile è stato creato ONE, non TWOcome previsto. Come posso risolvere questo problema?
Urhixidur,

1
Qualcuno può darci un esempio di utilizzo pvdal computer locale? Grazie.
TCB13

è meglio usare lbzip2 o pigz insted di gzip
Shimon Doodkin

perché alla fine ho bisogno di "| dd of = image.gz"? (non solo "> image.gz") perché dd prende il 100% di una CPU
Shimon Doodkin il

6
Per quanto riguarda il monitoraggio: anche le versioni dd più recenti hanno l' status=progressopzione. Pertanto, non è più necessario eseguire pkill -USR1 ddda un altro terminale.
Fino a Schäfer il

12

L'errore che ricevi è dovuto all'uso di sudo in remoto (ti verrà chiesta la password ma non hai un tty per inserirlo). D'altra parte, come utente normale normalmente non è possibile utilizzare semplicemente ddcome suggerito in altre risposte (non si dispone delle autorizzazioni necessarie per il dispositivo). Puoi risolvere il problema dandoti i diritti di eseguire ddcome sudo senza password. Puoi farlo modificando il file sudoers (sul telecomando!):

sudo visudo

aggiungi la seguente riga:

userfoo ALL=(ALL) NOPASSWD: /bin/dd if=/dev/sdX

Ora puoi emettere:

ssh userfoo@host "sudo /bin/dd if=/dev/sdX" | dd of=test.dd

e dovrebbe funzionare. È possibile effettuare una voce più generica nei sudoer, consentendo di eseguire ddcon qualsiasi parametro, ma è più saggio mantenere queste autorizzazioni gratuite al minimo necessario.


Oppure, puoi semplicemente eseguire 'sudo ls' alla fine applicabile (e digitare la password), appena prima di eseguire il comando 'sudo dd ...'
MikeW

Con le versioni più recenti di dd aggiungendo status = progress consente persino il monitoraggio dell'avanzamento della copia.
sensslen

7

Ho appena usato una versione modificata su una scatola di menta virtuale Linux per clonare un disco rigido fisico su un server RedHat obsoleto.

Ho eseguito quanto segue come root sulla scatola virtuale:

ssh root@192.168.1.5 "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
  • 192.168.1.5 è la scatola fisica di Red Hat Enterprise Linux 2.1.
  • / dev / sdb è un nuovo disco virtuale, che al termine della clonazione sarà la base di una versione virtuale della vecchia scatola fisica morente.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.