El comando Linux dd es una de las utilidades más poderosas que se puede usar de varias maneras. Esta herramienta se utiliza principalmente para copiar y convertir datos, por lo que significa duplicador de datos. Esta herramienta se puede utilizar para:
- Copia de seguridad y restauración de un disco duro completo o una partición.
- Crear un sistema de archivos virtual e imágenes de copia de seguridad de CD o DVD llamados archivos ISO
- Copie regiones de archivos de dispositivo sin procesar como una copia de seguridad de MBR (registro de arranque maestro).
- Conversión de formatos de datos como ASCII a EBCDIC.
- Conversión de minúsculas a mayúsculas y viceversa.
Solo el superusuario puede ejecutar este comando. Debe tener mucho cuidado al usar este comando, ya que el uso inadecuado puede causar una gran pérdida de datos. Por lo tanto, algunas personas consideran que esta herramienta es un destructor de datos.
Sintaxis del comando dd
El uso básico del comando dd es bastante fácil porque solo necesita dos argumentos:if =para especificar el archivo de entrada y de =para especificar el archivo de salida. Los argumentos de esas opciones pueden ser archivos o dispositivos de bloqueo. Sin embargo, no recomendaría usar dd para copiar archivos porque cp lo hace de una manera mucho más simple. Sin embargo, puede usarlo para clonar un disco duro. La sintaxis es
dd if=<source file name> of=<target file name> [Options]
Aprenderemos varias opciones mientras revisamos los ejemplos del comando dd.
1. Copia de seguridad y restauración de un disco completo o una partición
Es posible guardar todos los datos de un disco/partición completo en otro disco/partición. No es una copia simple como comando cp, sino una copia de tamaño de bloque.
a. Copia de seguridad de todo el disco a disco
Puede copiar todos los datos (disco completo) desde el disco /dev/sda
a /dev/sdb
. dd no sabe nada sobre el sistema de archivos o las particiones; simplemente copiará todo desde /dev/sda
a /dev/sdb
. Debe indicar el tamaño del bloque que se copiará a la vez con bs
opción. Entonces, esto clonará el disco con los mismos datos en la misma partición.
# dd if=/dev/sda of=/dev/sdb bs=4096 conv=noerror,sync 97281+0 records in 97280+0 records out 99614720 bytes (100 MB) copied, 2.75838 s, 36.1 MB/s
Esto funciona solo si el segundo dispositivo es tan grande o más grande que el primero. De lo contrario, obtendrá particiones truncadas y sin valor en la segunda. Aquí, si significa archivo de entrada, of significa archivo de salida y bs representa el tamaño del bloque (número de bytes que se leerán/escribirán a la vez). Asegúrese de utilizar tamaños de bloque en múltiplos de 1024 bytes, lo que equivale a 1 KB. Si no especifica el tamaño del bloque, use un tamaño de bloque predeterminado de 512 bytes. Las conv
parámetro de valor noerror permite que la herramienta continúe copiando los datos aunque encuentre algún error. La opción de sincronización permite utilizar E/S sincronizadas.
b. Crear imagen de disco dd (imagen de archivo)
Puede crear una imagen de un disco o una imagen de archivo. Hacer una copia de seguridad de un disco en una imagen será más rápido que copiar los datos exactos. Además, la imagen del disco facilita mucho la restauración.
# dd if=/dev/sda of=/tmp/sdadisk.img
Puede almacenar el archivo de salida donde desee, pero debe dar un nombre de archivo que termine con .img
extensión como arriba. En lugar de /tmp/sdadisk.img
, podría almacenarlo, por ejemplo, en /sdadisk.img
si quieres.
c. Crear una imagen de disco comprimida
Debido a que dd crea el contenido exacto de un disco completo, significa que ocupa demasiado tamaño. Puede decidir comprimir la imagen del disco con el siguiente comando
# dd if=/dev/vda | gzip -c >/tmp/vdadisk.img.gz
La pipa | El operador hace que la salida del comando izquierdo se convierta en la entrada del comando derecho. El -c
La opción escribe la salida en la salida estándar y mantiene los archivos originales sin cambios.
d. Hacer una copia de seguridad de una partición o clonar una partición en otra
En lugar de un disco completo, solo puede hacer una copia de seguridad de una partición simple. Solo necesita indicar el nombre de la partición en el archivo de entrada como se muestra a continuación
# dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror,sync
Esto sincronizará la partición /dev/sda1
a /dev/sdb1
. Debe verificar que el tamaño de /dev/sdb1
debe ser mayor que /dev/sda1
. O puede crear una imagen de partición como se muestra a continuación
# dd if=/dev/sda1 of=/tmp/sda1.img
s. Restaurar un disco o una imagen de partición
Guardar un disco o una partición ayuda a restaurar todos los datos, si hay algún problema con nuestra unidad original. Para restaurar, debe invertir el archivo de entrada con el archivo de salida indicado durante la operación de copia de seguridad como se muestra a continuación.
# dd if=/tmp/sdadisk.img of=/dev/sda
Recuperará los datos que estaban presentes antes de la operación de copia de seguridad y no después de la operación
s. Restaurando imagen comprimida
Primero debe indicar el archivo comprimido y el archivo de salida que es el disco comprimido antes.
# gzip -dc /tmp/vdadisk.img.gz | dd of=/dev/vda
La opción -d aquí es para descomprimir. Tenga en cuenta el archivo de salida. Puede montar el disco restaurado para ver el contenido. Tenga en cuenta que se agregarán los datos después de la última operación de copia de seguridad de compresión.
2. Creación de un sistema de archivos virtual/imágenes de copia de seguridad de CD o DVD como archivos iso
Puede necesitar crear un sistema de archivos virtual en Linux por algunas razones, como crear una máquina virtual en su host Linux. También puede necesitar crear una imagen iso de copia de seguridad de un CD o DVD
a. Crear un sistema de archivos virtual
Un sistema de archivos virtual es un sistema de archivos que existe en un archivo, que a su vez existe en un disco físico. Puede necesitarlo para crear, por ejemplo, un dispositivo de intercambio o bucle adicional o una máquina virtual. Necesitamos /dev/zero
que es un archivo que se usa para crear un archivo sin datos pero con el tamaño requerido (un archivo con todos ceros). En otras palabras, esto creará un archivo de datos con ceros en el archivo que le dará el tamaño a un archivo.
# dd if=/dev/zero of=/file bs=1024K count=500 500+0 records in 500+0 records out 524288000 bytes (524 MB) copied, 1.21755 s, 431 MB/s
La opción count
se refiere al número de bloques de entrada que se van a copiar. Combinado con el valor del tamaño del bloque, indica el tamaño total a copiar. Por ejemplo bs=1024k
y count=500
da un tamaño=1024K*500 =524288000 bytes =524MB
Ahora vamos a comprobar el tamaño de nuestro archivo
# ls -lh /file -rw-r--r-- 1 root root 500M May 17 18:57 /file
Puede ver que tenemos nuestro sistema de archivos virtual creado con el tamaño indicado. Ahora puede usarlo para crear un dispositivo de bucle o un disco virtual o cualquier otra cosa.
b. Modificar los primeros 512 bytes de un archivo con datos nulos
Si durante la operación indica un archivo de salida existente, perderá sus datos. Por algunas razones, es posible que deba reemplazar un tamaño de bloque del archivo de salida.
dd if=/dev/zero of=file1 bs=512 count=1 conv=notrunc
El notrunc
La opción se refiere a no truncar el archivo, solo reemplazar los primeros 512 bytes, si existe. De lo contrario, obtendrá un archivo de 512 bytes
c. Creación de una imagen iso de copia de seguridad de CD o DVD
Quizás se pregunte por qué no simplemente copiar el contenido de su CD en un directorio. ¿Cómo manejarías el sector de arranque de un CD? No puede encontrar eso como un archivo en el dispositivo porque es solo el primer sector. Debido a que dd copia sector por sector, por otro lado, también copiará esa información.
# dd if=/dev/cdrom of=/mycd.iso
Necesitas saber que tienes que usar el -o loop
opción, que le permite montar un archivo como cualquier dispositivo normal. Entonces, para montar /mycd.iso
en el /mnt/cd
directorio, haga lo siguiente
# mount -o loop /mycd.iso /mnt/cd
d) Cree una unidad USB de arranque
Supongamos que hemos descargado la imagen iso de centos aquí en este directorio "~/Downloads/".
if=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso - el archivo de entrada está en la ruta '~/Downloads/CentOS-8-x86_64-1905-dvd1.iso'
of=/dev/sdb - el archivo de salida está en la ruta '/dev/sdb'
bs=1M - Leer desde '~/Descargas/CentOS-8-x86_64-1905-dvd1.iso' y escribir en '/dev/sdb' 1 Megabytes de datos a la vez.
# dd if=~/Descargas/CentOS-8-x86_64-1905-dvd1.iso of=/dev/sdb bs=1M
3. Copia de seguridad y restauración de MBR
El cargador de arranque GRUB se almacena más comúnmente en el MBR de la unidad de arranque. El MBR constituye los primeros 512 bytes del disco, lo que permite hasta 466 bytes de almacenamiento para el gestor de arranque. El espacio adicional se usará para almacenar la tabla de particiones para esa unidad. Si el MBR se corrompe, no podremos iniciar Linux.
a. Copia de seguridad de MBR
Debido a que el MBR constituye los primeros 512 bytes del disco, solo necesitamos copiar ese tamaño de bloque
# dd if=/dev/sda of=/tmp/sdambr.img bs=512 count=1
Con el count=1
y bs=512
, solo se copiarán 512 bytes que corresponden al tamaño de nuestro MBR.
Puede mostrar el MBR guardado con el comando od que volca archivos en octal y otros formatos como se muestra a continuación
# od -xa /tmp/sdambr.img 0000000 bf52 81f4 8b66 832d 087d 0f00 e284 8000 R ? t soh f vt - etx } bs nul si eot b nul nul 0000020 ff7c 7400 6646 1d8b 8b66 044d 3166 b0c0 | del nul t F f vt gs f vt M eot f 1 @ 0
-a
opción selecciona caracteres con nombre y -x
selecciona unidades hexadecimales de 2 bytes
b. Copia de seguridad de los datos de arranque de MBR excluyendo la tabla de particiones
Los datos de MBR de 512 bytes se encuentran en el primer sector del disco duro. Consta de arranque de 446 bytes, tabla de partición de 64 bytes y firma de 2 bytes. Significa que podemos excluir la tabla de particiones y la firma de bytes mientras hacemos una copia de seguridad del MBR conservando solo un tamaño de bloque igual al tamaño de arranque.
# dd if=/dev/sda of=/tmp/sdambr2.img bs=446 count=1
c. Restaurando MBR desde una imagen MBR
Puede restaurar su MBR como se muestra en los comandos anteriores con
# dd if=/tmp/sdambr.img of=/dev/sda
3. Conversión de formatos de datos
Si un archivo de entrada utiliza un conjunto de caracteres que no es el conjunto de caracteres nativo de la computadora host, el operador de importación debe realizar una conversión. Por ejemplo, si ASCII es el formato nativo para cadenas en su computadora host, pero el archivo de datos de entrada representa cadenas usando EBCDIC, debe convertir EBCDIC a ASCII y viceversa.
a. Convierta el formato de datos de un archivo de EBCDIC a ASCII
Si tiene un archivo ebcdic con usted, en su mayoría recuperado de sistemas de mainframe, le gustaría convertirlo a ASCII para realizar modificaciones usando editores de texto en servidores UNIX
# dd if=textfile.ebcdic of=textfile.ascii conv=ascii
Las conv
el parámetro de valor ahora es ascii porque convertimos de EBCDIC a ASCII
b. Convierta el formato de datos de un archivo de ASCII a EBCDIC
Después de modificar la versión ASCII y una vez hecho esto, puede volver a convertirla a EBCDIC para que la use su aplicación.
# dd if=textfile.ascii of=textfile.ebcdic conv=ebcdic
Las conv
el parámetro de valor ahora es e bcdic porque convertimos de ASCII a EBCDIC. Si solo está reemplazando un número particular de bytes con un número equivalente de bytes con diferentes caracteres, la conversión sería fluida y la aplicación que lee el archivo no debería tener ningún problema.
4. Conversión de mayúsculas y minúsculas de un archivo
El comando DD también se puede usar para algo sorprendente. Puede convertir todo el texto (alfabetos) en un archivo a mayúsculas o minúsculas y viceversa. Para el siguiente ejemplo, tendremos un archivo para las pruebas.
# cat file10 test dd convert
a. Convertir un archivo a mayúsculas
Debido a que nuestro ejemplo de archivo de texto está en minúsculas, lo convertiremos a mayúsculas
# dd if=~/file10 of=~/file20 conv=ucase
El comando creará el nuevo archivo indicado. Mira eso ahora conv
la opción toma ucase valor. Comprobemos el resultado
# cat file20 TEST DD CONVERT
b. Convertir un archivo a minúsculas
Ahora haremos la operación inversa que convertirá a minúsculas
# dd if=~/file20 of=~/file30 conv=lcase
Mira que usamos lcase de conv
opción para convertir de mayúsculas a minúsculas.
# cat file30 test dd convert
El comando dd no convierte los nombres de los archivos, solo su contenido.
Conclusión
El comando dd, aunque técnicamente no es un comando de archivado, es similar en algunos aspectos porque puede copiar una partición o disco completo en un archivo y viceversa.