Guía completa y detallada (con ejemplos) de DD

Les dejo un artículo simplemente genial que me he encontrado navegando por la red, nos muestra con múltiples ejemplos y de forma detallada qué es y qué se puede lograr con el comando DD.

Les dejo la traducción íntegra del artículo:

1. ¿Por qué dd?:

Escogimos dd como el primer contendiente en nuestra serie porque es una herramienta útil que tiene muchas opciones, como usted verá. Esto casi lo hace una de las navajas Suizas del mundo de Linux. Si, este término (navaja Suiza) es usado más de lo que se debería por los escritores de artículos orientados a Linux, así que no podíamos dejar pasar la oportunidad de usarlo nosotros mismos.

2. Uso general:

Antes de empezar queríamos darle una idea general de cómo es usado dd. Primero que todo, el nombre viene de data duplicator (duplicador de datos), pero humorísticamente también se le dice que significa disk destroyer (destructor de discos) o data destroyer (destructor de datos) por ser una herramienta muy poderosa. Así que recomendamos cuidado adicional cuando se use dd porque un momento de descuido le puede costar sus valiosos datos. La sintaxis general del comando dd es:

# dd if=$input_data of=$output_data [options]

input_data y output_data pueden ser discos, particiones, archivos, dispositivos… principalmente todo lo que usted pueda escribir a o leer de. Como usted verá, puede usar dd en un contexto de red para enviar flujos de datos a través de su LAN, por ejemplo. Usted puede tener solamente la parte de entrada (input) en su comando dd, o solamente el comando de salida (output), y puede incluso eliminar ambos en algunos casos. Todos estos serán tratados en la relación siguiente.

3. Ejemplos:

dd if=/dev/urandom of=/dev/sda bs=4k -» Llena el disco con datos aleartorios

dd if=/dev/sda of=/dev/sdb bs=4096 -» Duplicación disco-a-disco

dd if=/dev/zero of=/dev/sda bs=4k -» Limpia un disco duro (puede necesitar ser repetido)

dd if=inputfile of=/dev/st0 bs=32k conv=sync -» Copia de archivo a dispositivo de cinta

dd if=/dev/st0 of=outfile bs=32k conv=sync -» El anterior, invertido

dd if=/dev/sda | hexdump -C | grep [^00] -» Verifica si el disco está realmente puesto a cero

dd if=/dev/urandom of=/home/$user/hugefile bs=4096 -» Llena una partición (¡Cuidado con las particiones de sistema!)

dd if=/dev/urandom of=myfile bs=6703104 count=1 -» Codifica un archivo (tal vez antes de borrarlo)

dd if=/dev/sda3 of=/dev/sdb3 bs=4096 conv=notrunc,noerror -» Copia una partición hacia otra partición

dd if=/proc/filesystems | hexdump -C | less -» Visualiza los sistemas de ficheros disponibles

dd if=/proc/partitions | hexdump -C | less -» Visualiza las particiones disponibles en kb

dd if=/dev/sdb2 ibs=4096 | gzip > partition.image.gz conv=noerror -» Crea una imagen gzip de la segunda partición del segundo disco

dd bs=10240 cbs=80 conv=ascii,unblock if=/dev/st0 of=ascii.out -» Copia el contenido de una cinta a un archivo, convirtiendo de EBCDIC a ASCII

dd if=/dev/st0 ibs=1024 obs=2048 of=/dev/st1 -» Copia de un dispositivo de bloques de 1KB a un dispositivo de bloques de 2KB

dd if=/dev/zero of=/dev/null bs=100M count=100
100+0 records in
100+0 records out
10485760000 bytes (10 GB) copied,

5.62955 s, 1.9 GB/s

Copia 10 GB de ceros a la papelera de reciclaje.

dd if=/dev/zero of=/dev/sda bs=512 count=2
fdisk -s /dev/sda
dd if=/dev/zero of=/dev/sda seek=(number_of_sectors – 20) bs=1k

