
status=progress dejó de ser un truco y se convirtió en la forma normal de seguir la copia, y hoy existen herramientas mejores que el dd para algunas de las tareas que él hacía solo.O dd copia datos bloque a bloque, sin interpretar lo que está copiando. Es eso lo que lo hace capaz de grabar una ISO en un pendrive, clonar un disco entero o guardar el sector de boot — y es exactamente eso lo que lo hace peligroso: obedece sin preguntar, y un device equivocado en el of= destruye datos sin confirmación ni papelera.
Este post muestra lo que el comando hace de útil en el día a día, con los cuidados que separan la herramienta del desastre.
De dónde viene el nombre
O dd apareció en la Versión 5 de Unix y se creó para convertir datos entre ASCII y EBCDIC. La sintaxis tan rara — if=, of=, bs=, en lugar de las flags con guion que usa cualquier comando Unix — es herencia directa de la instrucción DD (Data Definition) del JCL de IBM. Hay quien dice que el parecido fue una broma de programador. El comando está estandarizado por IEEE Std 1003.1 — hoy en la Issue 8, POSIX.1-2024. Pero ojo: el dd de GNU coreutils, que es el de Linux, va mucho más allá del estándar. POSIX define if, of, bs, cbs, conv, count, ibs, obs, seek e skip, y solo admite los sufijos k, b e x en el tamaño de bloque. status=progress, oflag=, iflag= y el sufijo M son extensiones GNU — el propio manual de coreutils lo dice con todas las letras. Los ejemplos de este post valen en Linux; en otro Unix, consulta el manual de allí. El status=progress, en concreto, existe a partir de coreutils 8.24, de 2015.
Lo que lo hace potente en Linux es una característica del sistema, no de él: aquí, disco, partición, memoria y generadores como /dev/zero e /dev/urandom son todos archivos. El dd solo sabe leer de un archivo y escribir en otro — el resto es consecuencia.
Antes de nada: descubre el device correcto
Toda tragedia con dd empieza en el mismo sitio: la persona pensó que el pendrive era /dev/sdb y era /dev/sda. Compruébalo siempre:
lsblk -o NAME,SIZE,TYPE,MOUNTPOINTS,MODEL
Verás algo así — fíjate en el tamaño y en el modelo, no solo en la letra:
NAME SIZE TYPE MOUNTPOINTS MODEL
sda 931G disk Samsung SSD 870
├─sda1 1G part /boot/efi
└─sda2 930G part /
sdb 29G disk SanDisk Cruzer
└─sdb1 29G part /media/nilton/PENDRIVE
El de 931 GB es tu sistema. El de 29 GB es el pendrive. Y nota: el objetivo del dd es el disco (/dev/sdb), no la partición (/dev/sdb1). Antes de grabar, desmonta — pero no expulses:
sudo umount /dev/sdb1
Grabar una ISO en un pendrive
Es el uso más común, y el único comando de este post que probablemente repetirás:
sudo dd if=ubuntu-24.04.2-desktop-amd64.iso of=/dev/sdb bs=4M status=progress oflag=sync
Cada parte importa:
if=— input file, el origen. Aquí, la imagen.of=— output file, el destino. Es esta la que destruye datos si es incorrecta.bs=4M— tamaño de bloque. El predeterminado es 512 bytes, lo que hace millones de operaciones diminutas y deja la grabación lenta. Con 4 MB la diferencia es de minutos a segundos.status=progress— muestra los bytes copiados y la velocidad en tiempo real. Sin esto, el terminal se queda mudo y parece colgado.oflag=sync— escribe de verdad en lugar de acumular en caché, para que el comando solo termine cuando el dato esté en el pendrive.
Al terminar, fuerce el vaciado de la caché antes de extraer el dispositivo:
sync
Un detalle que ahorra tiempo: para una ISO híbrida — que es el caso de prácticamente toda distribución actual — el cp hace el mismo trabajo, y es mucho más difícil equivocarse:
sudo cp ubuntu-24.04.2-desktop-amd64.iso /dev/sdb && sync
Borrar el MBR
O MBR (Master Boot Record) es el primer sector del disco, con 512 bytes divididos así:
446 bytes bootstrap (o código que inicia o boot)
64 bytes tabela de particoes
2 bytes assinatura 0x55AA
---------
512 bytes
Estos comandos destruyen datos. Verifique el device dos veces.
# apaga o MBR inteiro, INCLUSIVE a tabela de particoes
sudo dd if=/dev/zero of=/dev/sdX bs=512 count=1
# apaga so o bootstrap e PRESERVA a tabela de particoes
sudo dd if=/dev/zero of=/dev/sdX bs=446 count=1
Una advertencia sobre esos 446 bytes: no todos son código. Los cuatro últimos (offsets 440 a 443) guardan la firma de disco de 32 bits, que Windows registra en el BCD y que Linux usa para montar el PARTUUID de discos MBR. Ponerlos a cero puede impedir que Windows se inicie y cambia el PARTUUID de las particiones. Si quieres conservar la firma, el objetivo es bs=440 count=1.
La diferencia entre 512 y 446 es la diferencia entre perder las particiones y simplemente eliminar el gestor de arranque. Antes de cualquiera de los dos, guarda una copia: son 512 bytes, no cuesta nada:
sudo dd if=/dev/sdX of=~/mbr-backup.img bs=512 count=1
# para restaurar:
sudo dd if=~/mbr-backup.img of=/dev/sdX bs=512 count=1
Detalle que pilla a quien repite esos comandos en un archivo en lugar de en un dispositivo: el dd trunca el archivo de salida al tamaño escrito. En /dev/sdX eso no ocurre, porque truncar no tiene sentido en un dispositivo de bloque, pero dd if=/dev/zero of=imagem.img bs=446 count=1 deja la imagen con 446 bytes. Cuando el destino sea un archivo, añade conv=notrunc.
Cabe saber que esto vale para discos con particionado MBR. Equipos con UEFI y GPT, que son la mayoría hoy, guardan el boot en la partición EFI y tienen una copia de la tabla GPT al final del disco: ahí el remiendo es con gdisk o sgdisk, no con dd.
Otros usos que merecen la pena
# criar um arquivo de tamanho fixo (ex.: swap de 2 GB)
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
# para sobreviver ao reboot, acrescente ao /etc/fstab:
# /swapfile none swap sw 0 0
# medir a velocidade bruta de escrita do disco
dd if=/dev/zero of=teste.img bs=1M count=1024 oflag=direct status=progress
# clonar um disco inteiro para outro do mesmo tamanho ou maior
sudo dd if=/dev/sda of=/dev/sdb bs=64M status=progress conv=noerror,sync
# gerar um arquivo com dados aleatorios
dd if=/dev/urandom of=aleatorio.bin bs=1M count=10
Dos detalles de esos ejemplos: el oflag=direct en la prueba de velocidad evita la caché del sistema, si no se mide la RAM y no el disco. Y el conv=noerror,sync en el clonado envía el dd seguir adelante cuando encuentra un sector ilegible, rellenando con ceros para no desalinear el resto — sin él, un único sector defectuoso aborta la copia.
Cuándo no usar dd
O dd resuelve mucho, pero en 2026 hay herramientas mejores para algunos casos:
- Disco con sectores defectuosos: use
ddrescue(paquetegddrescue). Intenta varias pasadas, mapea lo que consiguió leer y permite reanudar desde donde se detuvo — elddno hace nada de esto. - Seguir el progreso con barra:
pvda barra, porcentaje y tiempo estimado —pv arquivo.iso | sudo dd of=/dev/sdb bs=4M iflag=fullblock— eliflag=fullblockno es opcional aquí: el búfer de un pipe en Linux es de 64 KB y, sin él, elbs=4Mno tiene efecto alguno. - Copiar archivos comunes:
cpersyncson más rápidos, más seguros y saben manejar permisos y enlaces. - Crear un archivo grande sin escribir nada:
fallocate -l 2G arquivoes instantáneo, porque solo reserva espacio.
Y, sí: o dd aparece en el examen de LPI. Vale la pena saberse de memoria qué son if, of, bs y count, y la cuenta de los 512 bytes del MBR.
Para continuar
- Usando el comando wget — para descargar la ISO que vas a grabar
- 500 comandos de Linux
- Manual de dd en GNU coreutils · Linux Professional Institute