Cómo funciona el comando DD en Linux con ejemplos

Cómo funciona el comando DD en Linux con ejemplos

DD es una utilidad muy potente y útil disponible en sistemas operativos de UNIX y UNIX. Como se indica en su manual, su propósito es convertir y copiar archivos. En sistemas operativos de UNIX y unix como Linux, casi todo se trata como un archivo, incluso dispositivos de bloque: esto hace que DD sea útil, entre las otras cosas, a los discos clonos o limpie los datos. El dd La utilidad está disponible fuera de la caja incluso en la instalación más mínima de todas las distribuciones. En este tutorial, veremos cómo usarlo y cómo podemos modificar su comportamiento utilizando algunas de las opciones más utilizadas para facilitar el trabajo de administración del sistema Linux.

En este tutorial aprenderás:

  • Cómo usar DD
  • Cómo modificar el comportamiento del programa utilizando algunas de las opciones más utilizadas


Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Independiente de la distribución
Software No se necesita un software especial para seguir este tutorial excepto DD
Otro Familiaridad con la interfaz de línea de comandos y redirecciones
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Uso básico

La sintaxis básica de dd es muy simple. Por defecto, el programa se lee desde entrada estándar y escribe a salida estándar. Sin embargo, podemos especificar alternativa aporte y producción archivos utilizando respectivamente el si y de Opciones de línea de comando. Aquí DD difiere de la gran mayoría de los comandos de shell, ya que no utiliza el estándar --opción o -O Sintaxis para opciones.



Veamos un ejemplo de uso de DD. Uno de los casos de uso más típicos para la utilidad es la copia de seguridad del registro de arranque maestro: el primer sector en un legado MBR sistema dividido. La longitud de este sector suele ser 512 bytes: contiene la etapa 1 del gerente de arranque y la tabla de partición del disco. Supongamos que queremos hacer una copia de seguridad del MBR del disco /dev /sda, todo lo que tenemos que hacer es invocar DD con la siguiente sintaxis:

$ sudo dd if =/dev/sda bs = 512 Count = 1 de = MBR.img

Analicemos el comando anterior. En primer lugar, prefijamos la invocación DD real con el comando sudo, para ejecutar el comando con privilegios administrativos. Esto es necesario para acceder al /dev/sda dispositivo de bloque. Luego invocamos DD especificando la fuente de entrada con el si opción y el archivo de salida con de. También usamos el bs y contar Opciones para especificar respectivamente la cantidad de datos que deben leerse a la vez o tamaño de bloque, y la cantidad total de bloques para leer. En este caso podríamos haber omitido el bs opción, ya que 512 Bytes es el tamaño predeterminado utilizado por DD. Si ejecutamos el comando anterior, veremos que produce la siguiente salida:

1+0 registros en 1+0 registros de 512 bytes copiados, 0.000657177 S, 779 kb/s

La salida anterior nos muestra la cantidad de registros leídos y escritos, la cantidad de datos copiados, la cantidad de tiempo en que se completó la tarea y la velocidad de transferencia. Ahora deberíamos tener un clon del MBR sector, almacenado en el MBR.img archivo. Obviamente, el sufijo de archivo no tiene un significado real en Linux, por lo que el uso del ".img "uno es completamente arbitrario: es posible que desee usar".DD "para que el nombre de archivo refleje el comando que se usó para crear el archivo.

En el ejemplo anterior usamos el bs opción para definir tanto la cantidad de bytes que deben leerse y escribir a la vez. Para definir valores por separado para las dos operaciones, podemos usar el SII y obsceno Opciones en su lugar, que establecen, respectivamente, la cantidad de bytes leídos y escritos a la vez.

Saltar bloques al leer y escribir

Hay casos en que queremos omitir una cierta cantidad de tamaños de bloque al leer o escribir en un archivo. En tales casos tenemos que usar el saltar y buscar Opciones, respectivamente: se utilizan para omitir los bloques de datos especificados, al inicio de la entrada y al inicio de la salida.

Un ejemplo de tal situación es cuando queremos hacer una copia de seguridad/restaurar los datos ocultos entre el MBR y la primera partición en el disco, que generalmente comienza en el sector 2048, por razones de alineación. El 2047 Los sectores de esta área generalmente contienen, en un legado MBR configuración de partición, la etapa 1.5 del cargador de arranque de grub. ¿Cómo podemos instruir a DD para clonar solo esta área, sin incluir el MBR? Todo lo que necesitamos hacer es usar el saltar opción:

$ sudo dd if =/dev/sda of = Hidden-data-after-mBr count = 2047 skip = 1

En este caso instruimos DD para copiar 2047 bloques de 512 bytes del disco /dev /sda a partir del segundo. En la situación opuesta, cuando queremos restaurar los datos clonados y volver a escribirlos en la misma zona de disco, queremos usar la opción Seek, que omite el número especificado de bloques al comienzo de la salida:

$ sudo dd if = hidden-data-after-mBr de =/dev/sda seek = 1

En este caso, ordenamos a DD que copiaran datos del Data oculta-después de MBR y para escribirlo en el /dev/sda Dispositivo de bloque que comienza desde el segundo bloque.



Comprimiendo los datos leídos por DD

Como ya dijimos antes, una de las operaciones más comunes realizadas con DD es la clonación de disco. El comando DD produce un clon perfecto de un disco, ya que copia byte de dispositivos de bloque por byte, por lo que clonar un disco de 160 GB, produce una copia de seguridad del mismo tamaño exacto. Al clonar un disco a un archivo, sin embargo, podemos abordar los datos leídos por DD a través de utilidades de compresión como gzip, para optimizar el resultado y reducir el tamaño final del archivo. Digamos que, por ejemplo, queremos crear un clon del dispositivo de bloque total /dev /SDA, podríamos escribir:

$ sudo dd if =/dev/sda bs = 1m | GZIP -C -9> SDA.dd.GZ

En el ejemplo anterior, instruimos a DD que lea desde el dispositivo /dev /SDA, y también cambiamos el tamaño del bloque a 1m, lo que puede darnos un mejor rendimiento en dicha situación. Luego tuvimos los datos, procesándolo con el gzip programa que invocamos con el -C (corto para --to-stdout) y -9 Opción que instruye al programa a utilizar la compresión máxima disponible. Finalmente, redirigimos la salida al "SDA.dd.archivo gz ". Por cierto, si quieres aprender más sobre redirecciones Puedes leer nuestro artículo sobre el tema.

Limpiar un dispositivo de bloque

Otro caso de uso de DD es la limpieza de un dispositivo. Hay muchas situaciones en las que es posible que necesitemos realizar dicha operación: es posible que deseemos vender un disco y asegúrese de que su contenido anterior esté completamente borrado por razones de privacidad obvias, o es posible que deseemos borrar datos antes de configurar el cifrado. En el primer caso, sería suficiente sobrescribir el disco con ceros:

$ sudo dd if =/dev/cero bs = 1m of =/dev/sda

El comando anterior indica que DD lea desde el dispositivo /dev /cero que proporciona caracteres nulos y los escribe a los dispositivos hasta que esté completamente lleno.

Antes de configurar una capa de cifrado en nuestro sistema, es posible que deseemos llenar el disco con datos aleatorios, para representar los sectores que contendrán datos que sean indistinguibles de los vacíos y evitar fugas de metadatos. En este caso queremos leer datos del /dev/Random o /dev/urandom dispositivos:

$ sudo dd if =/dev/urandom bs = 1m of =/dev/sda

Ambos comandos requerirán una cantidad significativa de tiempo para finalizar, dependiendo del tamaño y el tipo del dispositivo de bloque en cuestión y la fuente de datos aleatorios utilizados, /dev/Random ser más lento (bloquea hasta que no recopila suficiente ruido ambiental), pero devuelve datos aleatorios de mayor calidad que /dev/urandom.



Convertir datos

El convencer Las opciones de DD se utilizan para aplicar conversiones de datos. Las opciones deben ser proporcionadas con una lista de símbolos separada por coma como argumentos. Aquí algunos de los más utilizados:

  • NoError: esto hace que se use DD Continuar incluso después de que se encuentra un error de lectura;
  • NotRunc: esta opción instruye a DD que no trunce el archivo de salida;
  • Sincronización: esta opción tiene sentido, especialmente cuando se usa junto con NOError. Instruye a DD a rellenar cada bloqueo de entrada con NULS.

Un caso típico en el que es posible que deseemos ejecutar DD junto con el Conv = Sync, NoError La opción es al clonar un disco que contiene sectores dañados. En tal caso el No hay error La opción hará que DD continúe ejecutándose incluso si un sector no se puede leer con éxito y el sincronización La opción se realizará para que la cantidad de datos no se le lee, es reemplazado por Nul, de modo que la longitud de los datos se conserva incluso si se pierden los datos reales (ya que no es posible leerlos).

Conclusiones

En este tutorial aprendimos a usar el comando DD muy poderoso. Vimos algunos de los casos típicos en los que se utiliza el programa, como la clonación de disco, y aprendemos a conocer su sintaxis y las opciones más importantes que podemos usar para modificar su comportamiento. Dado que DD es una utilidad muy poderosa, debe usarse con extrema atención: simplemente cambiando el objetivo de entrada y salida, uno puede, en algunas situaciones, destruir completamente los datos en un disco.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Mastering Bash Script Loops
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Cómo clonar un sistema Linux
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Descarga de Linux
  • Partición clon en Linux
  • Bucles anidados en guiones Bash
  • Cómo arrancar dual Kali Linux y Windows 10