desarrollo-web-br-bd.com

Cómo dd un disco remoto usando SSH en la máquina local y guardar en un disco local

¿Cómo puedo crear una copia de seguridad de un disco remoto utilizando SSH en mi máquina local y guardarlo en un disco local?


He intentado lo siguiente:

ssh [email protected] "Sudo dd if=/dev/sdX " | \
  dd of=/home/username/Documents/filename.image`

Sin embargo, recibo el siguiente error:

sin tty presente y sin programa askpass especificado

89
Qu0rk

Si su intención es hacer una copia de seguridad de la unidad de disco duro remota HDD A a través de SSH en un solo archivo que se encuentra en la unidad de disco duro de su computadora local, puede hacer lo siguiente.

Ejemplos

¡ejecutar desde una computadora remota

$ dd if=/dev/sda | gzip -1 - | ssh [email protected] dd of=image.gz

ejecutar desde la computadora local

$ ssh [email protected] "dd if=/dev/sda | gzip -1 -" | dd of=image.gz

Ejemplo en 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

¿Métodos para el monitoreo?

  1. Inicie sesión a través de ssh en otra terminal y ls -l el archivo para ver cuál es su tamaño.
  2. Puede usar pv para monitorear el progreso de una operación de dd grande, por ejemplo, para el ejemplo remoto anterior, puede hacer:

    $ dd if=/dev/sda | gzip -1 - | pv | ssh [email protected] dd of=image.gz
    
  3. Envíe una señal "SIGUSR1" a dd e imprimirá estadísticas. Algo como:

    $ pkill -USR1 dd
    

Referencias

Los métodos mencionados anteriormente para el monitoreo se dejaron originalmente a través de comentarios de @ Ryan & @ bladt y yo mismo. Los moví a la respuesta para hacerlos más obvios.

124
slm

El error que recibe se debe al uso de Sudo de forma remota (se le pedirá la contraseña pero no tiene un tty para ingresarla). Por otro lado, como usuario normal, normalmente no puede usar simplemente dd como se sugiere en otra respuesta (no tiene los permisos necesarios para el dispositivo). Puede resolver el problema otorgándose derechos para ejecutar dd como Sudo sin contraseña. Puede hacer esto editando el archivo sudoers (en el control remoto):

Sudo visudo

agregue la siguiente línea:

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

Ahora puedes emitir:

ssh [email protected] "Sudo /bin/dd if=/dev/sdX" | dd of=test.dd

y debería funcionar Puede hacer una entrada más genérica en sudoers, lo que le permite ejecutar dd con cualquier parámetro, pero es más sabio mantener estos permisos gratuitos al mínimo que necesita.

12
elfantin

Acabo de usar una versión modificada en un cuadro virtual Linux Mint para clonar un disco duro físico en un servidor RedHat antiguo.

Ejecuté lo siguiente como root en el cuadro virtual:

ssh [email protected] "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
  • 192.168.1.5 es el cuadro físico de Red Hat Enterprise Linux 2.1.
  • / dev/sdb es un nuevo disco virtual, que cuando termine la clonación será la base de una versión virtual del antiguo cuadro físico moribundo.
8
Fred Nerk

La combinación de estas respuestas me permitió clonar a otro host de Linux y evitar el error 'permiso denegado':

  • Tarjeta SD RPI4 (/dev/mmcblk0 - esto clona toda la tarjeta)
  • evitar el problema de permisos solicitando privilegios elevados (Sudo -S)
  • ver el progreso a medida que se copia (status=progress)
  • comprimiendo la copia (gzip)
ssh [email protected] "Sudo -S dd if=/dev/mmcblk0 status=progress | gzip -1 -" | dd of=rpiimg.gz
0
Paul Sturm