Uso del comando dd

El comando dd (Dataset Definition), es una herramienta sencilla, útil, y sorprendentemente fácil de usar; con esta herramienta se puede hacer lo mismo, sobre dispositivos: discos y particiones, que con programas comerciales como Norton Ghost, en Windows o libres como CloneZilla, en Linux, con solo una pequeña línea de comandos.

Sintaxis Básica:

La sintaxis mas básica para el uso del comando dd, seria esta:

sudo dd if=origen of=destino

Donde if significa “input file=archivo de entrada“, es decir, lo que se quiere copiar y of significa “output file=archivo de salida“, o sea, el archivo destino (donde se van a copiar los datos);origen y destino pueden ser dispositivos (lectora de CD o DVD, disco duro, diskettera, pendrive, partición, etc.), archivo de copia de seguridad o imagen de disco, etc, pero no carpetas o subcarpetas.

Para el uso sin problemas de este comando,lo primero siempre es tener claro como se llaman las particiones/discos duros en Linux (/dev/sda1 por ejemplo; /dev deriva de device= dispositivo, en inglés ). para saber el disco/partición de origen y el de destino, algo que averiguamos fácilmente con el comando sudo fdisk -l o con algún programa gráfico de particiones como gparted. Toda la información sobre el comando dd, se puede consultar con el comando man dd e info dd ,

Se debe utilizar este comando con precaución, y comprobando siempre el orden y nombre de los discos/particiones, porque lo mismo que se clona un disco, lo borra en un visto y no visto.

Sintaxis con el comando pv: Usar el comando dd con la sintaxis anterior tiene un pequeño inconveniente, ya que es un comando muy reservado – no da información – , pues al ejecutarlo, el prompt de la terminal queda inmóvil, por lo que no sabemos que es lo que esta pasando y cuanto tiempo falta para que termine de ejecutarse. Este pequeño inconveniente se puede solucionar añadiendo el comando pv, ( *) – el cual actúa como una tubería de terminal que mide los datos que pasan a través de ella- a la sintaxis del comando dd , de forma que ahora la sintaxis seria:

dd if=origen |pv|dd of=destino

Como resultado obtendríamos en el terminal una especie de barra de progreso, la información sobre bytes transferidos, el tiempo que lleva ejecutándose y la tasa de transferencia, todo esto en tiempo real.

( alf ) - ( ~ )

└──┤ dd if=/devmmcblk0p1 |pv|dd of=/dev/mmcblk0p2