Borra GPT del disco. Como GPT escribe los datos al principio
Y al final del disco, después de borrar desde el principio, tenemos que encontrar el número de sectores (el segundo comando), y entonces borrar los 20 últimos sectores.

dd if=/home/$user/bootimage.img of=/dev/sdc -» Crea un disco UDB booteable (mostrado aquí como /dev/sdc)

dd if=/dev/sda of=/dev/null bs=1m -» Una buena manera de buscar bloques malos. Relacionados con respaldos y sistemas

dd if=/dev/sda of=/dev/fd0 bs=512 count=1 -» Copia el MBR a un disco flexible

dd if=/dev/sda1 of=/dev/sdb1 bs=4096 -» Duplicación disco-a-disco

dd if=/dev/sr0 of=/home/$user/mycdimage.iso\ bs=2048 conv=nosync -» Crea una imagen de un CD

mount -o loop /home/$user/mycdimage.iso /mnt/cdimages/ -» Monta localmente la imagen mencionada

dd if=/dev/sda of=/dev/sdb bs=64k conv=sync -» Útil cuando se reemplaza un disco por otro de idéntico tamaño.

dd if=/dev/sda2 of=/home/$user/hddimage1.img bs=1M count=4430
dd if=/dev/sda2 of=/home/$user/hddimage2.img bs=1M count=8860
[…]

Crea imágenes en DVD de una partición (útil para hacer respaldos)

dd if=/$location/hddimage1.img of=/dev/sda2 bs=1M
dd if=/$location/hddimage2.img of=/dev/sda2 seek=4430 bs=1M
dd if=/$location/hddimage3.img of=/dev/sda2 seek=8860 bs=1M
[etc…]

Restaura del respaldo anterior

dd if=/dev/zero count=1 bs=1024 seek=1 of=/dev/sda6 -» Destruye el superbloque

dd if=/dev/zero count=1 bs=4096 seek=0 of=/dev/sda5 -» Otra forma de destruir el superbloque

dd if=/home/$user/suspicious.doc | clamscan -» Verifica el archivo en busca de virus (necesita ClamAV)

dd if=/home/$user/binary file | hexdump -C | less -» Ver el contenido de un archivo binario (necesita hexdump)

dd if=/home/$user/bigfile of=/dev/null
dd if=/dev/zero of=/home/$user/bigfile bs=1024 count=1000000

Realiza un benchmark de la velocidad de lectura/escritura del disco duro

dd if=/dev/sda of=/dev/sda -» Da nueva vida a viejos discos duros que no han sido usados por un tiempo (los discos deben estar «unmounted»)

dd if=/dev/mem | strings | grep ‘string_to_search’ -» Examina el contenido de la memoria (legible para humanos, es decir)

dd if=/dev/fd0 of=/home/$user/floppy.image bs=2x80x18b conv=notrunc -» Copia un disco flexible

dd if=/proc/kcore | hexdump -C | less -» Muestra la memoria virtual

dd if=/proc/filesystems | hexdump -C | less -» Visualiza los sistemas de ficheros disponibles

dd if=/proc/kallsyms | hexdump -C | less -» Muestra los módulos cargados

dd if=/proc/interrupts | hexdump -C | less -» Muestra la tabla de interrupciones

dd if=/proc/uptime | hexdump -C | less -» Muestra el tiempo de actividad en segundos

dd if=/proc/partitions | hexdump -C | less -» Visualiza las particiones disponibles en kb

dd if=/proc/meminfo | hexdump -C | less -» Muestra el estado de la memoria

dd if=/dev/urandom of=/home/$user/myrandom bs=100 count=1 -» Crea un archivo de 1kb de jerigonza aleatoria

dd if=/dev/mem of=/home/$user/mem.bin bs=1024 -» Crea una imagen del estado actual de la memoria del sistema

dd if=/home/$user/myfile -» Imprime el archivo a stdout

dd if=/dev/sda2 bs=16065 | hexdump -C | grep ‘text_to_search’ -» Busca una cadena en una partición entera; incluso si está asegurada, usted puede bootear un liveCD

