Comando dd
El comando dd es una potente herramienta de Linux utilizada para copiar y convertir archivos a bajo nivel. Su nombre proviene de "data duplicator" (o de la sentencia DD de los sistemas JCL de IBM). Es ampliamente utilizado para la clonación de discos, creación de copias de seguridad de particiones enteras, volcado de imágenes de sistemas operativos en memorias USB y pruebas de rendimiento de lectura y escritura.
| Categoría | Discos y almacenamiento |
|---|---|
| Disponible en | Linux (coreutils) |
| Equivalente en Windows | certutil, herramientas de terceros como Rufus o Win32 Disk Imager |
| Sustituye a | No tiene un sustituto directo; es el estándar de bajo nivel. |
| ¿Requiere permisos de administrador? | Sí, habitualmente requiere privilegios de superusuario (sudo) para acceder directamente a dispositivos físicos (como /dev/sdX). |
¿Qué significa su nombre?
DD proviene tradicionalmente de Dataset Definition (Definición de conjunto de datos) heredado de los sistemas operativos IBM OS/360, aunque en el ecosistema Unix/Linux popularmente se le conoce como Data Duplicator (Duplicador de datos).
Es un comando clásico del sistema operativo Unix que opera directamente a nivel de bloques, procesando la información sin interpretar el contenido ni la estructura de los archivos o sistemas de ficheros.
¿Para qué sirve?
El comando dd sirve para copiar flujos de datos byte a byte entre archivos, particiones, discos duros completos o dispositivos de almacenamiento externo. Permite especificar el tamaño de los bloques de lectura y escritura, transformar formatos (como convertir texto de ASCII a EBCDIC o cambiar mayúsculas y minúsculas) y realizar operaciones de clonación integral.
Es una herramienta de doble filo en la administración de sistemas: debido a que opera sin confirmaciones previas y directamente sobre los dispositivos físicos, un error en la selección de los parámetros de origen (if) o destino (of) puede provocar la pérdida irreversible de datos (por lo que popularmente se le suele llamar "disk destroyer").
Sintaxis
dd if=[origen] of=[destino] [opciones]
Los parámetros y opciones más habituales son:
| Parámetro / Opción | Descripción |
|---|---|
if=archivo |
Especifica el archivo, partición o dispositivo de entrada (input file). |
of=archivo |
Especifica el archivo, partición o dispositivo de salida (output file). |
bs=bytes |
Establece el tamaño del bloque de lectura y escritura (ej. 4M, 512). Acelera drásticamente la transferencia. |
count=N |
Copia únicamente N bloques especificados por bs. |
status=progress |
Muestra una barra de progreso periódica durante la transferencia de datos. |
Comandos más utilizados
| Comando | Descripción |
|---|---|
dd if=... of=... status=progress |
Copia datos mostrando una barra de progreso en tiempo real. |
dd if=/dev/zero of=archivo bs=1M count=100 |
Crea un archivo de un tamaño determinado rellenado de ceros (útil para pruebas). |
dd if=/dev/sda of=/path/backup.img bs=64K status=progress |
Genera una imagen de copia de seguridad completa de un disco duro. |
dd if=imagen.iso of=/dev/sdb status=progress |
Graba una imagen ISO booteable en un pendrive USB. |
Equivalencia con otros sistemas
| Acción | Linux antiguo | Linux actual | Windows |
|---|---|---|---|
| Copia de bajo nivel / Bloques | dd |
dd |
Herramientas gráficas (Rufus, Win32 Disk Imager) |
| Generar archivo de relleno / cero | dd |
dd / fallocate |
fsutil file createnew |
| Clonación de discos físicos | dd |
dd / ddrescue |
Software de clonación (Clonezilla, Macrium) |
| Verificar integridad / Hash | md5sum |
sha256sum |
certutil -hashfile |
Ejemplos
Crear una imagen ISO de un disco o partición
sudo dd if=/dev/sdb of=/home/usuario/imagen_usb.iso bs=4M status=progress
Flasear o grabar una imagen ISO en una memoria USB
sudo dd if=ubuntu.iso of=/dev/sdX bs=4M status=progress conv=fsync
Crear un archivo de prueba con un tamaño exacto de 1 GB lleno de ceros
dd if=/dev/zero of=archivo_prueba.img bs=1M count=1000 status=progress
Hacer una copia de seguridad comprimida rápida combinándolo con gzip
sudo dd if=/dev/sda bs=64K | gzip > /mnt/backup/disco_duro.img.gz
Ejemplo de salida
78124416+0 registros leídos
78124416+0 registros escritos
40000083200 bytes (40 GB, 37 GiB) copiados, 125,431 s, 319 MB/s
¿Cómo interpretar la salida?
- registros leídos / escritos: número de bloques completos y parciales procesados según el tamaño indicado en
bs. - bytes copiados: volumen total de información transferida en formato absoluto y legible.
- tiempo transcurrido: duración total de la operación de copia de datos en segundos.
- velocidad de transferencia: rendimiento medio sostenido de lectura y escritura durante el proceso.
Errores habituales
- Intercambiar los parámetros
if(origen) yof(destino), lo que puede sobrescribir un disco de datos importante con una partición vacía o ceros. - No utilizar privilegios de administrador (
sudo) al intentar volcar información directamente sobre dispositivos físicos de bloques (/dev/sdX).
Conceptos relacionados
- Dispositivos de bloques
- Sistema de ficheros
- Imagen ISO
- Clonación de discos
- Tabla de particiones
- Tamaño de bloque (block size)
Comandos relacionados
lsblkfdiskmountdfcpgzip
Curiosidades
Debido a su sintaxis particular basada en argumentos de estilo antiguo (separados por el signo igual sin espacios) y al riesgo crítico de sobreescritura accidental si se confunden los parámetros if y of, los administradores de sistemas suelen bromear diciendo que dd significa "Destroy Disk" (Destruir Disco) o "Data Destroyer" en lugar de su significado real.
Prácticas propuestas
- Ejecuta un comando con
ddutilizando/dev/zerocomo origen y un archivo temporal de 50 MB como destino, especificando bloques de 1 MB. ¿Cuánto tiempo tarda en completarse? - Utiliza el parámetro
status=progressjunto con un comando de copia de un archivo grande para observar cómo se actualiza la información de velocidad en pantalla. - Genera una copia de seguridad comprimida de una pequeña partición o archivo del sistema utilizando una tubería (
|) con el comandogzip. - Comprueba el espacio libre de tu almacenamiento antes y después de generar un archivo ficticio grande con
ddutilizando el comandodf -h. - Investiga qué ocurre si ejecutas
ddsin permisos de administrador (sudo) al intentar leer directamente un disco físico completo. - Compara el comportamiento del comando
cpfrente adda la hora de duplicar un archivo de texto común. ¿Qué diferencias principales aprecias en su funcionamiento interno?
Consejo: Revisa siempre dos veces los parámetros if= (origen) y of= (destino) antes de pulsar Intro al utilizar dd sobre dispositivos físicos, ya que una confusión puede borrar irreversiblemente la información de tu disco principal.