1,630GB 0:21:30 [1,12MB/s] [

Además al terminar nos muestra estadísticas de la tasa de transferencia, el total de bytes transferidos y el tiempo total que tardó en transferir todos los datos.

( alf ) - ( ~ )

└──┤ dd if=/devmmcblk0p1 |pv|dd of=/dev/mmcblk0p2

10530816+0 registros leídos <=>

10530816+0 registros escritos

5391777792 bytes (5.4 GB) copiados, 3873,48 s, 1,4 MB/s

5,02GB 1:04:33 [1,33MB/s] [ <=>

10530816+0 registros leídos <=>

10530816+0 registros escritos

5391777792 bytes (5.4 GB) copiados, 3873,48 s, 1,4 MB/s

( alf ) - ( ~ )

└──┤

(*) Comprobar antes de ejecutar cualquier linea de comandos con esta segunda sintaxis, que tenemos instalado en el sistema el paquete pv, o instalarlo si no lo tuviéramos: ambas cosas con Synaptic.

Vamos a ver algunos ejemplos prácticos y opciones de este comando ( en su versión con el truco explicado anteriormente con el comando pv ) :

A) Sobre discos duros y particiones:

= Clonar un disco duro:

Con esto clonaríamos el disco hda en hdb. (discos IDE):

sudo dd if=/dev/hda |pv|dd of=/dev/hdb bs=1M

Con esto clonaríamos el disco sda en sdb. (discos SATA):

sudo dd if=/dev/sda |pv|dd of=/dev/sdb bs=1M

Con la opción bs=1M , se consigue que tanto la lectura como la escritura se haga en bloques de 1 megabyte, (menos, seria mas lento pero mas seguro, y con mas nos arriesgamos a perder datos por el camino).

Hay que tener en cuenta que de esta forma se graba el disco “tal cual”, MBR, tabla de particiones, espacio vacío, etc…, por lo que solo podrás grabar en un disco del mismo o mayor tamaño.

= Grabar solo la primera partición (hda1) del disco de origen en el disco (hdb) de destino:

sudo dd if=/dev/hda1 |pv|dd of=/dev/hdb bs=1M

= Grabar el disco completo (hda) en la primera partición (hdb1) del disco de destino:

sudo dd if=/dev/hda |pv|dd of=/dev/hdb1 bs=1M

= Crear una imagen – puede ser bin o iso – del disco duro (hda) , en el directorio /home:

sudo dd if=/dev/hda |pv|dd of=/home/hda.bin

= Borrar totalmente la información de un disco: para ello, llena el disco con caracteres aleatorios, cinco veces. No va a quedar ni rastro de información en el disco:

for n in {1..5}; do dd if=/dev/urandom |pv|dd of=/dev/hda bs=8b conv=notrunc;

= Borrar cualquier partición y disco completo de cualquier dispositivo:

sudo dd if=/dev/zero |pv|dd of=/dev/sdx (Borrado de disco completo)

sudo dd if=/dev/zero |pv|dd of=/dev/sdxa (Borrado de partición de disco)

donde: x es el disco a borrar , a es la partición a borrar

Esta operación es muy útil para borrar completamente cualquier partición, además los datos que se borrarán no se pueden recuperar, por lo tanto es un borrado a bajo nivel y muy seguro, muy útil por ejemplo para cuando los pendrives se nos infectan de virus con nuestro querido windows.

B) Sobre un CD/DVD

= Crear/Montar una imagen .iso de un CD (o DVD)

Para crear la imagen .iso de un CD en el directorio /home:

sudo dd if=/dev/cdrom |pv|dd of=/home/imagendeCD.iso

Para montar la imagen .iso del CD:

sudo mount -o loop imagedeCD.iso /mnt/home

= Recuperar un DVD rayado (Esto no recupera todo el DVD, en este caso, solo los sectores legibles). Sirve también para discos duros defectuosos:

sudo dd if=/dev/cdrom |pv|dd of=/home/dvd_recuperado.iso conv=noerror,sync

La opción noerror, sirve para obviar los errores de lectura en cualquier situación.

C) Sobre MBR y VBS:

= Copiar/Restaurar el Master Boot Record (MBR):

Para copiar el MBR:

sudo dd if=/dev/hda |pv|dd of=mbr count=1 bs=512

Para restaurar el MBR:

sudo dd if=mbr |pv|dd of=/dev/hda

= Limpiar nuestro MBR y la tabla de particiones:

sudo dd if=/dev/zero |pv|dd of=/dev/hda bs=512 count=1

= Limpia el MBR pero no toca la tabla de particiones, ( muy útil para borrar el GRUB sin perder datos en las particiones):

sudo dd if=/dev/zero |pv|dd of=/dev/hda bs=446 count=1

= Copiar/Restaurar el Volume Boot Sector (VBS):

Para copiar el VBS:

sudo dd if=/dev/hda |pv|dd of=/home/sector_arranque_hda count=1 bs=512

Para restaurar el VBS:

sudo dd if=/home/sector_arranque_hda |pv|dd of=/dev/hda

D) Otros:

= Grabar una imagen del disco en nuestro directorio /home saltándonos los errores del disco(muy útil para discos que se están muriendo):

sudo dd conv=noerror if=/dev/hda |pv|dd of=~/home/imagen_disco_con_errores.iso

= Crear un archivo vacío de 1 Mb:

sudo dd if=/dev/zero |pv|dd of=archivo_nuevo_vacio bs=1024 count=1024

= Crear un archivo swap de 2Gb:

sudo dd if=/dev/zero |pv|dd of=/swapspace bs=4k count=2048M
mkswap /swapspace
swapon /swapspace

= Convertir todas las letras en mayúsculas:

sudo dd if=miarchivo |pv|dd of=miarchivo conv=ucase

