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:
[ (*) 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. ]
dd if=origen |pv|dd of=destino
( Para que aparezca el símbolo | hay que teclear la combinación de teclas: AltGr+1 ; de forma que |pv| se escribe tecleando: AltGr+1 pv AltGr+1 )
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.
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.
-----------------------------------------------------
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
=
Crear un pendrive iniciable a partir de una imagen .iso de una distro:
sudo dd if=/nombre-de-la.iso of=/dev/sdb ( por ejemplo:
sudo dd if=/linuxmint-13-cinnamon-dvd-64bit.iso of=/dev/sdb , teniendo la .iso en el directorio raiz y siendo la partición del pendrive /dev/sdb: para saber el dispositivo en que esta montado el pendrive hay que ejecutar el comando
sudo fdisk -l con el pendrive conectado y montado)
= 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
------------------------------------
Uso del 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).
----------------------------------------
http://blog.luispuente.net/comando dd
http://usemoslinux.blogspot.com/2012/03/tip-comando-dd-con-barra-de-progreso.html
http://linuxzone.es/2012/12/10/gdiskdump-el-comando-dd-en-modo-grafico/
---------------------------------------------------