Cómo dd o cp todo el disco en la máquina remota de Debian a la máquina local?

He leído esta publicación – Cómo download un disco remoto usando SSH en la máquina local y savelo en un disco local

Sin embargo, el siguiente código no funciona:

"dd if=/dev/sda | gzip -1 -" | dd of=image.gz 

Como no tengo ningún directory /dev/sda . Supongo que esto es porque estoy usando Debian 7.0.

Cualquier ayuda para tomar una copy completa de mi vps es muy apreciada.

El nombre del dispositivo de un disco depende del tipo de disco que sea (más precisamente, a qué tipo de bus y controller está conectado el disco, y qué controller maneja). /dev/sda es el nombre típico del primer disco en una PC (se pueden usar otros nombres según el controller, por ejemplo, para algunos types anteriores de controlleres de disco o algunos controlleres RAID de hardware). En un VPS, el disco es normalmente uno virtual, y el nombre del dispositivo depende de la tecnología de virtualización, por ejemplo, /dev/vda o /dev/xvda . Puede encontrar los nombres de los dispositivos de bloque en su sistema con df o lsblk .

¡Pero no lo use para hacer una copy de security desde un sistema en vivo ! Es muy probable que termine con una copy de security ilegible. Si el contenido del disco cambia mientras realiza la copy de security, que es inevitable en un sistema activo (por ejemplo, un logging se escribe en algún lugar), su image será inconsistente, un poco del estado anterior, un poco del nuevo estado. y puede no ser recuperable.

La forma preferida de hacer una copy de security es hacer una instantánea , es decir, una vista del sistema de files que está congelada y no cambia incluso cuando el sistema real sigue cambiando. Cómo hacerlo, y si es posible, depende de cómo esté configurado su sistema. Algunos types de filesystems como btrfs y zfs tienen una capacidad de instantánea incorporada. LVM también puede hacer instantáneas de un volumen.

Si no puede hacer una instantánea (o incluso si puede) hacer una copy de security a nivel de file . Una copy de security a nivel de file de un sistema que cambia será inconsistente, pero si no realiza cambios "importantes", la copy de security será utilizable. Por ejemplo, si mueve los files, se pueden omitir de la copy de security si pasan de un directory que el progtwig de copy de security aún no ha cruzado a uno que ya ha recorrido. Por otro lado, si un file de logging sigue creciendo, tendrá una versión intermedia de ese file, pero no tendrá una image del sistema de files dañada. Si se elimina un file y se crea otro file, es posible que no tenga ninguno de esos files, o uno, o ambos, pero no tendrá la input del directory del file anterior apuntando a algunos datos en el nuevo file.

Puede usar GNU tar (como root!) Para hacer una copy de security de un sistema Linux completo con metadatos importantes.

 ssh root@vps 'tar -cJf - --acls --selinux --one-file-system /' >vps.tar.xz 

/dev/sda es la convención cuando las comunicaciones con su disco pasan por el controller SCSI directamente. En un comentario, dijiste que tu disco estaba en /dev/vda : tal denominación es algo común en las soluciones virtualizadas. Si tuviera que adivinar, diría que estás hablando de un VPS administrado por KVM.

Si desea hacer una copy de security de su disco /dev/vda , simplemente use la sugerencia de slm:

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

Esto hará una copy de security de /dev/vda completo, y podrá volver a dd en otro disco más adelante, siempre que haya espacio suficiente allí.

fdisk -l funcionó y mi file de dispositivo es /dev/vda1 , pero ¿contiene eso todo mi sistema?

Lo lees demasiado rápido. /dev/vda1 es una partición (una pieza) del disco /dev/vda . Tres cosas a tener en count:

  • Si su sistema consiste únicamente en una partición raíz en /dev/vda1 , la copy de security de /dev/vda1 es suficiente. No necesita hacer una copy de security de toda la unidad (que también incluye "encabezados" de disco).
  • Si su sistema se extiende a través de múltiples particiones en /dev/vda , debe dd todas ellas para get todo (o simplemente dd todo el disco como se indica arriba).
  • ¡Tu sistema también podría estar usando varios discos! Es un poco más raro, pero creo que podría suceder. Podría tener las particiones / y /var en /dev/vda (en /dev/vda1 y /dev/vda2 por ejemplo), y los directorys de inicio ( /home ) en /dev/vdb1 en otra unidad ( /dev/vdb )

En tu caso, diría que lsblk es la herramienta adecuada para entender tu configuration. Ejecútelo y eche un vistazo a la columna MOUNTPOINT . Siempre que hay algo allí, su sistema está usando la partición en esa fila. Si desea hacer una copy de security de todo el asunto, debe hacer lo siguiente:

  • Descargue todas las particiones usadas ( /dev/vdXY ) a los files. Una partición se usa cuando está montada en algún lugar.
  • Descargue todos los discos usados ​​( /dev/vbX ) a los files. Un disco se usa cuando contiene al less una partición utilizada.

Si otras palabras, puede ejecutar:

 ssh user@remote "dd if=/dev/vda | gzip -1 -" | dd of=disk1.gz ssh user@remote "dd if=/dev/vdb | gzip -1 -" | dd of=disk2.gz # ... and so on, once per used disk. 

o (usando mi ejemplo de 2 discos desde arriba):

 ssh user@remote "dd if=/dev/vda1 | gzip -1 -" | dd of=root.gz ssh user@remote "dd if=/dev/vda2 | gzip -1 -" | dd of=var.gz ssh user@remote "dd if=/dev/vdb1 | gzip -1 -" | dd of=home.gz # ... and so on, once per used partition. 

Una ventaja de hacer una copy de security de las particiones por separado es que podría ser más fácil explorarlas localmente cuando sea necesario:

 $ gzip -d home.gz # decompress the backup $ sudo mkdir /mnt/home_bak # create a mount point $ sudo mount -o loop home /mnt/home_bak # mount the backup $ cd /mnt/home_bak # explore the home backup 

Finalmente, recuerde que lsblk solo muestra particiones montadas. Si ha configurado particiones adicionales (que no se montan automáticamente en el arranque), recuerde includelas. Es probable que recuerde si lo hizo al instalar su VPS.