Usar el comando dd con un programa con entorno gráfico: Gdiskdump, es un entorno gráfico para este comando dd que nos facilita la tarea de clonar particiones o discos, de una forma rápida y sencilla. Se puede descargar desde la página https://launchpad.net/gdiskdump/ Una vez lo abrimos , con permisos de root – sudo gdiskdump – , vemos que el programa es muy fácil de usar, ya que solo tenemos que decirle la partición o disco a clonar (Formato de Entrada ) y su destino (Formato de Salida).

 


Alf

Alf: Soy de Guadalajara Jalisco México, como pasatiempos tengo la lectura y los deportes de contacto, tae kwon do, shooto, kali eskrima, muay thai, judo, karate, hap ki do.


26 comentarios en “Uso del comando dd

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current ye@r *

  1. casi me hago diabetico con el mal uso del comando dd.
    por cierto, cual sería la diferencia con dd_rescue ¿?

    1/26
  2. Comanto que yo creo que todo usuario de arch en algun momento uso

    2/26
  3. @sieg84, la diferencia esta en que el dd se interrumpía con algún error de lectura o del dispositivo en este caso no pasara esto ya que el bloque dañado lo leerá un numero determinado de veces y continuara con el siguiente, también brinda la ventaja de que podemos ejecutarlo varias veces sobre la misma imagen y no empezara de cero sino que tratara de completar la misma.

    Cabe mencionar que dd_rescue nunca lo he utilizado.

    3/26
    • IceWeasel 10.0.12Debian GNU/Linux
      merlin el debianitamerlin el debianita

      Alf existira alguna GUI hecha en qt para KDE que use este comando? o me tengo que resignar.?

      6/26
      • Gdiskdump es mas que una GUI para este comando (esta basado en el) y aunque no se si lo hicieron en qt (creo que no) casi seguro te sirve en KDE

        18/26
    • gracias por la aclaración.
      solo he utilizado dd_rescue para copiar ISO a los USB (mas que nada por que en la wiki de openSUSE asi lo tenian).
      dd_rescue tu.iso /dev/sdX
      lo que me gusta es que muestra una barra de progreso:
      http://box.jisko.net/i/110db781.png

      7/26
  4. Alf:
    Hace poco ví publicado este mismo post en el Blog de Hatteras. Es probable que el no se tome a mal esto pero yo que sé, como mínimo por cortesía estaría bien referenciarlo. Así también el gana en posicionamiento web.

    No quiero generar dilema con esto pero a simple vista el artículo me parece un 95% idéntico salvo por las capturas de terminal que las has adaptado. Incluso el mencionó sus fuentes.

    4/26
  5. IceWeasel 10.0.12Debian GNU/Linux
    merlin el debianitamerlin el debianita

    Interesante admito que |pv| no lo conocía.

    Krel creo que la fuente esta en wiki de ubuntu o de arch saludos.

    5/26
  6. @krel, la cosa de linux es la siguiente:

    A lo largo de mi andanza en este mundo he leido y recopilado cosas, tengo un cuaderno con más de 400 post que puse en ubuntu México que fué la comunidad donde más contribui en mis inicios, desgraciadamente las cosas pueden repetirse, si revisas la gran cantidad de post en la red, están casi en el mismo orden, la cosa es que la mayoría son mas cortos.

    Puedo publicar otros 5 post en la semana y puedes encontrar otros parecidos o iguales, ¿el motivo? ubuntu tiene la mayor cantidad de foros/blogs en la red.

    De ninguna manera creo que vaya a haber dilema, y, si los administradores consideran el borrarlo, para nada me ofendería ni molestaría, me atengo a las normas y a lo que sigue, entre mis apuntes 8que no los tengo en orden) estoy buscando añadir algo para evitar la coincidencia.

    Saludos

    8/26
    • Para nadie es un misterio que como mucho solo el 10% del contenido que se genera en la red es nuevo. Con lo cual el otro 90 es contenido duplicado, renovado o rescatado, y no digo que eso sea menos importante, todo lo contrario, es una forma de diseminación del conocimiento.

      Sin embargo donde yo me detengo es en otra cosa. Cuando se tiene un blog de este tipo existe una motivación personal por ayudar y hasta quizás recibir un reconocimiento por ello. A su vez estoy seguro que la mayoría de los que escriben contenidos acerca del Software libre están de acuerdo con la idea de compartir. No obstante, no olvidemos que hasta las licencias más nobles como la de BSD piden el reconocimiento.

      Asimismo, las referencias es una forma por las que algunos buscadores como google mejoran el posicionamiento de una web. Solo digo, ya que el material fue utilizado como mínimo de agradecimiento yo referenciaría ese trabajo.

      Me parece genial que compartas pero, ¿Que pierdes por hacer una referencia? Solo piensa si desde otro blog con mejor posicionamiento que este se duplicaran los contenidos de desdelinux sin referenciarlo, al final sepultarían a este blog.

      Hatteras lo publicó hace 10 días y salvo que lo haya sacado de tu cuaderno o tu seas luis puente no me explico lo que me comentas, es que casi todo es textual. Poco probable pero no imposible.

      Pero nada, que este tipo de cosas pasan. Y no sé, yo por ética personal y por colaborar con otro colega lo referenciaría. Ya eso queda a vuestro criterio, tampoco creo que Hatteras se tome esto a mal, todo lo contrario.

      10/26
  7. Hmm… Hice un dd if=archivo.iso of=/media/discoduro… por error :P
    alguna forma de recuperar archivos desde el disco duro???

    11/26
    • Puedes usar Testdisk

      12/26
    • IceWeasel 10.0.12Debian GNU/Linux
      merlin el debianitamerlin el debianita

      me ha pasado amigo tal vez con testdisk o con una distro live especializada a rescatar datos. Mi recomendación hacer un backup para próxima ya que usar ese comando es algo delicado en mis tiempos de novato formatie todo el disco duro sin quere y ahora de reiniciar pues…… sobra decir que ni el grub arranco.

      13/26
  8. Alguien me puede decir que comando usar para ver el progreso de copiado con el comando dd, a lo que me refiero es ver una barra de progreso con el % que lleva copiando.

    Slds

    16/26
    • Compa! agregando el comando pv. En este mismo post lo dice casi al principio y te explica como uasarlo. Leelo otra vez

      17/26
  9. mediante este comando:
    dd if=/dev/sdc | bzip2 > /media/Elements/iso.gz
    he logrado hacer una imagen iso de un disco de 16 Gb y guardarlo en un disco de 400Gb.
    Pero no se cual seria el comando para restaurar esa imagen en el disco original de 16GB o en otro de la misma capacidad

    19/26
  10. Firefox 22.0Windows 7Aero
    Luis Rodriguez

    una pregunta

    use este comando para
    for n in {1..5}; do dd if=/dev/urandom |pv|dd of=/dev/hda bs=8b conv=notrunc;
    para un disco de 2TB
    luego me quedo en la consola algo asi
    >
    debo ejecutar otro comando o cuanto se puede demorar el proceso?

    gracias y sigan adelante

    20/26
    • Hay un error de tipeo en el for… falta al final de la linea “; done” quedado “for n in {1..5}; do dd if=/dev/urandom |pv|dd of=/dev/hda bs=8b conv=notrunc; done”

      23/26
  11. muy buen articulo…..voy a ponerlo en practica…saludos cuate

    21/26
  12. Muy útil, me sirvió mucho gracias

    22/26
  13. Buenas Alf. Gracias por la info.

    Una pregunta. Hay alguna manera de copiar solo una parte del disco origen?. El caso es, si tengo un disco de 120Gb en el cual sólo se está utilizando 25Gb y quiero hacer una copia a un disco de 40Gb, sólo me interesaría copiar el espacio utilizado (25Gb), ¿Existe alguna manera con este comando?
    Gracias de antemano.

    24/26
    • Te convendría más usar rsync, con el comando rsync -av /path/to/origin /path/to/destiny ya estarías respaldando todos tus permisos con sus correspondientes permisos.

      25/26
    • Quise decir: “todos tus archivos con sus correspondientes permisos”

      26/26

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current ye@r *