dd ( definición de datos ) es un programa UNIX para copiar y convertir archivos. El nombre se hereda del operador DD ( Definición de datos ) del lenguaje JCL [ 1 ] [2] .
Dado que en UNIX muchos objetos (discos duros/disquetes, puertos COM/LPT, RAM de la computadora, memoria con el código/datos de cada proceso) se representan como archivos especiales, la gama de aplicaciones de la utilidad ddes mucho más amplia de lo que parece a primera vista. Regularmente, existe la necesidad no solo de copiar un archivo o varios archivos (que es para lo que está diseñada la utilidad cp ), sino también de copiar los primeros n bytes del archivo, saltar m bytes desde el principio, leer el archivo de un defectuoso medio, traduzca el contenido del archivo a ASCII , "invierta" el orden de los bytes en el archivo ( Little-Endian vs. Big-Endian ) [3] , simplemente copie un archivo muy grande o todo junto. Para este propósito, y sirve dd.
Entre otras cosas, esta utilidad le permite copiar regiones de archivos de dispositivo sin formato, por ejemplo, hacer una copia de seguridad del sector de arranque del disco duro o leer bloques de datos fijos de archivos especiales, como /dev/zero o /dev/random [4] .
El nombre de la utilidad dda veces se descifra en broma como "destructor de disco", "destructor de datos", "eliminar datos" o "terminar el disco", ya que la utilidad le permite realizar operaciones de bajo nivel en discos duros, al más mínimo error. (como invertir parámetros ify of) puede perder parte de los datos en el disco (o incluso todos los datos) [3] . También hay un apodo más "respetuoso": "duplicador de disco", porque en la práctica su aplicación principal son las copias, imágenes y copias de seguridad de particiones.
Este artículo fue escrito usando man dd , que describe la versión GNU de dd . Las versiones de dd en otros sistemas operativos pueden diferir.
dd [--help] [--version] [status] [if=файл] [of=файл] [ibs=байты] [obs=байты] [bs=байты] [cbs=байты] [skip=блоки] [seek=блоки] [count=блоки] [conv={ascii, ebcdic, ibm, block, unblock, lcase, ucase, swab, noerror, notrunc, sync}]
Cree una imagen de CD/DVD utilizando un tamaño de bloque grande. Ignorar errores:
dd if = /dev/cdrom of = backup.iso bs = 65536 conv = sin errorEscriba la imagen ISO "image.iso" en el dispositivo sdb, junto con su sector de arranque y formato de partición, en el sistema de archivos de imagen (generalmente ISO 9660 o UDF ):
dd if = imagen.iso de = /dev/sdbCopie el archivo foo a la barra de archivos:
dd si = foo de = barCopie el archivo foo a la barra de archivos, omitiendo los primeros 10 KB del archivo foo:
dd if = foo of = bar bs = 1k skip = 10Corte un archivo foo de 10 MB en 2 archivos de 5 MB:
dd if = foo of = bar.0 bs = 1M cuenta = 5 dd if = foo of = bar.1 bs = 1M skip = 5Combinar cuatro archivos de 100 MB en uno:
dd si = SONRISA.001 de = SONRISA bs = 1M busca = 0 dd si = SONRISA.002 de = SONRISA bs = 1M busca = 100 dd si = SONRISA.003 de = SONRISA bs = 1M busca = 200 dd si = SONRISA. 004 de = SONRISA bs = 1M buscar = 300y es posible así:
dd if = SONRISA.001 > SONRISA dd if = SONRISA.002 >> SONRISA dd if = SONRISA.003 >> SONRISA dd if = SONRISA.004 >> SONRISAo (para recopilar un archivo de una gran cantidad de piezas):
para i en { 1 ..4 } ; hacer dd si = SONRISA.00 $i >> SONRISA hechoLos ejemplos anteriores muestran las posibilidades de dd; en la práctica, se suele utilizar cat :
gato SONRISA.00 { 1 ,2,3,4 } >> SONRISAImprime en pantalla (en /dev/stdout) los primeros 256 bytes del archivo foo:
dd if = foo of = /dev/stdout bs = 128 cuenta = 2o:
dd si = foo bs = 128 cuenta = 2El comando anterior solo es bueno para ver un archivo de texto. Se recomienda que el contenido del archivo binario se vea así:
dd if = foo bs = 1 cuenta = 10 2 >/dev/null | volcado hexadecimalEn la mayoría de los casos, debe tener cuidado de que el archivo de destino no termine en el mismo disco del que se tomó la imagen (y, de hecho, es recomendable desmontarlo por completo, ya que cualquier cambio accidental en su sistema de archivos puede violar la integridad de la imagen).
Copie una partición del disco duro a otro disco duro, ignorando los errores de E/S:
dd if = /dev/sda1 of = /dev/sdb2 bs = 4096 conv = sin error, sincronizaciónHaga una copia del registro de arranque maestro (MBR) del primer disco duro:
dd si = /dev/hda de = bootloader.mbr bs = 512 cuenta = 1Rellene todo el espacio libre en la partición actual con ceros:
dd if = /dev/ zeroof = zerofillCree una imagen comprimida del primer disco duro con todas las particiones (se recomienda llenar primero el espacio libre con ceros para una mejor compresión):
dd si = /dev/sda | xz -9 > MyFuBu.ISO.XZCree una imagen segmentada de 2 Gb del primer disco duro con todas las particiones (con y sin compresión):
dd si = /dev/sda | xz-9 | split -b 2G --sufijo adicional = .xz - MyFuBu.iso. dd si = /dev/sda | split -b 2G --sufijo adicional = .iso - MyFuBu.
Vea el contenido del registro de arranque maestro (MBR) del primer disco duro:
Copie todo excepto la etiqueta del disco a la cinta :
( dd bs = 4k saltar = 1 cuenta = 0 && dd bs = 512k ) < $disco > $cintaCopie todo, sin sobrescribir la etiqueta, de la cinta al disco:
( dd bs = 4k buscar = 1 cuenta = 0 && dd bs = 512k ) < $cinta > $discoDestruya el contenido del dispositivo /dev/sdgllenándolo con "ceros" de /dev/zero:
dd si = /dev/cero de = /dev/sdg bs = 65536Consultar el estado de una operación:
killall -USR1 ddEn algunos casos, el estado de ejecución se visualiza con el comando:
pkill -USR1 -x ddEn versiones recientes, el estado de progreso se puede imprimir en la consola emitiendo el comando dd con status=progress
dd if = image.iso of = /dev/sdb status = progresoLos programas de recuperación de código abierto incluyen dd_rescue [5] [6] [7] [8] y dd_rhelp [9] [10] que funcionan juntos, savehd7 y GNU ddrescue .
Antonio Diaz Diaz (desarrollador de GNU ddrescue) compara [11] opciones de dd para tareas de recuperación:
La utilidad dd estándar realiza una lectura lineal del disco, y esto puede llevar mucho tiempo o incluso quemar la unidad sin recuperar nada si los errores se encuentran al principio del disco duro.
dd_rescue hace lo mismo que dd, solo que más eficientemente.
dd_rhelp es un script de shell complejo que ejecuta dd_rescue muchas veces tratando de copiar estratégicamente la unidad, pero es muy ineficiente.
Comandos Unix | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|
formatos de archivo | |
---|---|
Solo archivado | |
Solo compresión | |
Archivado y compresión | |
Empaquetado y distribución de software |