Uso del comando dd

38
32399

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).

 

COMPARTIR
Artículo anteriorInstead, una forma de juego diferente
Artículo siguienteLiveWallpapers en tu KDE
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.

38 COMENTARIOS

  1. @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.

  2. 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.

  3. @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

    • 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.

    • 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.

  4. 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

  5. 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

  6. 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

    • 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”

  7. 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.

  8. Estimados, alguno sabe porque al ocupar comando dd, llega solo a 4.2GB e indica que el archivo es muy grande? Es una imagen de una disco de 250GB y va a un disco externo de 1TB.

    sudo dd if=/dev/sda |pv|dd of=/home/fox/backup.iso

  9. hola tengo una maquina de inyeccion en la cual se perdio el programa ya que reemplazaron la pila de la bios, no tenemos respaldo pero tenemos otra maquina igual, solo cuenta con floppy y puerto serial y paralelo, como puedo hacer hacer un respaldo de esta maquina para cargarlo en la otro, espero me pueda ayudar gracias

  10. solo quiero copiar una particion sin empezar desde LIVE CD. Por ejemplo.tengo un disco con /dev/sda1, /dev/sda5, /dev/sda6 y quiero hacer una copia en /dev/sda5 desde otro disco /dev/sdb1

    el comando es dd if=/dev/sdb1 of=/dev/sda5 bs=1M ????

  11. Hola como estas. Yo tambien vivo en Guadalajara.
    Tu articulo sobre el comando DD es muy interesante. Yo quiero probar algunas distribuciones Linux, especificamente Archlinux, pero no he logrado usar el comando DD y copiar la ISO de Archilinux que ya descargue, en una memoria USB. No se si me puedas pasar algun tick para poder arrancar con esto. Gracias, Pedro lobato

  12. Porque cuando se graba una iso con el comnado “dd” solo sirve para bootear en algunas PC?
    Ejp. tengo 2 laptos y en ninguna de ella bootea la iso de ninguna distribucion linux; pero al contrario SI bootea en una vieja PC de mesa con disco idle

  13. Aveces funciona en todas las pc pero hay que agregar al proceso el mbr y el syslinux a la usb; pero esto es algo largo y tedioso.
    La parte facil el unetbooting

    Ojo: no es la iso ni el dd para mi es la forma de como la grabas.

  14. tengo una duda si utilizo este comando:
    sudo dd if=/dev/zero of=/dev/unidaddedisco
    en vez de este el formateo a low level, es el mismo o es mas tardado que este:
    sudo dd if=/dev/zero of=/dev/unidaddedisco bs=1M..

Dejar una respuesta