Dd Guide 00 Featured Image

Cómo usar el comando dd en Linux

dd es uno de los comandos más importantes de Linux, utilizado principalmente para realizar copias de seguridad de discos duros y particiones. Cuando se utiliza correctamente, dd puede ser una herramienta poderosa para escribir datos de una partición a otra y realizar diferentes tareas con archivos. Aquí le mostramos cómo hacer un buen uso del comando dd.

La historia de dd

El comando fue desarrollado originalmente en AT&T Bell Laboratories en la década de 1970 por un científico informático llamado Ken Thompson. Fue desarrollado para sistemas basados ​​en Unix y se le dio un nombre que se eligió como referencia a una declaración que se encuentra en el lenguaje de control de trabajos de IBM, que se llamó «DD». Se puede observar que la sintaxis del comando se parece mucho a una declaración en el lenguaje de control de trabajos.

El comando se diseñó originalmente para ser una utilidad para convertir ASCII a EBCDIC y viceversa. Primero se integró con una versión de Unix en 1974, con el lanzamiento de la quinta edición del sistema operativo.

dd ha sido llamado «destructor de discos» como una broma en la comunidad de Unix debido a su capacidad para destruir datos en discos duros cuando se usa incorrectamente.

Operandos básicos

Ahora que conoces un poco los antecedentes del comando y sus habilidades destructivas cuando se usa incorrectamente, es hora de aprender a aprovechar todo lo que ofrece a los usuarios de diferentes distribuciones de Linux.

En primer lugar, consulte el manual utilizando el --help bandera:

Dd Guía 01 Dd Imprimir Ayuda

Hay dos operandos para el comando que se utilizan más comúnmente. Están if y of, que significan «archivo de entrada» y «archivo de salida» respectivamente. los if operando se utiliza para representar la ubicación de origen, mientras que el of El operando se utiliza para representar la ubicación en la que desea guardar los datos de la ubicación de entrada.

dd if=<input file> of=<output file>

Las ubicaciones de origen y salida más comunes incluyen discos duros, particiones e imágenes de disco.

Antes de usar el comando, puede ser útil usar el fdisk utilidad para ver las particiones en su sistema. Esto se puede hacer fácilmente usando el comando -l bandera:

Dd Guide 02 Lista de particiones Fdisk

En este caso, if se utiliza para representar la unidad «/dev/sda», y of representa la unidad «/dev/sdb», donde se guardarán los datos de «/dev/sda»:

dd if=/dev/sda of=/dev/sdb

Guía Dd 03 Dispositivo duplicado

Creación de una imagen de disco

Uno de los mejores casos de uso para el comando es crear imágenes de disco en el formato de archivo «.img». Esto es extremadamente útil para hacer una copia de seguridad de los datos en su sistema basado en Linux y es probablemente la forma más rápida y sencilla de hacer una copia de seguridad de un disco duro completo.

La lógica aquí es principalmente la misma en este caso, con el if operando que representa la unidad «/dev/sda» y la of operando que representa un archivo “.img”, donde se guardarán los datos del disco duro en:

dd if=/dev/sda of=/tmp/image.img

Dd Guide 04 Volcar partición a Img

Guardar una imagen de disco en una partición

Crear una imagen de disco con el comando es bastante sencillo, pero también lo es la versión inversa de ese proceso.

En este escenario, nuestro archivo de imagen de disco actúa como archivo de entrada y nuestra nueva partición actúa como archivo de salida. La utilidad está guardando los datos de nuestra imagen de disco en nuestra partición “/dev/sdb”:

dd if=/tmp/image.img of=/dev/sdb

Guía Dd 05 Escribir imagen en el dispositivo

Creación de una imagen de disco comprimida

Si crea una imagen de disco de un disco duro de tamaño completo, puede imaginar que el tamaño del archivo de la imagen de disco final probablemente sea bastante grande. Por esta razón, la utilidad dd tiene una función que crea imágenes de disco comprimidas.

