¿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
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.
¡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
$ 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
ssh
en otra terminal y ls -l
el archivo para ver cuál es su tamaño.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
Envíe una señal "SIGUSR1" a dd
e imprimirá estadísticas. Algo como:
$ pkill -USR1 dd
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.
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.
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
La combinación de estas respuestas me permitió clonar a otro host de Linux y evitar el error 'permiso denegado':
/dev/mmcblk0
- esto clona toda la tarjeta)Sudo -S
)status=progress
)gzip
)ssh [email protected] "Sudo -S dd if=/dev/mmcblk0 status=progress | gzip -1 -" | dd of=rpiimg.gz