H1: ¿Qué es dd en Linux y cuál es la mejor manera de usarlo?
La mejor manera de usar dd en Linux para la mayoría y cuándo no usarlo
Para la mayoría de usuarios, la mejor práctica con dd es una copia puntual con status=progress y bs=4M. Esa combinación muestra avance en tiempo real y usa un bloque grande que evita que la operación tarde horas sin ver nada.
Si necesitas seguridad real, añade conv=fsync para forzar el vaciado del búfer al dispositivo antes de terminar. Sin eso, dd puede decir "hecho" mientras quedan bytes pendientes de escritura. Y siempre verifica: compara el tamaño con lsblk o genera un hash con sha256sum en origen y destino.
Si quieres evitar riesgos, no uses dd para gestionar particiones. Herramientas como cp, rsync, pv, cat o los instaladores de ISO con dd de los escritorios gráficos hacen lo mismo con menos probabilidad de error. dd no pregunta: si escribes of=/dev/sda en vez de of=/dev/sdb1, sobrescribes el disco completo sin aviso.
dd copia byte a byte sin validación de destino: un carácter de más en el nombre del dispositivo puede borrar un sistema entero.
Qué es dd y por qué se le dice "disk destroyer"
dd es una herramienta que copia y convierte datos a bajo nivel, byte por byte. Viene de Unix original y heredó una sintaxis sin guiones: if= (archivo de entrada), of= (archivo de salida), bs= (tamaño de bloque). No entiende "archivos" ni "particiones" de forma inteligente: trata todo como una secuencia de bytes.
El apodo "disk destroyer" viene de que no verifica si el destino es correcto. Si escribes if=imagen.iso of=/dev/sda en vez de of=/dev/sdb (la USB), sobrescribes tu disco de sistema. No hay confirmación, no hay papelera, no hay deshacer. El comando ejecuta y el daño es inmediato.
La sintaxis atípica también genera confusión: dd bs=1M count=1 if=/dev/zero of=test es válido aunque los parámetros vengan en cualquier orden, algo inusual comparado con herramientas modernas como cp o rsync que usan flags con guiones.
No existe "dd –help" convencional: ejecuta
man ddpara ver las opciones, oinfo coreutils dd invocation.
Qué necesitas antes de empezar con dd
Antes de ejecutar cualquier comando, necesitas cumplir estos requisitos:
- Identificar dispositivos con
lsblkofdisk -l. Nunca adivines: comprueba si la USB es/dev/sdbo/dev/sdc.lsblkmuestra tamaño y montaje, lo que ayuda a distinguir discos. - Desmontar el destino si está montado:
umount /dev/sdb1(o todas las particiones de ese disco conumount /dev/sdb*). Si no desmontas, los datos en caché pueden corromperse. - Permisos sudo: dd necesita acceso directo a dispositivos de bloque. Ejecuta con
sudoo como root. - Conocer los parámetros clave:
– bs= (block size): tamaño de cada bloque leído/escrito. Para discos, 4M es un buen equilibrio. – count=: número de bloques a copiar. Sin esto, dd copia todo hasta fin de archivo o dispositivo. – skip= / seek=: saltar bloques en entrada/salida respectivamente. – status=progress: muestra avance en tiempo real (disponible desde coreutils 8.24, 2015).
Checklist rápida antes de cada operación:
- ¿Confirmé con
lsblkque el dispositivo de salida es el correcto? - ¿Está desmontado?
- ¿Tengo sudo?
- ¿Sé qué tamaño tiene el origen y cabe en el destino?
Si tienes dudas entre
/dev/sdby/dev/sdc, ejecutalsblk -o NAME,SIZE,MODELy cruza el modelo con el que ves en tu equipo.
Métodos para usar dd comparados: cuál conviene según tarea
| Método | Comando base if/of | bs recomendado | ¿Necesita seek/skip/count/conv? | Muestra progreso | Riesgo de pérdida de datos |
|---|---|---|---|---|---|
| Copiar archivo a archivo | if=origen of=destino |
4M | No (copiar todo) | Sí, con status=progress |
Bajo si destino es ruta normal |
| Clonar partición | if=/dev/sda1 of=/dev/sdb1 |
4M | Sí si necesitas offset: skip, seek |
Sí | Medio: destino se sobrescribe |
| Clonar disco entero | if=/dev/sda of=/dev/sdb |
4M | No para clonado completo | Sí | Alto: disco destino queda idéntico |
| Crear USB booteable | if=imagen.iso of=/dev/sdb |
4M | No | Sí | Alto: USB se borra completamente |
| Respaldo/restauración MBR (512 bytes) | if=/dev/sda of=mbr.bak count=1 |
512 | count=1 obligatorio |
No | Bajo para respaldo; alto para restaurar |
| Borrado con /dev/zero | if=/dev/zero of=/dev/sdb |
4M | count= según tamaño |
Sí | Extremo: todo se pierde |
| Borrado con /dev/urandom | if=/dev/urandom of=/dev/sdb |
4M | count= según tamaño |
Sí | Extremo y lento |
Lectura rápida: si la columna "riesgo" dice "alto" o "extremo", verifica tres veces el dispositivo de salida antes de ejecutar.
Método 1: copiar archivos y clonar particiones o discos enteros
Para copiar un archivo:
dd if=documento.pdf of=copia.pdf bs=4M status=progress conv=fsync
Esto copia el archivo manteniendo metadatos básicos. Para preservar permisos y fechas, cp es mejor: cp --preserve=all. dd solo tiene sentido si necesitas la conversión de formato (por ejemplo, con conv=ucase para convertir mayúsculas).
Para clonar una partición:
- Identifica:
lsblkmuestra que la partición es/dev/sda1(origen, 250 GB) y/dev/sdb1(destino, 250 GB o mayor). - Desmonta destino:
sudo umount /dev/sdb1. - Ejecuta:
sudo dd if=/dev/sda1 of=/dev/sdb1 bs=4M status=progress conv=fsync. - Verifica:
lsblkpara comprobar que el tamaño coincide.
Para clonar un disco entero:
- Identifica:
sudo fdisk -lmuestra/dev/sda(500 GB, origen) y/dev/sdb(500 GB, destino). - Desmonta todas las particiones del destino:
sudo umount /dev/sdb*. - Ejecuta:
sudo dd if=/dev/sda of=/dev/sdb bs=4M status=progress conv=fsync. - Si el destino es más grande, la sobrante queda sin usar; después puedes redimensionar con
gparted.
Restaurar es el mismo comando al revés: si hiciste backup de la partición con if=/dev/sda1 of=backup.img, la restauras con if=backup.img of=/dev/sda1.
conv=fsyncno es lo mismo queconv=fdatasync. fsync vacía el búfer del archivo y sincroniza metadatos; fdatasync solo sincroniza datos sin tocar metadatos si no cambiaron.
Método 2: crear USB booteable desde ISO y copiar CD/DVD a ISO
Crear USB booteable:
- Inserta la USB (mínimo del tamaño de la ISO, usualmente 4 GB o más).
- Identifica:
lsblk. Tu USB aparece como/dev/sdb(por ejemplo, 8 GB). Confirma el modelo conlsblk -o NAME,SIZE,MODEL. - Desmonta:
sudo umount /dev/sdb*. - Escribe la ISO:
sudo dd if=ubuntu-24.04.iso of=/dev/sdb bs=4M status=progress oflag=sync. - Verifica que la USB tiene el tamaño esperado:
lsblk /dev/sdb.
Copiar CD/DVD a ISO:
dd if=/dev/cdrom of=mi_disco.iso bs=2048 status=progress
El bloque de 2048 bytes (2 KB) coincide con el tamaño de sector de los CD. Para DVDs de doble capa (~8.5 GB), usa una unidad que soporte DVD±R DL y asegúrate de tener espacio suficiente en disco.
Opciones adicionales para CD/DVD:
conv=noerrorsi el disco tiene daño físico: dd continúa en errores en vez de detenerse.iflag=directpara lectura directa sin búfer del sistema, útil en discos dañados donde necesitas control exacto.
Para USBs booteables, herramientas como
Ventoypermiten arrancar múltiples ISO sin reescribir la USB cada vez. dd graba una sola imagen.
Método 3: usos avanzados con conversión, recorte y borrado seguro
Opciones de conversión (conv=):
| Opción | Qué hace | Ejemplo de uso |
|---|---|---|
ucase |
Convierte minúsculas a mayúsculas | Convertir texto en archivo binario |
lcase |
Convierte mayúsculas a minúsculas | Igual que ucase, en sentido inverso |
swab |
Invierte parejas de bytes | Formatos big-endian ↔ little-endian |
sync |
Rellena bloques incompletos con ceros | Igualar tamaño en copias entre dispositivos |
notrunc |
No trunca el archivo de salida | Sobrescribir inicio de archivo sin borrar resto |
sparse |
Crea archivos sparse (sin reservar espacio) | Copiar discos con mucho espacio libre |
Recortar o extraer un fragmento:
Para extraer los primeros 100 MB de un disco:
dd if=/dev/sda of=fragmento.img bs=4M count=25 status=progress
(100 MB ÷ 4 MB = 25 bloques). Para saltar los primeros 500 MB y copiar 1 GB:
dd if=/dev/sda of=fragmento.img bs=4M skip=125 count=250 status=progress
Borrado seguro (no es cifrado):
| Método | Comando | Velocidad | Nivel de borrado |
|---|---|---|---|
| Ceros | sudo dd if=/dev/zero of=/dev/sdX bs=4M status=progress |
Rápido | Un paso de ceros |
| Datos aleatorios | sudo dd if=/dev/urandom of=/dev/sdX bs=4M status=progress |
Lento | Datos impredecibles |
El borrado con /dev/zero es suficiente para discos magnéticos modernos. Para SSD, blkdiscard o el Secure Erase del firmware es más eficaz.
Los sufijos K, M, G, T en
bs,count,skipyseekson potencias de 1024 (1K = 1.024 bytes, 1M = 1.048.576 bytes).
Si dd no funciona o no avanza: fallos frecuentes y cómo salir sin romper nada
Permiso denegado ("Permission denied")
Causa: no usaste sudo. Solución: añade sudo antes del comando.
Dispositivo ocupado ("Device or resource busy")
Causa: el destino está montado o algún proceso lo usa. Solución: sudo umount /dev/sdX* y verifica con lsof /dev/sdX que ningún proceso lo tiene abierto.
No space left on device
Causa: el destino es más pequeño que el origen. Solución: aborta con Ctrl+C, verifica tamaños con lsblk -o NAME,SIZE y usa un destino igual o mayor.
Lentitud extrema (velocidad de 20-40 MB/s en un SSD)
Causa: bs=512 sin iflag=fullblock. Cuando dd no lee un bloque completo, se detiene; con bloques pequeños esto pasa constantemente. Solución: usa bs=4M como mínimo para discos.
Cancelar sin corromper el destino
Presiona Ctrl+C. Esto envía SIGINT y dd aborta. Si ya había escrito parcialmente, el destino queda inutilizable como almacenamiento normal hasta que lo reescribas completamente.
Ver progreso sin cancelar
Si omitiste status=progress y el comando ya está corriendo, envía SIGUSR1:
kill -USR1 $(pgrep ^dd$)
Esto imprime bytes transferidos y velocidad sin detener la operación.
Si el comando lleva mucho tiempo y no sabes si avanza
En otra terminal: sudo iostat -x 2 muestra actividad de disco. Si r/s o w/s son mayores que cero, dd está trabajando.
Conv=noerroren discos dañados hace que dd continúe en errores, pero el archivo de salida contendrá bloques de ceros donde hubo fallo de lectura.
Programas comprobados
Aunque dd es una herramienta de línea de comandos de Linux (disponible en virtually todas las distribuciones), hay alternativas que pueden cubrir mejor ciertas tareas:
- cp [Linux]: copia archivos preservando metadatos (
cp --preserve=all). Más simple y seguro que dd para archivos. No sirve para dispositivos de bloque. - rsync [Linux]: copia con compresión, incremental y verificación. Ideal para respaldos. No copia dispositivos de bloque directamente.
- pv [Linux]: muestra progreso como dd pero como tubería:
pv archivo | dd of=/dev/sdb. Útil si necesitas ver avance de un pipe. - cat [Linux]:
cat imagen.iso > /dev/sdbhace lo mismo que dd para escritura simple, sin opciones de conversión. - Ventoy [Linux]: crea USBs booteables arrancando múltiples ISO sin reescribir la USB. Alternativa práctica al método dd para USBs booteables.
- gparted [Linux]: interfaz gráfica para clonar particiones y discos con verificación visual.
- Windows DiskImage [Windows]: herramienta oficial de Microsoft para escribir ISOs en USB. Alternativa gráfica al dd para usuarios que migran de Windows.
- Rufus [Windows]: crea USBs booteables con opciones avanzadas. No requiere línea de comandos.
- balenaEtcher [Windows, macOS, Linux]: interfaz gráfica que usa dd internamente pero con verificación y protección contra sobrescritura accidental.
Si vienes de Windows y usas balenaEtcher, verifica que el USB se escribió con
lsblkantes de arrancar: no todas las BIOS reconocen USBs formateados con ciertos métodos.
Preguntas frecuentes sobre dd en Linux
1. ¿Cómo se usa el comando dd en Linux con un ejemplo práctico?
Para copiar una imagen ISO a un pendrive, primero identifica el dispositivo con lsblk (por ejemplo, /dev/sdb) y ejecuta sudo dd if=archivo.iso of=/dev/sdX bs=4M status=progress conv=fsync. La clave es doble: el bloque de 4 megabytes acelera la escritura, y la opción conv=fsync garantiza que cada bloque se guarde físicamente antes de terminar, evitando que el sistema de archivos quede incompleto al retirar el dispositivo.
2. ¿Cuáles son las diferencias entre dd y cp en Linux?
La diferencia principal es a qué nivel operan: cp copia a nivel de archivo y gestión de carpetas, mientras que dd opera a nivel de bloque, copiando literalmente cada byte de un disco a otro. Por eso cp no sirve para crear unidades de arranque o copiar un disco duro entero, pero para mover archivos de usuario es más rápido y seguro. Si necesitas hacer una imagen de respaldo exacta de una partición entera, la única herramienta válida es dd.
3. ¿Qué es el parámetro bs y cómo afecta al rendimiento de dd?
El parámetro bs (block size) define el tamaño del bloque de datos que se escribe en cada operación. Por defecto, dd usa bloques de 512 bytes, lo cual es extremadamente lento para medios modernos; aumentarlo a 4M o 8M puede acelerar la transferencia entre un 50% y un 300% dependiendo del disco. Un valor demasiado alto puede saturar la memoria caché del sistema, así que 4M suele ser el punto ideal para la mayoría de los SSDs y pendrives actuales.
4. ¿Cómo grabo una imagen ISO en una memoria USB para hacerla booteable?
Primero, verifica el nombre exacto del dispositivo con lsblk (por ejemplo, /dev/sdb) y asegúrate de no seleccionar tu propio disco de sistema. Luego ejecuta sudo dd if=tu_imagen.iso of=/dev/sdb bs=4M status=progress conv=fsync. La opción status=progress te muestra el avance en tiempo real, y conv=fsync es fundamental para que todos los datos se graben antes de extraer la memoria USB, evitando archivos corruptos.
5. ¿Cómo creo un archivo de 1GB lleno de ceros usando dd?
Utiliza el dispositivo de bloque especial /dev/zero, que genera ceros infinitos: el comando es dd if=/dev/zero of=archivo_grande.bin bs=1M count=1024. En este caso, 1024 bloques de 1 megabyte suman exactamente 1 GiB. Para un espacio de intercambio (swap) que el sistema pueda usar, sería más recomendable el comando fallocate -l 1G swapfile, ya que reserva el espacio sin tener que llenarlo físicamente bit a bit.
6. ¿Dónde encuentro la documentación oficial del comando dd?
La documentación completa y oficial se consulta desde la terminal ejecutando man dd. Es importante aclarar que dd no es un comando independiente de Unix ni de GNU, sino que forma parte del paquete coreutils, por lo que no existe un manual específico separado para él. El manual del comando explica detalladamente cada opción de conversión y bloque, aunque su lectura puede resultar densa para usuarios nuevos.
7. ¿Qué diferencia hay entre usar dd y otros métodos para grabar ISOs?
Aunque herramientas gráficas como GNOME Disks o balenaEtcher simplifican el proceso, dd es la única opción disponible en cualquier terminal de Linux sin necesidad de instalar software adicional. A nivel de rendimiento, una buena utilidad gráfica y dd tardan prácticamente lo mismo, pero dd ofrece un control manual superior. Sin embargo, dd no verifica la integridad del medio de forma predeterminada, por lo que debes comprobar el hash SHA256 de la ISO por separado.
8. ¿Cómo muestro el progreso mientras se ejecuta dd?
La forma estándar es incluir la opción status=progress directamente en el comando al iniciar la tarea (por ejemplo, dd if=imagen.iso of=/dev/sdb bs=4M status=progress). Si el comando ya está corriendo, puedes enviarle la señal USR1 presionando Ctrl+Z y ejecutando kill -USR1 [PID] para forzar una actualización del estado en la terminal. Sin estas opciones, el comando se ejecuta completamente en silencio y no sabrás cuánto falta hasta que termine.
Fuentes
- AllthingsopenHow to use the dd command to create bootable Linux drivesconsultado el 24/09/2026
- StackexchangeIs the dd command enough to delete all data from a hard disk?consultado el 24/09/2026
- ThreadsThe Unix/Linux dd command is also known as “disk destroyer” if you …consultado el 24/09/2026
- Superuserdd to a different filesystem – Super Userconsultado el 24/09/2026
- Mxlinuxdd command – MX Linuxconsultado el 24/09/2026