Se puede crear una imagen de disco comprimida usando la tubería | dominio. En este caso, se utiliza para tomar el contenido del archivo de entrada y realizar el gzip comando con un -c bandera, con el contenido empaquetado en un archivo «.gz»:

dd if=/dev/sda | gzip -c > /tmp/image.gz

Guía Dd 06 Crear volcado comprimido

Especificación de un tamaño de bloque

También puede jugar con la velocidad de la operación del comando dd. Esto se puede lograr usando el bs operando, que se utiliza para representar el tamaño del bloque. El tamaño del bloque representa el número de bytes dd copias al archivo de salida en una sola instancia. Se representa mediante múltiplos de 1024 bytes y el valor predeterminado se establece en 512 bytes. Cuanto mayor sea el tamaño del bloque, más rápido se guardarán los datos en el archivo de salida.

En este caso, estamos configurando el tamaño del bloque en 2048:

dd if=/dev/sda of=/tmp/image.img bs=2048

El tamaño del bloque también se puede especificar en kilobytes:

dd if=/dev/sda of=/tmp/image.img bs=2K

Dd Guide 07 Img Dump Modificar tamaño de bloque

Limpiar un disco duro

dd también se puede usar para limpiar su disco duro. Esto se logra leyendo ceros o caracteres aleatorios de “/dev/zero” o “/dev/urandom” y guardándolos en el disco duro/partición, que sobrescribe los datos que contiene. Esto es extremadamente útil cuando desea asegurarse de que sus datos no se puedan recuperar fácilmente después de haber vendido o desechado su disco duro.

Sobrescribir un disco duro usando ceros:

dd if=/dev/zero of=/dev/sdb

Dd Guide 08 Disco de puesta a cero

También puede sobrescribir el dispositivo usando caracteres aleatorios:

dd if=/dev/urandom of=/dev/sdb

Dd Guide 09 Disco aleatorio

Creación de una unidad USB de arranque

La creación de unidades flash USB de arranque utilizando archivos «.iso» con el comando es simple:

dd if=os.iso of=<USB drive location>

Guía Dd 10 Escribir imagen en dispositivo

Clonación de particiones específicas usando dd

Otro uso brillante para dd está clonando particiones activas en su sistema Linux. A diferencia de un archivo IMG, la clonación le permite crear una copia exacta de una partición en particular y usarla de inmediato. Esto puede ser útil si tiene una configuración de varios discos y desea crear particiones redundantes para su sistema.

Para clonar la partición de “/dev/sda4” a “/dev/sdd1”.

dd if=/dev/sda4 of=/dev/sdb1 conv=noerror,sync

los conv El parámetro le permite incluir opciones adicionales para modificar el comportamiento de dd. Esto puede ser tan simple como convertir un nombre de archivo a mayúsculas o algo complejo como cambiar la propiedad de un bloque. En este caso, estoy usando noerror y sync:

  • La opción «noerror» le dice a dd que continúe copiando a través de un archivo de dispositivo incluso si informa errores del dispositivo. Esto puede ser útil si el dispositivo donde vive su partición ya está defectuoso, porque «noerror» asegura que dd copiará todos los datos recuperables en esa partición.
  • La opción «sincronizar» le dice a dd que coloque cada bloque de datos entrante en el búfer de copia. Lo que esto significa es que dd se asegurará de que cada bit de datos que pueda copiar sea exactamente el mismo entre el origen y el destino. Esto es para garantizar la integridad de los datos de la partición que está clonando.

Dd Guide 11 Partición de clones estrictos

Volcar el contenido de un CD usando dd

También es posible utilizar dd como una herramienta de volcado de contenidos del disco. Similar a un archivo IMG, puede hacer esto usando una unidad de disco como entrada y la extensión .ISO como salida. Considere el siguiente ejemplo:

dd if=/dev/cdrom of=/tmp/dump.iso conv=noerror,sync

