¿Cómo usar el comando dd en Linux?

Élcomando ddes una utilidad para copiar y convertir archivos de una ubicación a otra. Curiosamente, significa “copiar y convertir”, pero dado que el nombreccya fue tomado por el compilador de C, se denominó ‘dd‘. Ya queddinteractúa directamente con los sectores de un disco es un potencialcomando peligrosoy debe usarse con la máxima precaución.

Tabla de contenido

Uso básico del comando dd

ddEl comando de forma predeterminada lee desde la entrada estándar y escribe en la salida estándar. Esto se puede cambiar usando elifyofopcionesifespecifica el archivo de entrada yofespecifica el archivo de salida:

$ dd if=<input-file-name> of=<output-file-name>

No corraddsi no estás seguro de qué ponerifohof. (ddes infamemente conocido como el destructor de discos.)

Algunas opciones útiles:

Opciones Explicación
bs=BYTES define el tamaño del bloque/número deBYTESpara ser leído o escrito a la vez. (predeterminado=512)
cuenta=N especifica que soloNnúmero de bloques debe ser copiado.
conv=sync,noerror noerrorinstruyeddpara continuar si hay un error ysyncindica a dd que complete el bloque de entrada con NUL si hubo un error de lectura.
status=progress disponible enddv8.24 y posteriores, muestra el progreso de la operación.
(Verificarddversión de , escriba$ dd --version)

Nota: El tamaño de bloque óptimo para usar depende de los medios de almacenamiento subyacentes. En general, un tamaño de bloque más grande significa lectura y escritura más rápidas.

Cosas prácticas que se pueden hacer usando dd

Repasemos algunas de las aplicaciones prácticas del comando dd aquí.

1. Clonación de unidades/particiones enteras

Este es uno de los usos más populares del comando dd. Puede identificar las particiones usando elfdiskdominio:

$ sudo fdisk -l
Particiones NVMe
Particiones SSD Sata

Nota: Las particiones que se muestran arriba (para 2 SSD, una NVMe y otra SATA) pueden ser diferentes a las que tiene en su sistema.

Para clonar un tipo de partición:

$ sudo dd if=/dev/sda of=/dev/sdb bs=64M conv=noerror status=progress

Este comando clona todo el/dev/sdapara/dev/sdbleyendo y escribiendo 64 MiB a la vez y continuará clonando si hay algún error al leer un bloque. Élofla opción generalmente será un disco duro externo vacío (/dev/sdben este caso).

2. Creación de copias de seguridad comprimidas de particiones

A veces, clonar la partición puede ser un proceso demasiado grande. Es posible que desee crear una copia de seguridad comprimida para que ocupe menos espacio.ddcuando se usa con el comando gzip puede hacer exactamente eso:

$ sudo dd if=/dev/sda conv=sync,noerror status=progress | gzip -c > sda_backup.tar.gz

Como no hay unofopción, dd escribirá/dev/sdaparastdout. | (carácter de tubería) solo redirigestdoutdeddparastdindegzip. . . . La opción -c dictagzippara escribir el archivo enstdoutque luego es redirigido a untar.gzhora de oficina.

Incluso puede hacer una copia de seguridad en una máquina remota si tienesshacceso a esa máquina y usted tienesshconfigurado en su máquina. Lo más probable es que la máquina remota ya tengassh. Para instalarlo en su sistema local, siga este tutorial.

Para hacer una copia de seguridad en una máquina remota, escriba esto en su máquina local:

$ sudo dd if=/dev/sda bs=1M conv=sync,noerror status=progress | gzip -c | ssh username@remote_machine 'cat > backup.tar.gz'

Enter su contraseña y listo, se inicia una copia de seguridad remota.

Copia de seguridad remotaCopia de seguridad remota

En la captura de pantalla anterior, creé una copia de seguridad aleatoria de 40 Mib (o 42 MB) desde mi máquina local en una máquina remota sobressh.

Listado del contenido en la máquina remota usando el comando ls:

Ls en máquina remotals en máquina remota

Ahora en lugar de escribir agzip'sstdoutla copia de seguridad se transmite al servidor remotostdinque es leído por el comando cat.

El comando cat sin ninguna opción solo escribe enstdoutlo que lee formastdin. Redirigir elstdouta un.tar.gzarchivo tiene el efecto decatcomando que lee la copia de seguridad y la escribe en el.tar.gzhora de oficina.

3. Creación de una unidad USB de arranque

Incluso puede crear una unidad USB de arranque usandodd. Necesitarás el.isoarchivo de su Sistema Operativo para esto.

La unidad USB debe desmontarse primero. Para desmontar escriba:

$ sudo umount /dev/<usb_drive_partition>

Para enumerar la partición de la unidad USB, utilicefdisk -lo usar ellsblkdominio:

$ sudo lsblk
Salida Lsblksalida lsblk

Ahora que la unidad está desmontada, podemos crear una unidad de arranque a partir de ella. Aquí crearé una unidad de arranque en/dev/sdbcon Ubuntu 20.04 en él:

$ sudo dd if=~/Downloads/ubuntu-20.04.1-desktop-amd64.iso of=/dev/sdb bs=64M status=progress

/dev/sdbahora es una unidad de arranque.

4. Limpiar una unidad con el comando dd

Una unidad se puede borrar sobrescribiendo con 0 o datos aleatorios usandodd. Aquí voy a limpiar el/dev/sdbmanejar.Asegúrese absolutamente de qué unidad va a escribir en elofopción.

Para sobrescribir con el tipo de 0:

$ dd if=/dev/zero of=/dev/sdb bs=1M status=progress

/dev/zeroes un dispositivo especial que proporciona tantos caracteres nulos (ASCII NUL, 0x00) como se leen. sobrescribirá/dev/sdacon 0 teniendo el efecto de borrarlo.

Para borrar la unidad sobrescribiéndola con datos aleatorios, escriba:

$ dd if=/dev/urandom of=/dev/sdb bs=1M status=progress

/dev/urandomes también un dispositivo especial desde el cual se pueden leer datos aleatorios.

5. Convertir archivos a mayúsculas

Este es un uso oscuro dedd. Sin embargo es interesante queddpuede hacer esto también!

$ dd if=file of=new_file conv=ucase
Archivo Dd en mayúsculasdd convertir archivo a mayúsculas

Conclusión

En este artículo aprendimos a usardd.ddes un comando muy útil, aunque peligroso, si se usa incorrectamente. Para aprender más sobreddcomando, mira supagina del manual

Artículos Relacionados