dd if=/home/$user/file.bin skip=64k bs=1 of=/home/$user/convfile.bin -» Copia file.bin a convfile.bin saltándose los primeros 64 kb

dd if=/home/$user/bootimage.img of=/dev/sdc -» Crea un disco UDB booteable (mostrado aquí como /dev/sdc)

dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8 -» Lee la BIOS.

dd bs=1k if=imagefile.nrg of=imagefile.iso skip=300k -» Convierte una imagen de Nero en una imagen ISO estándar.
Esto es posible porque la única diferencia entre las dos son los 300 kB de encabezamiento que Nero adiciona a una imagen ISO estándar.

echo -n «hello vertical world» | dd cbs=1 conv=unblock 2> /dev/null -» Inténtalo, es seguro. 🙂

dd if=/dev/sda1 | gzip -c | split -b 2000m – \ /mnt/hdc1/backup.img.gz -» Crea una imagen gzip de una partición utilizando división

cat /mnt/hdc1/backup.img.gz.* | gzip -dc | dd of=/dev/sda1 -» Restaura el respaldo anterior

dd if=/dev/zero of=myimage bs=1024 count=10240 -» Crea una imagen vacía del disco

dd ibs=10 skip=1 -» Divide los primeros 10 bytes de stdin

dd bs=265b conv=noerror if=/dev/st0 of=/tmp/bad.tape.image -» Hace una imagen de una cinta con sitios malos

dd if=/dev/sda count=1 | hexdump -C -» Visualiza su MBR

dd if=/dev/sda | nc -l 10001 nc $system_to_backup_IP 10001 | dd of=sysbackupsda.img -» Respaldo rápido de la red usando netcat

dd if=/dev/zero of=/dev/sdX bs=1024000 count=1 -» Limpia los primeros 10MB de la partición

dd if=/dev/zero of=tmpswap bs=1k
count=1000000
chmod 600 tmpswap
mkswap tmpswap
swapon tmpswap

Crea un espacio temporal de intercambio

dd if=/dev/sda of=/dev/null bs=1024k count=1024
1073741824 bytes (1.1 GB) copied,
24.1684 s, 44.4 MB/s

Determina la velocidad secuencial de I/O de su disco.

dd if=/dev/random count=1 2>/dev/null | od -t u1 |\ awk ‘{ print $2}’ | head -1 -» Genera un número aleatorio

dd if=/dev/mem of=myRAM bs=1024 -» Copia la memoria RAM hacia un archivo

dd if=/dev/sda bs=512 count=1 | od -xa -» Ver el contenido de su MBR en formato hex y ASCII

dd if=/my/old/mbr of=/dev/sda bs=446 count=1 -» Restaura el MBR sin alterar el registro de la tabla de partición el cual está entre 447 – 511 bytes

dd if=/dev/sda1 | split -b 700m – sda1-image -» Crea una copia de la partición y salva imágenes donde el tamaño máximo del volumen es 700MB

ls -l | dd conv=ucase -» Convierte la salida de un comando en mayúsculas

echo «MY UPPER CASE TEXT» | dd conv=lcase -» Convierte cualquier texto a minúsculas

dd if=/etc/passwd cbs=132 conv=ebcdic of=/tmp/passwd.ebcdic -» Convierte el archivo de contraseñas del sistema a un archivo de longitud fija de formato EBCDIC

dd if=text.ascii of=text.ebcdic conv=ebcdic -» Convierte de ASCII a EBCDIC

dd if=myfile of=myfile conv=ucase -» Convierte un archivo a mayúsculas (simple SED o reemplazo tr)

4. Conclusión:

Esta es sólo una pequeña parte de lo que dd puede hacer y esperamos que este artículo se las haya amañado para abarcar los ejemplos más utilizados para el usuario común y corriente. No obstante, antes de que vaya más lejos, le recomendamos que lea la documentación de su disco duro, buscando cosas como limitaciones de LBA y tome cuidados adicionales al usar dd en una terminal raíz. Por supuesto, usted ya tiene copias de seguridad, pero un poco de cuidado adicional le ahorrará horas de trabajo innecesario.