Este comando le indicará a dd que cargue el dispositivo de CD-ROM y copie su contenido en un archivo ISO.

Dd Guide 12 Dump Cd Disco

Una vez hecho esto, puede utilizar el file comando para verificar si el archivo volcado es un ISO 9660 imagen:

Grabación del volcado ISO en un CD

A continuación, puede usar dd para crear duplicados del archivo ISO que acaba de crear. Para hacer esto, debe insertar un disco en blanco en su unidad y usar «/dev/cdrom» como archivo de salida de dd. Con eso, puede ejecutar el siguiente comando para grabar correctamente el archivo ISO en el disco:

dd if=/tmp/image.iso of=/dev/cdrom obs=32k seek=0

Este comando no intenta utilizar ninguna omisión de errores ni comprobaciones de integridad. En su lugar, establece dos opciones que son específicas para escribir en CD-ROM:

  • La opción «obs» establece el tamaño de los bloques que dd va a escribir en el disco. En este caso, el comando utiliza 32 kilobytes como base para las transferencias de medios ópticos.
  • Por otro lado, la opción «buscar» le dice a dd que configure el inicio de la transferencia a un bloque de datos específico. Para transferir correctamente a un CD-ROM, es importante establecerlo en 0 para que dd escriba inmediatamente en el primer sector del disco.

Guía Dd 13 Grabar disco Cd

Preguntas frecuentes

¿Es posible ver el progreso de una operación dd?

¡Sí! Es increíblemente fácil ver el progreso de una operación dd. Para hacer esto, todo lo que necesita hacer es incluir el status parámetro al final de su comando dd:

dd if=/dev/sda4 of=/dev/sdd1 conv=noerror,sync status=progress

La opción «progreso» le dice a dd que imprima los bloques que está copiando actualmente en la salida estándar, lo que le permite ver el progreso del comando. Además de la opción de «progreso», el parámetro de estado también acepta dos valores adicionales:

  • Noxfer: El valor «noxfer» es similar a «progreso» pero no imprime la información de transferencia general al final del comando. Esto puede ser útil si está utilizando comandos dd como parte de una tubería UNIX grande.
  • Ninguna: El valor «ninguno» le dice a dd que no imprima ninguna información excepto errores cuando se está ejecutando. Esto es útil si está ejecutando tareas dd programadas, como la creación de archivos IMG de copia de seguridad para las particiones actualmente activas.

¿Está bien establecer siempre un tamaño de bloque alto para acelerar las transferencias?

No. Si bien establecer un tamaño de bloque alto ciertamente acelerará la velocidad de transferencia de dd, hacer esto no garantizará que el dispositivo en el que está escribiendo se inicialice correctamente. Por ejemplo, establecer un tamaño de bloque alto para medios ópticos como un CD-ROM o un DVD-ROM puede generar discos ilegibles cuando se reproducen en un reproductor de discos.

Una buena regla general es usar tamaños de bloque altos solo cuando se descarga desde medios como discos y unidades flash. Además, también es una buena práctica establecer el tamaño máximo de bloque en 2048 kilobytes únicamente. Al hacer esto, se asegura de que aún pueda volver a colocar el contenido de un disco en un CD o DVD.

Intenté crear una unidad USB de arranque, pero no arrancó. ¿DD no funciona?

¡No! La razón más probable por la que no arrancó es que el archivo que dd copió en la unidad USB no es un archivo de arranque. Por ejemplo, escribir un instalador de CD en una unidad USB no establecerá los indicadores adecuados para que sea de arranque.

Una forma de asegurarse de que sea de arranque es verificar sus propiedades a través del file programa. Por ejemplo:

file /Downloads/ubuntu-21.10.iso

A partir de ahí, debe observar las propiedades que se imprimen en la salida estándar. Un archivo de arranque debe ser una imagen de disco o un archivo híbrido ISO.

Credito de imagen: Unsplash

Experto Geek - Tu Guía en Tendencias Tecnológicas