
dd: clona discos y mucho más
dd es un comando de la familia de los sistemas operativos Unix que permite copiar y convertir datos de archivos a bajo nivel.
Es generalmente usado para realizar operaciones avanzadas sobre dispositivos o archivos, como pueden ser:
- Transferencias de datos específicos.
- Copias de seguridad de la información «en crudo» (raw data).
- Conversión de algunas codificaciones soportadas y/o caracteres predefinidos.
Pero al contrario que otras herramientas que desde su creación se han ido sofisticando, ésta se ha ido simplificando, 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.
Advertencia dd
Utilizar este comando con precaución, y asegúrate siempre del orden y nombre de tus discos duros, porque lo mismo que te clona un disco te lo borra.
[bctt tweet=»#dd hace lo mismo que los buenos programas comerciales como #Norton #Ghost o libres como #CloneZilla»]
¿Qué discos volcamos con dd?
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.
Lo básico de dd
La sintaxis más básica, sería ésta [como root]:
dd if=[origen] of=[destino]
Por lo que si quisiéramos clonar un disco duro:
dd if=/dev/hda of=/dev/hdb bs=1M
con esto clonaríamos el disco hda en hdb. (discos IDE), o:
dd if=/dev/sda of=/dev/sdb bs=1M
para discos SATA
Con bs=1M, estamos diciendo que tanto la lectura como la escritura se haga en bloques de 1 megabyte (menos, sería más lento pero más seguro, y con más nos arriesgamos a perder datos por el camino).
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.
Volcado de discos a punto de morir con dd
Recuperar un Disco Duro defectuoso o 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).
Otras utilidades de dd
Para paranóicos del borrado de la información
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 of=/dev/hda bs=8b conv=notrunc; done
Crea una imagen de un CD
dd if=/dev/cdrom of=/home/imagendeCD.iso
Para montar la imagen del CD
mount -o loop imagedeCD.iso /mnt/home
Copiar el Master Boot Record
dd if=/dev/hda of=mbr count=1 bs=512
Para restaurar el MBR
dd if=mbr of=/dev/hda
Copiar el Volume Boot Sector (VBS)
dd if=/dev/hda of=/home/sector_arranque_hda count=1 bs=512
Para restaurar el VBS
dd if=/home/sector_arranque_hda of=/dev/hda

Clonando discos con Rsync
Dos herraminentas de clonado de un disco en linux míticas son dd y rsync.
Si el clonado lo queremos idéntico, bit a bit, escogeremos la opción de la herramienta dd.
En caso de querer hacer el clonado a nivel de ficheros escogemos la segunda opción: rsync.
Es útil cuando los discos tienen distintos sistemas de ficheros, son de distinto tamaño o si el disco original tiene errores. También si lo tenemos que hacer en varias tandas con posibilidad de actualizaciones sin tener que hacer un volcado completo de cada vez.
rsync
Según la wikipedia el rsync se define como:
rsync es una aplicación libre para sistemas de tipo Unix y Microsoft Windows que ofrece transmisión eficiente de datos incrementales, que opera también con datos comprimidos y cifrados. Mediante una técnica de delta encoding, permite sincronizar archivos y directorios entre dos máquinas de una red o entre dos ubicaciones en una misma máquina, minimizando el volumen de datos transferidos. Una característica importante de rsync no encontrada en la mayoría de programas o protocolos es que la copia toma lugar con sólo una transmisión en cada dirección. rsync puede copiar o mostrar directorios contenidos y copia de archivos, opcionalmente usando compresión y recursión.
Actuando como un daemon de servidor, rsync escucha por defecto el puerto TCP 873, sirviendo archivos en el protocolo nativo rsync o via un terminal remoto como RSH o SSH. En el último caso, el ejecutable del cliente rsync debe ser instalado en el host local y remoto.
rsync se distribuye bajo la licencia GNU General Public License.
Usando rsync
Para clonar dos discos los montaremos los discos origen y destino y ejecutaremos el siguiente comando:
sudo rsync -va ––progress -H -A -X ––ignore-errors /mnt/origen/ /mnt/destino
De esta manera copiaremos los ficheros manteniendo sus propiedades y atributos.
Nota: Es importante la barra final de origen y la no barra final de destino.