Y ahí termina el artículo.

Que conste, no he probado ninguno de los comandos que se muestran en este artículo, por lo que si alguien hace un uso indebido (o no correcto) de estos comandos, lo más posible es que si daña algo en su ordenador yo no sea capaz de ayudarle.

Nada que, poco a poco iré probando los comandos jeje, si encuentro algo interesante lo comparto.

Saludos


17 comentarios, deja el tuyo

Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Luweeds dijo

    Estupendo articulo, así se analiza a fondo un comando y por tanto aprendemos muchísimo que es de lo que se trata. Enhorabuena y gracias como siempre¡¡ 😉

  2.   Oscar dijo

    Muy buena e interesante entrada, como la encuentro importante procederé a archivarla.
    Me imagino que tu y tu socio se encontraran con las pilas bien cargadas después de dos días de vacaciones, jajajajaja.
    Extrañé la falta de articulos en el blog.

    1.    KZKG^Gaara <" Linux dijo

      Gracias, el mérito no es mío… yo solo pongo la traducción 🙂
      Y jaja sí, mañana vendrán más artículos jaja, pedimos disculpas por estos días sin publicar nada, inclusive mirando las estadísticas vemos la decaída que hemos tenido jeje.

    2.    elav <° Linux dijo

      Vacaciones dices? Jajajaja… Ojalá eso hubiese sido..

  3.   oleksis dijo

    Buen articulo, como siempre les recuerdo si pueden habilitar un complemento para exportar los mismos a PDF o adjuntar el articulo como PDF

    Saludos!

    1.    Courage dijo

      Yo de paso les recuerdo que deberían abrir un foro porque se tiende a offtopiquear mucho en los posts (me incluyo)

      1.    KZKG^Gaara <" Linux dijo

        Los errores o problemas que hemos estado presentando, problemas de conexión con la base de datos y demás, se deben a que el sitio genera demasiada actividad o tráfico, y por eso durante instantes estamos offline. Si además del sitio, añadimos un foro, generará más tráfico y hará peor todo.

        La idea del foro sí, nos gusta, de veras queremos hacerlo, pero en estos momentos no podemos desafortunadamente 🙁

        1.    Courage dijo

          WordPress tiene un plugin para ello, no te tienes que valer de sitios que no puedes ver

      2.    oleksis dijo

        De acuerdo… una alternativa sin adicionar otra plataforma o sitio es bbPres (bbpress.org) sobre WordPress

        Saludos!

        1.    KZKG^Gaara <" Linux dijo

          Sí, lo conocemos jeje, en realidad estábamos pensando en FluxBB 🙂
          El problema no es otra DB o usa la misma con más tablas, sino solamente más actividad.

      3.    elav <° Linux dijo

        Dentro de muy poco habilitaremos un foro 😀

    2.    KZKG^Gaara <" Linux dijo

      Ese plugin aún tenemos que probarlo lo suficiente, para luego ponerlo si funciona bien 🙂
      No hemos tenido tiempo jaja

  4.   corea dijo

    Querido colega te feliz cito esta muy bueno lastima que este tan pegado la es aplicación me gustaría que retomaras mas afondo dado que me gustaría saber
    si se puede hacer una imanen booteable en in DVD o *.iso , comprimida, de antemano mil gracias espero tu respuesta ami coreo posdata creo que eres el único en toda la red de abala hispana que lo tiene mas extendido la explicada Estupendo articulo,

  5.   69thebest69 dijo

    como podria clonar de una maquina a otra por red? en mi caso son 2 laptos conetados en una lan ambas con dirección estatica

  6.   Erick dijo

    Gracias por la info 🙂

  7.   gildade4 dijo

    After my altered contract
    http://premium.cars.purplesphere.in/?post.zoey
    moms and daughters free porn free 3gp gay porn video clips buzzer porn penguin vids porn route 96 porn

  8.   aiasi bor dijo

    El comando para dar vida a discos viejos es de importancia CAPITAL. Menos mal que esta es una pequeña lista de lo que puede hacerse!