Clonación con el comando dd


El comando dd (Dataset Definition), es una herramienta en principio creada para sistemas Unix pero hoy en día evolucionada hasta el punto de poder hacer lo mismo que buenos programas comerciales como Norton Ghost o libres como CloneZilla, con sólo una pequeña orden en la línea de comandos.

Lo primero siempre es tener claro el disco duro de origen y el de destino, algo que averiguamos fácilmente con el comando (como root)
fdisk -l

Sintaxis

La sintaxis más básica, sería (suponiendo que estamos como root):
dd if=<origen> of=<destino>

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

Parámetros

Algunos de los parámetros básicos usados por este comando serían:
if=origen: Lee desde el archivo indicado como origen. Por defecto lee de la entrada estándar
of=destino: Escribe al archivo indicado como destino. Por defecto escribe en la salida estándar
ibs=N: Lee N bytes del archivo origen
bs=N: Lee y escribe N bytes. Alternativa a usar ibs y obs con un mismo valor
conv=modo[, modo,...]: Realiza las operaciones de conversión, según se indique. Se puede indicar más de una conversión, separándolas por comas
Algunas conversiones útiles son:
noerror: sirve para obviar los errores de lectura en cualquier situación
sync: rellena cada bloque leído con ceros, hasta el tamaño determinado por ibs
notrunc: no se trunca el archivo utilizado como destino.

Ejemplo

Un ejemplo básico para copiar un disco a otro sería:
dd if=/dev/sda1 of=/media/sdb1/imagen/backup.img conv=sync, notrunc, noerror bs=512

Para comprobar que la imagen es exacta, utilizaríamos el comando md5sum
Ejemplo:
md5sum /dev/sda (nos daría un código)
md5sum /media/sdb1/imagen/backup.img (nos da otro código, que tiene que ser exacto al anterior para que la copia sea exacta bit a bit)

Trucos

Recuperar un DVD rayado:
dd if=/dev/cdrom of=/home/dvd_recuperado.iso conv=noerror,sync
Esto no recupera todo el DVD, en este caso, sólo los sectores legibles. Sirve también para discos duros defectuosos.
La opción noerror sirve para obviar los errores de lectura en cualquier situación. Otro ejemplo sería:
dd conv=noerror if=/dev/hda of=~/home/imagen_disco_con_errores.iso
Grabaríamos con ello una imagen del disco duro en nuestro home saltándonos los errores del disco (muy útil para discos que se están muriendo).

Limpia nuestro MBR y la tabla de particiones:
dd if=/dev/zero 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):
dd if=/dev/zero of=/dev/hda bs=446 count=1

Crea un archivo vacío de 1 Mb, una opción muy interesante como ahora veremos:
dd if=/dev/zero of=archivo_nuevo_vacio bs=1024 count=1024

Crear un archivo swap de 2Gb así de fácil:
sudo dd if=/dev/zero of=/swapspace bs=4k count=2048M
mkswap /swapspace
swapon /swapspace

Webgrafía

Elías Hidalgo (2014). dd: clona y graba discos duros fácilmente [en linea]. URL http://linuxzone.es/dd-clona-y-graba-discos-duros-facilmente/