Cómo funciona el comando DD en Linux con ejemplos
- 2686
- 108
- Hugo Vera
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
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 dominiops - 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
- « Cómo crear USB multibotual con Linux
- No pudo obtener bloqueo var lib libk dpkg bloqueo - ubuntu/Debian »