Clonación de disco en Linux usando el comando dd

A todos les gusta tener una copia de la unidad de disco para tener la oportunidad de recuperarla. Incluso si no quiere una copia ahora, la querrá cuando se rompa su primer HDD. Se utiliza para clonar todos los datos del disco de volcado inicial de etalon en varios discos host. Le ahorrará una gran porción de tiempo. Pero, ¿cuáles son las opciones de acción para clonar el disco? Miremos:

  • tener una unidad de disco lo suficientemente grande como para almacenar el volcado de la unidad de disco host en el archivo en esta unidad
  • conecte varias unidades de disco a su host local y cópielo conjunto por conjunto
  • conecte varias unidades de disco a hosts remotos y transmita los datos de su unidad de disco host a través de la red a las unidades de disco de hosts remotos

Todas estas opciones están disponibles en la línea de comandos de Linux y son fáciles de establecer y comprender. “Todo es un archivo” en Linux: desde el controlador de disco hasta el archivo desde el punto de vista de la capa de aplicación 

“Todo es un archivo” en Linux

Veamos cómo se ven la partición y los archivos de la unidad de disco en Linux:

Cuerpo del guión:

#!/usr/bin/env bash
ls -l /dev/sda5
ls -l just_a_file

cuerpo del script en rectángulo amarillo, la salida está al lado del rectángulo

ls es el comando para enumerar los archivos seleccionados por nombres: /dev/sda5 es un archivo especial asociado con la partición de la unidad de disco y just_a_file es un archivo en el sistema de archivos que se muestra en la consola. ¿Cuál es la diferencia en la salida? La primera letra » b » muestra que /dev/sda5 es un archivo de dispositivo de bloque, no solo un archivo. Miremos desde el interior de Linux: la concepción global del almacenamiento y la manipulación de datos en Linux es: » todo es el archivo «. Significa que incluso los dispositivos desde el punto de vista de Linux pueden representarse como archivos. En lo profundo del código del sistema operativo, puede encontrar que el archivo es una instancia abstracta que tiene varias funciones bien estructuradas específicas para la fecha que contiene:

  • función de lectura
  • función de escritura
  • función abierta (para hacer un acceso correcto a los datos en varios lectores/escritores)
  • Cerrar función
  • Función ioctl (función de acciones muy específicas para archivos de controladores de dispositivos)

En esta concepción, la unidad de disco duro se representa como un archivo en la carpeta /dev/ . Como archivo, este HDD tiene una función de lectura definida. Esta lectura actúa como cualquier lectura de datos de archivo en cualquier programa de capa de aplicación. Entonces, podemos leer la entrada HDD. Estaremos en la lógica si este archivo tiene una función de escritura definida también.

¿Cómo detectar archivos de la unidad de disco?

La pregunta razonable es: cómo detectar el archivo y el «tamaño del archivo» para una copia. Es posible usando las utilidades de Linux “ lsblk ” y “ df ”. Primera lista de utilidades de archivos de dispositivos de bloque del sistema. La segunda utilidad muestra el tamaño del dispositivo en bloques.

Cuerpo del guión lsblk:

#!/usr/bin/env bash

lsblk

Consola de ejecución de scripts lsblk:

 cuerpo del script en rectángulo amarillo, la salida está al lado del rectángulo, el rectángulo naranja contiene nuestra información de disco

En la salida de la consola podemos ver el archivo de disco “ /dev/sda ” con subarchivos que representan particiones de este disco: “ /dev/sda1 ”, “ /dev/sda2 ”, “ /dev/sda3″ .

cuerpo del guión df:

#!/usr/bin/env bash
df /dev/sda

cuerpo del script en rectángulo amarillo, la salida está al lado del rectángulo

En la salida de la consola, podemos ver el tamaño de nuestro archivo de dispositivo en bloques de 1K.

dd: utilidad de volcado de disco estándar de Linux

Ahora echemos un vistazo a la utilidad de volcado de disco estándar de Linux “ dd ”. » dd » opera con archivos (con flujos de datos exactamente) en entrada y salida y solo obtiene datos del archivo de entrada bloque por bloque y pasa estos datos al archivo de salida . La utilidad «dd» tiene varios parámetros en ejecución: veremos los parámetros principales y veremos cómo usarlo.  

Formato de ejecución dd con parámetros principales de uso amplio:

dd [if=<archivo_de_entrada>] [of=<archivo_de_salida>] [bs=<número_de_bytes_en_la_operación_e/s_única>] [count=<número_de_bloque_a_ser_volcado>]

dd notas de ejecución:

