1/12/23

Comando dd: clonar discos duros, particiones, DVD, CD, o borrado de particiones o de discos

DD es una aplicación para pasar datos desde un dispositivo a otro, o archivo ,o lo que queramos, hasta poder formatear una partición poniendo sectores a cero.
Para los windowseros existe una aplicación llamada norton ghost, que hará una operación parecida a lo que hace este programa, aunque dd es más avanzado.



En este manual vamos a ver las diferentes utilidades que se le pueden dar al comando.
La sintaxis básica del comando es la siguiente:

dd if=origen of=destino

Donde if significa "input file", es decir, lo que queréis copiar y of significa "output file", 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, etc.), archivo de copia de seguridad o imagen de disco, etc.

Antes de seguir, indicar que hay que saber lo que se esta haciendo, ya que podemos perder datos, además antes de empezar a utilizar el comando hay que saber exactamente como se llama las particiones en linux(/dev/sda1 por ejemplo).
Hay mucha formas de verlo, ente ellas las siguientes:

Con el comando fdisk:
$ sudo fdisk -l

Con algún programa gráfico de particiones con gparted(Gnome: Sistema-Administración-Edición de particiones Gparted) o qtparted.


Si no lo tenemos instalado gparted:
$ sudo apt-get install gparted

-Haciendo imágenes ISO de un CD o DVD o de una partición:
La forma mas fácil y efectiva de crear nuestras "imágenes" de CD o DVD es la siguiente:

$ sudo dd if=/dev/cdrom of=copiadvd.iso

Si el CD o DVD está rayado y queremos hacer la copia, introduciremos los sigueinte parámetros:


$ sudo dd if=/dev/cdrom of=copiadvd.iso conv=noerror,sync

De una partición de un disco a un archivo de imagen:
$ sudo dd if=/dev/sdxy of=copiadvd.iso

Si lo anterior ademas los queremos comprimir, introduceros los siguiente:

$ sudo dd if=/dev/sdxy | gzip > copiadvd.iso.gz
La "x" es la identificadora del disco duro (a, b, c, ....) y "y" sería el número de partición del disco (1,2, ....)
El origen y el destino tendrán los mismos datos, lo que es decir tendremos dos copias.

-Copiar y restaurar Master Boot Record (MBR) (Sector arranque disco duro)
  
Para copiar el Master Boot Record (MBR) de un disco haremos lo siguiente:
$ sudo dd if=/dev/sdx of=mbr count=1 bs=512

Para restaurar un Master Boot Record (MBR) a partir del de otro disco lo siguiente:
$ sudo dd if=mbr of=/dev/sdx

Donde:
x:disco duro

-Clonar discos duros o particiones de disco:
El comando dd también sirve para copiar particiones o discos completos unos sobre otros. Básicamente podemos decir que mediante dd podemos "clonar" particiones o nuestro disco rígido completo. Para hacer esto hace lo siguiente:

$ sudo dd if=/dev/sdxa of=/dev/sdyb bs=1M (copia una partición en otra)
$ sudo dd if=/dev/sdx of=/dev/sdy  bs=1M (copia de un disco duro en otro)
Dónde: 
x: disco duro origen
y: disco duro destino
a: partición origen
b: partición destino

bs: Forzamos que la copia se haga en bloques de 1 megabyte y que se escriba de igual manera. Esta forma de trabajar nos permite no sobrecargar el sistema en el proceso y seguir trabajando mientras se realiza la copia.
El origen y el destino tendrán los mismos datos, lo que es decir tendremos dos copias.
-Borrar cualquier partición y disco completo de cualquier dispositivo:

$ sudo dd if=/dev/zero of=/dev/sdx (Borrado de disco completo)
$ sudo dd if=/dev/zero of=/dev/sdxa (Borrado de partición de disco)
Dónde:
x: disco a borrar
a: 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.

Copiando Diskettes:
Primero insertamos el diskette origen y escribimos lo siguiente en una consola:
$ sudo dd if=/dev/fd0 of=~/diskette.img

después insertamos el diskette destino (en blanco) y escribimos lo siguiente:
$ sudo dd if=~/diskette.img of=/dev/fd0

nos queda eliminar la "imagen" que creamos y listo...
$ sudo rm -f ~/diskette.img

NOTA: El ~ significa "tu directorio home", es similar a escribir $HOME

-Manejo de errores durante la copia:
Es posible que durante la copia o duplicación de un diskette se encuentren errores en la superficie del mismo. Para evitar que este error nos impida copiar los datos "buenos" del disco podemos hacer lo siguiente:

$ sudo dd conv=noerror if=/dev/fd0 of=~/imagen_disco_con_errores.img

NOTA: la opción noerror hace que se continúe con la copia aunque se produzcan errores de lectura y se puede utilizar con cualquier otro tipo de operación.

RECOMENDACIONES:
-Los datos en destino serán completamente destruidos y no se pueden recuperar.
-La partición destino siempre será igual o mayor a la de origen.
-Haz una copia de seguridad de tus datos previamete por si los pelos.
-Dd también guarda el espacio libre, por la tanto la copia es exactamente igual lo que hay en el origen que en el destino.
-Si haces una copia de seguridad en una imagen de disco, es recomendable después comprimirla para que ocupe menos espacio.

Fuentes: help dd y man dd

4 comentarios:

  1. Hola que pasa si hago dd, entre dos discos el de destino tiene más capacidad que el de la fuente.

    entonces como hago que el disco destino tenga la capacidad fisica que tenia y no la capacidad del disco origen???.. hay alguna forma para actualizar ese detalle?

    ResponderEliminar
  2. Hola!!
    Ten pongo un ejemplo para que lo entiendas mejor.
    Tenemos dos discos duros, uno de 5 gigas origen, y otro de 10 gigas destino.
    Si copiamos el origen al destino, en este ultimo quedara la particion de 5 gigas, mas un espacio libre de 5 gigas.
    Que puedes hacer con estos 5 gigas libres?
    Crear otra particion,o redimensionar la que acabas de crear para que tenga 10 gigas, y de esta ultima forma tendrias una particion de 10 gigas con todos los datos de el de 5 pero con el espacio libre correspondiente.
    Para redimensionar una vez realizado el clon de disco, utiliza un gestor de particiones o discos como por ejemplo gparted.
    Espero que te haya ayudado,saludos!!!!

    ResponderEliminar
    Respuestas
    1. Vale por la info! Tenía la misma interrogante que el de arriba.

      Gracias!

      Eliminar
  3. ya. tengo mi iso.. creada.. pero virtual box no la levanta.. que falta.. ya di el comando
    dd if=/dev/cciss/c0d0 of=/mnt/disco.iso

    te comento que df -h o un fdisk -l me muestra
    c0d0, c0d0p1 y c0d0p2,
    yo quiero todo el disco duro.. o mejor aun el arreglo completo en un .iso

    ResponderEliminar