dd (Español)

Esta traducción de
dd
fue revisada el
2019-09-22
. Si existen
cambios
puede
actualizarla
o avisar al
equipo de traducción
.
Artículos relacionados
Disk cloning (Español)
USB flash installation media (Español)#Utilizar dd
Benchmarking#dd
dd
es una de las
Core utilities (Español)
cuyo objetivo principal es convertir y copiar un archivo.
De manera similar a
cp
, por defecto
dd
hace una copia bit a bit del archivo, pero con funciones de control de flujo de E/S de nivel inferior.
Para obtener más información, consulte
dd(1)
o la
documentación completa
.
Sugerencia
Por defecto,
dd
no muestra nada hasta que la tarea haya finalizado. Para monitorear el progreso de la operación, agregue la opción
status=progress
a la orden.
Advertencia
Se debe ser extremadamente cauteloso utilizando
dd
, ya que con cualquier orden de este tipo se pueden destruir datos de forma irreversible.
Instalación
dd
es parte de GNU
coreutils
. Para otras utilidades del paquete, consulte
Core utilities (Español)
.
Clonación y restauración de discos
La orden
dd
es una herramienta simple, pero versátil y potente. Se puede utilizar para copiar de origen a destino, bloque por bloque, independientemente de los tipos de sistemas de archivos o sistemas operativos. Un método conveniente es usar
dd
desde un entorno live, como en un CD Live.
Advertencia
Al igual que con cualquier orden de este tipo, debe ser muy cauteloso al usarlo; puede destruir datos. ¡Recuerde el orden del archivo de entrada (
if=
) y del archivo de salida (
of=
) y no los invierta! Asegúrese siempre de que la unidad o partición de destino (
of=
) sea de igual o mayor tamaño que la fuente (
if=
).
Clonar una partición
Desde el disco físico
/dev/sda
, partición 1, al disco físico
/dev/sdb
, partición 1:
# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress
Nota
Tenga en cuenta que si la partición de salida
of=
(
sdb1
en el ejemplo) no existe,
dd
creará un archivo con este nombre y comenzará a llenar su sistema de archivos raíz.
Clonar un disco duro completo
Desde el disco físico
/dev/sda
al disco físico
/dev/sdb
:
# dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync status=progress
Esta orden clonará toda la unidad, incluido el MBR (y, por lo tanto, el cargador de arranque), todas las particiones, UUID y datos.
bs=
establece el tamaño del bloque. El valor predeterminado es 512 bytes, que es el tamaño de bloque «clásico» para discos duros desde principios de la década de 1980, pero no es el más conveniente. Utilice un valor mayor, 64K o 128K. Además, lea la advertencia siguiente, porque no solo hay que tener encuenta los «tamaños de bloques» en sí, también influyen estos en cómo se propagan los errores de lectura. Consulte
[1]
y
[2]
para obtener más información y para determinar el mejor valor de bs para su caso particular.
noerror
indica a
dd
que continúe la operación, ignorando todos los errores de lectura. El comportamiento predeterminado para
dd
es detenerse ante cualquier error.
sync
rellena los bloques de entrada con ceros si hubo errores de lectura, por lo que las compensaciones de datos permanecerán sincronizadas.
status=progress
muestra estadísticas de transferencia periódicas que se utilizan para estimar cuándo puede completarse la operación.
Nota
El tamaño de bloque que especifique influye en cómo se manejarán los errores de lectura. Lee abajo. Para la recuperación de datos, utilice
ddrescue
.
La utilidad
dd
técnicamente tiene un «tamaño de bloque de entrada» (IBS) y un «tamaño de bloque de salida» (OBS). Cuando configura
bs
, configura de manera efectiva tanto IBS como OBS. Normalmente, si el tamaño de su bloque es, digamos, 1 MiB,
dd
leerá 1024×1024 bytes y escribirá bytes iguales. Pero si ocurre un error de lectura, las cosas saldrán mal. Mucha gente parece pensar que
dd
«llenará los errores de lectura con ceros si usa las opciones
noerror, sync
, pero esto no es lo que sucede.
dd
, según la documentación, llenará el OBS al tamaño del IBS
después de completar su lectura
, lo que significa agregar ceros al
final
del bloque. Esto significa, para un disco, que efectivamente todo 1 MiB se estropearía debido a un solo error de lectura de 512 bytes al comienzo de la lectura: 12ERROR89 se convertiría en 128900000 en lugar de 120000089.
Si está seguro de que su disco no contiene ningún error, puede continuar usando un tamaño de bloque más grande, lo que aumentará la velocidad de su copia varias veces. Por ejemplo, cambiar bs de 512 a 64K cambiará la velocidad de copia de 35 MB/s a 120 MB/s en un sistema Celeron de 2.7 GHz. Pero tenga en cuenta que los errores de lectura en el disco de origen terminarán como «errores de bloque» en el disco de destino, es decir, un solo error de lectura de 512 bytes dañará todo el bloque de salida de 64 KiB.
Sugerencia
Si desea ver el progreso de
dd
, utilice la opción
status=progress
. Vea
dd(1)
para más detalles.
Nota
Para recuperar UUID únicos de un sistema de archivos
ext2/3/4
, utilice
tune2fs /dev/sd
XY
-U random
en cada partición. Para particiones de intercambio, utilice
mkswap /dev/sd
XY
en su lugar.
El kernel no registra los cambios de la tabla de particiones realizadas por
dd
. Para notificar los cambios sin reiniciar, utilice una utilidad como
partprobe
(parte de
GNU Parted
).
Crear copia de seguridad de la tabla de particiones
Consulte
fdisk (Español)#Copia de seguridad y restauración de la tabla de particiones
o
GPT fdisk#Backup and restore partition table
.
Crear imagen de disco
Arranque desde un medio live y asegúrese de que no se monten particiones desde el disco duro de origen.
Luego monte el disco duro externo y haga una copia de seguridad del disco (de origen):
# dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c  >
/ruta/a/backup.img.gz
Si es necesario (por ejemplo, cuando los archivos resultantes están almacenados en un sistema de archivos
FAT32
) divida la imagen del disco en varias partes (consulte también
split(1)
):
# dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c | split -a3 -b2G -
/ruta/a/backup.img.gz
Si no hay suficiente espacio en el disco local, puede enviar la imagen a través de
ssh
:
# dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c | ssh user@local dd of=backup.img.gz
Finalmente, guarde información adicional sobre la geometría de la unidad necesaria para interpretar la tabla de particiones almacenada dentro de la imagen. La más importante de las cuales es el tamaño del cilindro.
# fdisk -l /dev/sda >
/path/to/list_fdisk.info
Nota
Es posible que desee utilizar un tamaño de bloque (
bs=
)  que sea igual a la cantidad de caché en el disco duro que está respaldando. Por ejemplo,
bs=8192K
funciona para un caché de 8 MiB. El 64 KiB mencionado en este artículo es mejor que los
bs=512
bytes predeterminados, pero se ejecutará más rápido con un
bs=
más largo.
Sugerencia
gzip
solo puede comprimir datos usando un solo núcleo de CPU, lo que conduce a un rendimiento de datos considerablemente menor que las velocidades de escritura en el almacenamiento moderno. Para aprovechar la compresión multinúcleo y crear una imagen de disco más rápidamente, se podría, por ejemplo, instalar el paquete
pigz
, y simplemente reemplazar la orden
gzip -c
anterior, con
pigz -c
. Para discos grandes, esto potencialmente puede ahorrar horas.
Restaurar el sistema
Para restaurar su sistema:
# gunzip -c
/ruta/a/backup.img.gz
| dd of=/dev/sda
Cuando la imagen se haya dividido, use lo siguiente:
# cat
/ruta/a/backup.img.gz*
| gunzip -c | dd of=/dev/sda
Parchear archivos binarios
Si se quiere reemplazar el desplazamiento
0x123AB
de un archivo con la secuencia hexadecimal
FF C0 14
, esto se puede hacer con la línea de órdenes:
# printf '\xff\xc0\x14' | dd seek=$((0x123AB)) conv=notrunc bs=1 of=
/ruta/al/archivo
Copiar y restaurar el MBR
Antes de realizar cambios en un disco, es posible que desee hacer una copia de seguridad de la tabla de particioines y del esquema de particionado de la unidad. También puede usar una copia de seguridad para replicar el mismo esquema de particionado en varias unidades.
El MBR se almacena en los primeros 512 bytes del disco. Consta de 4 partes:
Los primeros 440 bytes contienen el código de arranque (cargador de arranque).
Los siguientes 6 bytes contienen la firma del disco.
Los siguientes 64 bytes contienen la tabla de particiones (4 entradas de 16 bytes cada una, una entrada para cada partición primaria).
Los últimos 2 bytes contienen una firma de arranque.
Para guardar el MBR como
mbr_file.img
:
# dd if=/dev/sd
X
of=
/path/to/mbr_file.img
bs=512 count=1
También puede extraer el MBR desde una imagen completa de disco con dd :
# dd if=
/ruta/al/disco.img
of=
/ruta/al/mbr_file.img
bs=512 count=1
Para restaurar (tenga cuidado, esto destruye la tabla de particiones existente y con ella el acceso a todos los datos en el disco):
# dd if=/
/ruta/al/mbr_file.img
of=/dev/sd
X
bs=512 count=1
Advertencia
Restaurar el MBR con una tabla de particiones que no coincida hará que sus datos sean ilegibles y casi imposibles de recuperar. Si simplemente necesita reinstalar el gestor de arranque, consulte sus respectivas páginas, ya que también emplean la
región de compatibilidad de DOS
:
GRUB (Español)
o
Syslinux (Español)
.
Si solo desea restaurar el cargador de arranque, pero no las entradas de la tabla de partición primaria, simplemente restaure los primeros 440 bytes del MBR:
# dd if=
/ruta/al/mbr_file.img
of=/dev/sd
X
bs=440 count=1
Para restaurar solo la tabla de particiones, se debe usar:
# dd if=
/ruta/al/mbr_file.img
of=/dev/sd
X
bs=1 skip=446 count=64
Eliminar el gestor de arranque
Para borrar el código de arranque MBR (puede ser útil si tiene que reinstalar completamente otro sistema operativo), solo es necesario poner a cero los primeros 440 bytes:
# dd if=/dev/zero of=/dev/sd
X
bs=440 count=1