El parámetro «si» se puede reducir: en caso de reducción, la entrada se recopilará de un flujo de entrada estándar de la aplicación. El parámetro » de » se puede reducir; en caso de reducción, la salida se dirigirá al flujo de salida estándar de la aplicación. El parámetro » bs » se puede reducir; en caso de reducción, se seleccionará algún parámetro predeterminado específico del sistema. El parámetro » recuento » se puede reducir; en caso de reducción, toda la entrada del archivo de entrada de parámetros dd se volcará en el receptor de parámetros del archivo de salida dd. 
(Debe tener permisos de root para actuar con dd. Asegúrese de que lo hará; sus datos pueden dañarse con acciones incorrectas)

Usando dd para almacenar el volcado de disco en el archivo:

Ahora vamos uno por uno a los casos de uso para ver cómo usar » dd «. Primero, veamos cómo almacenar imágenes de disco en un archivo. En nuestro caso, copiaremos el clon de imagen de disco del dispositivo cdrom al archivo que especificaremos. 

dd disco al cuerpo del script de clonación de archivos:

#!/usr/bin/env bash
dd if=/dev/sr0 of=cdrom_disk_dump_file
ls -l cdrom_disk_dump_file
rm cdrom_disk_dump_file

dd disk to file secuencia de comandos de clonación que se ejecuta en la consola:

cuerpo del script en rectángulo amarillo, la salida está al lado del rectángulo

Como podemos ver en la salida de la consola, el volcado de cdrom sin formato se ha copiado en el archivo de nuestro disco con una velocidad de 392 Mb/s. La tasa de rendimiento puede variar según el tipo de disco que utilice y el parámetro » bs » seleccionado. “ 1457256+0″ es un número de bloques copiados dentro y fuera en la ejecución “ dd ”.
(Tenga en cuenta que /dev/sr0 es el nombre del disco cdrom en mi sistema; su sistema puede tener otros nombres)

Usando dd para almacenar la imagen de disco sin procesar en otro disco conectado al host:

Como se mencionó anteriormente, es muy útil clonar el disco principal tal como está: de una unidad de disco a otra. “ dd ” también es útil para este caso.

dd clon de imagen de disco sin formato a otro cuerpo de script de disco:

#!/usr/bin/env bash
lsblk /dev/sda /dev/sdb
sudo dd if=/dev/sda /dev/sdb bs=1k
lsblk /dev/sda /dev/sdb

dd clon de imagen de disco sin procesar a otro script de disco que se ejecuta en la consola:

cuerpo del script en rectángulo amarillo, la salida está al lado del rectángulo

Como podemos ver antes, el disco de destino de la copia /dev/sdb no tiene datos. Pero después de que la estructura de partición de copia de /dev/sda sea igual a la estructura de /dev/sdb

Nota: tenga en cuenta que se necesita el comando «sudo» aquí para ser root en el trabajo en el archivo de desarrollo directamente.

Almacenar volcado de disco en otro disco host conectado a la red  

En este ejemplo, traduciremos el volcado de nuestro disco a través de la red usando la utilidad nc . Esta utilidad se ejecutará en nuestro host para poner datos en la red y obtenerlos de la red. Se ejecutará localmente, pero puede escribir los scripts de envío y recepción en diferentes hosts.

Script que envía el cuerpo del volcado del disco: 

#!/usr/bin/env bash
lsblk /dev/sda /dev/sdb
sudo dd if=/dev/sda | nc -l 

cuerpo del script en rectángulo amarillo, la salida está al lado del rectángulo 

dd aquí no tiene el parámetro » de «; en este caso, escribirá en el flujo de salida estándar . Esta transmisión se redirigió a la siguiente transmisión de entrada estándar de llamada nc mediante el uso de “ | “.  nc transmite los datos del disco mediante una conexión TCP al puerto 9000 de » localhost » (fuera del host actual) . Solo necesitamos un escucha TCP apropiado en el puerto 9000 para tener éxito. Seguirá a continuación.

Script que recibe el cuerpo del volcado del disco: 

#!/usr/bin/env bash
lsblk /dev/sda /dev/sdb
nc -l 9000 | sudo dd of=/dev/sdb bs=1M
lsblk /dev/sda /dev/sdb 

cuerpo del script en rectángulo amarillo, la salida está al lado del rectángulo

Aquí escuchamos la conexión TCP en el puerto 9000 por nc. A continuación , nc transmite todos los datos de conexión al flujo de salida estándar de nc . Esto se pasa al flujo de entrada estándar de dd mediante el uso de “ | Comando de redirección. dd no tiene el parámetro » si » aquí: obtendrá un flujo de entrada estándar como entrada en este caso (significa nc flujo de salida estándar ). Al final, podemos ver que la estructura de partición /dev/sdb es igual a /dev/sda como se esperaba.

Publicación traducida automáticamente

Artículo escrito por chashchegorov y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *