Cómo funciona el comando dd en Linux con ejemplos

DD es una utilidad muy poderosa y útil disponible en Unix y sistemas operativos similares a Unix. Como se indica en su manual, su propósito es convertir y copiar archivos. En Unix y sistemas operativos similares a Unix como Linux, casi todo se trata como un archivo, incluso bloquear dispositivos: Esto hace que dd sea útil, entre otras cosas, para clonar discos o borrar datos. La utilidad dd 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 de su sistema Linux.,/td>

No se necesita ningún software especial para seguir este tutorial, excepto DD Other familiaridad con la interfaz de línea de comandos y las redirecciones Conventions # – requiere que los comandos de linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo command command – requiere que los comandos ejecutado como un usuario normal no privilegiado

uso básico

la sintaxis básica de dd es muy simple., Por defecto, el programa lee de standard input y escribe a standard output. Sin embargo, podemos especificar archivos alternativos input y output utilizando respectivamente las opciones de línea de comandos if y of. Aquí dd difiere de la gran mayoría de los comandos de shell, ya que no utiliza la sintaxis estándar --option o -o para las opciones.,

SUBSCRIBE NEWSLETTER & RSS
Suscríbase a RSS y NEWSLETTER y reciba las últimas noticias de Linux, trabajos, consejos de carrera y tutoriales.

Vamos a ver un ejemplo de dd de uso. Uno de los casos de uso más típicos de la utilidad es la copia de seguridad del registro de arranque maestro: el primer sector en un sistema con particiones MBR., La longitud de este sector es generalmente 512 bytes: contiene la etapa 1 del grub bootloader y la tabla de particiones de disco. Supongamos que queremos hacer una copia de seguridad delMBR 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 of=mbr.img

analicemos el comando anterior. En primer lugar, prefijamos la invocación real de dd con el comando sudo, con el fin de ejecutar el comando con privilegios administrativos. Esto es necesario para acceder al dispositivo de bloque /dev/sda., Luego invocamos dd especificando la fuente de entrada con la opción if y el archivo de salida con of. También utilizamos las opciones bs y count para especificar respectivamente la cantidad de datos que se deben leer a la vez, o el tamaño del bloque, y la cantidad total de bloques a leer. En este caso podríamos haber omitido la opción bs, 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 records in1+0 records out512 bytes copied, 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 sector MBR, almacenado en el archivo mbr.img. Obviamente el sufijo de archivo no tiene ningún significado real en Linux, por lo que el uso de la «.img «uno es completamente arbitrario: es posible que desee utilizar».,dd » para que el nombre del archivo refleje el comando que se usó para crear el archivo.

en el ejemplo anterior usamos la opción bs para definir tanto la cantidad de bytes que se deben leer y escribir a la vez. Para definir valores por separado para las dos operaciones, podemos usar las opciones ibs y obs, que establecen, respectivamente, la cantidad de bytes leídos y escritos a la vez.,

omitir bloques al leer y escribir

hay casos en los que podemos querer omitir una cierta cantidad de tamaños de bloque al leer o escribir en un archivo. En tales casos tenemos que utilizar las opciones skip y seek, 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. Los sectores 2047 de esta área generalmente contienen, en una configuración de partición heredada MBR, la etapa 1.5 del gestor de arranque grub. ¿Cómo podemos indicar a dd que clone solo esta área, sin incluir el MBR?, Todo lo que necesitamos hacer es usar la opción skip:

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

en este caso le dimos instrucciones a dd para que copie 2047 bloques de 512 bytes de /dev/sda disco a partir del segundo., En la situación opuesta, cuando queremos restaurar los datos clonados y escribirlos de nuevo en la misma zona de disco, queremos usar la opción seek, que omite el número especificado de bloques al principio de la salida:

$ sudo dd if=hidden-data-after-mbr of=/dev/sda seek=1

en este caso le dimos instrucciones a dd para copiar los datos desde el hidden-data-after-mbr y escribirlos en el /dev/sda dispositivo de bloque a partir del 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 discos., El comando dd produce un clon perfecto de un disco, ya que copia dispositivos de bloque byte por byte, por lo que la clonación de 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 canalizar 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 por ejemplo que queremos crear un clon de todo el dispositivo de bloque / dev / sda, podríamos escribir:

$ sudo dd if=/dev/sda bs=1M | gzip -c -9 > sda.dd.gz

en el ejemplo anterior le dimos instrucciones a dd para que leyera desde el dispositivo/dev / sda, y también cambiamos el tamaño del bloque a 1M, lo que nos puede dar un mejor rendimiento en tal situación. Nos transfiere los datos, el procesamiento posterior con el gzip programa que se invoca con el -c (abreviatura de --to-stdout) y -9 opción que indica el programa para utilizar el máximo de compresión., Finalmente, redirigimos la salida al «sda.dd.archivo gz». Por cierto, si desea obtener más información sobre redirections puede 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 podemos necesitar realizar dicha operación: podemos querer vender un disco y asegurarnos de que su contenido anterior se borre completamente por razones obvias de privacidad, o podemos querer borrar datos antes de configurar el cifrado., En el primer caso, sería suficiente sobrescribir el disco con ceros:

$ sudo dd if=/dev/zero bs=1M of=/dev/sda

El comando anterior instruye a dd a leer desde el dispositivo /dev/zero que proporciona caracteres nulos y escribirlos en 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 renderizar los sectores its que contendrán datos indistinguibles de los vacíos y evitar fugas de metadatos., En este caso queremos leer datos del /dev/random o /dev/urandom devices

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

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

la Conversión de datos

El conv opciones de dd se utiliza para aplicar las conversiones de datos. Las opciones se deben proporcionar con una lista separada por comas de símbolos como argumentos. Aquí algunos de los más utilizados:

  • noerror – Esto hace uso de DD continue incluso después de que se encuentre un error de lectura;
  • notrunc – esta opción le indica a dd que no trunque el archivo de salida;
  • sync – esta opción tiene sentido especialmente cuando se usa junto con noerror. Le indica a dd que rellene cada bloque de entrada con NULs.,

un caso típico en el que podemos querer ejecutar DD junto con la opción conv=sync,noerror, es cuando se clona un disco que contiene sectores dañados. En tal caso, la opción noerror hará que dd continúe ejecutándose incluso si un sector no se puede leer con éxito, y la opción sync hará que la cantidad de datos no se lea sea reemplazada por NULs, de modo que la longitud de los datos se conserve incluso si se pierden los datos reales (ya que no es posible leerlo).,

conclusiones

en este tutorial aprendimos a usar el muy poderoso comando dd. Vimos algunos de los casos típicos en los que se usa el programa, como la clonación de discos, 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: solo cambiando el objetivo de entrada y salida, uno puede, en algunas situaciones, destruir completamente los datos en un disco.

Author: admin

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *