Articles

DD (Unix)

Posted by admin

el comando dd se puede utilizar para una variedad de propósitos. Para Comandos de copia simple tiende a ser más lento que las alternativas específicas del dominio, pero sobresale por su capacidad única de «sobrescribir o truncar un archivo en cualquier punto o buscar en un archivo», una interfaz de nivel bastante bajo para la API de archivos de Unix.

transferencia de Datoseditar

dd puede duplicar datos en archivos, dispositivos, particiones y volúmenes. Los datos pueden ser de entrada o salida hacia y desde cualquiera de estos; pero hay diferencias importantes con respecto a la salida cuando se va a una partición., Además, durante la transferencia, los datos se pueden modificar utilizando las opciones conv para adaptarse al medio. (Para este propósito, sin embargo, dd es más lento que cat.)

la opción noerror significa seguir adelante si hay un error, mientras que la opción sync hace que los bloques de salida se rellenen.

in-place modificationEdit

dd puede modificar los datos en su lugar., Por ejemplo, esto sobrescribe los primeros 512 bytes de un archivo con bytes nulos:

dd if=/dev/zero of=path/to/file Bs=512 count=1 conv=notrunc

la opción de conversión de notrunc significa no truncar el archivo de salida, es decir, si el archivo de salida ya existe, simplemente reemplace los bytes especificados y deje el resto de la salida archivo solo. Sin esta opción, dd crearía un archivo de salida de 512 bytes de largo.,

copia de seguridad del registro de arranque maestro y restoreEdit

el ejemplo anterior también se puede usar para realizar copias de seguridad y restaurar cualquier región de un dispositivo a un archivo, como un registro de arranque maestro.

para duplicar los dos primeros sectores de un disquete:

 dd if = / dev / fd0 of = mbrboot.img Bs = 512 count = 2

Disk wipeEdit

Artículo principal: borrado de datos

por razones de seguridad, a veces es necesario tener un borrado de disco de un dispositivo descartado. Esto se puede lograr mediante una «transferencia de datos» desde los Archivos Especiales De Unix.,

  • Para escribir ceros en un disco, use dd if=/dev/zero of=/dev/sda bs=16M.
  • Para escribir datos aleatorios en un disco, utilice dd if=/dev/urandom of=/dev/sda bs=16M.

cuando se compara con el ejemplo de modificación de datos anterior, no se requiere la opción de conversión notrunc, ya que no tiene efecto cuando el archivo de salida del dd es un dispositivo de bloque.

la opción bs = 16m hace que dd lea y escriba 16 mebibytes a la vez. Para los sistemas modernos, un tamaño de bloque aún mayor puede ser más rápido., Tenga en cuenta que llenar la unidad con datos aleatorios puede tomar más tiempo que poner a cero la unidad, porque los datos aleatorios deben ser creados por la CPU, mientras que crear ceros es muy rápido. En las unidades de disco duro modernas, poner a cero la unidad hará que la mayoría de los datos que contiene sean permanentemente irrecuperables. Sin embargo, con otros tipos de unidades, como las memorias flash, muchos datos todavía pueden ser recuperables por remanencia de datos.

Las unidades de disco duro modernas contienen un comando de borrado seguro diseñado para borrar de forma permanente y segura cada parte accesible e inaccesible de una unidad., También puede funcionar para algunas unidades de estado sólido (unidades flash). A partir de 2017, no funciona en unidades flash USB ni en memorias flash digitales seguras. Cuando está disponible, esto es más rápido que usar dd y más seguro. En máquinas Linux es accesible a través de la opción security security-erase-enhanced del comando hdparm.

el programa shred ofrece múltiples sobrescrituras, así como una eliminación más segura de archivos individuales.

recuperación de Datoseditar

La recuperación de datos implica leer desde una unidad con algunas partes potencialmente inaccesibles., dd es un buen ajuste con este trabajo con su salto flexible (seek) y otros ajustes de bajo nivel. El vanilla DD, sin embargo, es torpe de usar ya que el usuario tiene que leer los mensajes de error y calcular manualmente las regiones que se pueden leer. El tamaño de bloque único también limita la granuaridad de la recuperación, ya que se debe hacer un compromiso: use uno pequeño para más datos recuperados o use uno grande para la velocidad.

un programa en C llamado dd_rescue fue escrito en octubre de 1999. Eliminó la funcionalidad de conversión de dd, y admite dos tamaños de bloque para lidiar con el dilema., Si una lectura usando un tamaño grande falla, vuelve al tamaño más pequeño para recopilar la mayor cantidad de datos posible. También puede correr hacia atrás. En 2003, se escribió un script dd_rhelp para automatizar el proceso de uso de dd_rescue, haciendo un seguimiento de las áreas que se han leído por su cuenta.

en 2004, GNU escribió una utilidad separada, no relacionada con dd, llamada ddrescue. Tiene un algoritmo DINÁMICO de tamaño de bloque más sofisticado y realiza un seguimiento de lo que se ha leído internamente. Los autores de dd_rescue y dd_rhelp lo consideran superior a su implementación., Para ayudar a distinguir el nuevo programa GNU del script anterior, a veces se usan nombres alternativos para el ddrescue de GNU, incluyendo addrescue (el nombre en freecode.com y freshmeat.net), gddrescue (nombre del paquete Debian), y gnu_ddrescue (nombre del paquete openSUSE).

otro programa de código abierto llamado savehd7 utiliza un algoritmo sofisticado, pero también requiere la instalación de su propio intérprete de lenguaje de programación.,rendimiento de lectura y escritura del sistema para bloques de 1024 bytes:

generando un archivo con datos aleatorioseditar

para hacer un archivo de 100 bytes aleatorios usando el controlador Aleatorio del núcleo:

dd if=/dev/urandom of=myrandom bs=100 count=1

file to upper caseedit

para convertir un archivo a mayúsculas:

dd if=filename of=filename1 Conv=ucase,notrunc

progress indicatoredit

al ser un programa diseñado principalmente como un filtro, DD normalmente no proporciona ninguna indicación de progreso., Esto se puede superar enviando una señal USR1 al proceso GNU DD en ejecución, lo que resulta en que DD imprima el número actual de bloques transferidos.

la siguiente línea da como resultado una salida continua de progreso cada 10 segundos hasta que la transferencia haya finalizado, cuando DD-PID es reemplazado por el process-id de dd:

mientras que kill-USR1 DD-pid ; do sleep 10 ; done

las versiones más recientes de GNU DD admiten la opción status=progress, que permite la impresión periódica de estadísticas de transferencia a stderr.

Leave A Comment