El comando dd (Dataset Definition), es una herramienta sencilla, útil, y sorprendente, a la vez que desconocida por muchos.
Esta aplicación fue creada a mediados de los 70, en principio para Unix, simplemente porque no existía.
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.
Ni que decir tiene que toda la información de dd la pueden consultar con el comando man dd e info dd, también dos grandes olvidados.
comando 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):
$ sudo: fdisk -l.
seria como una especie de fdisk/status para los ex usuarios de windows 3.1 en adelante.
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.
Vamos a ver algunos ejemplos prácticos y opciones de este comando:
dd if=/dev/hda1 of=/dev/hdb bs=1M
Grabaríamos sólo la primera partición del disco de origen en el de destino.
dd if=/dev/hda of=/dev/hdb1 bs=1M
Grabaríamos el disco completo en la primera partición del disco de destino.
dd if=/dev/hda of=/home/hda.bin
Crear una imagen del disco duro, puede ser bin o iso (a partir de ahora utilizaré nuestro home como ejemplo).
Como root:
dd if=/dev/hda | gzip > /home/hda.bin.gz
Crearíamos con el anterior comando una imagen del disco comprimida, (podemos utilizar gzip, bzip o bzip2.)
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
Algunas curiosidades:
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
Al borde de la paranoia… Convierte todas las letras en mayúsculas:
dd if=miarchivo of=miarchivo conv=ucase
Cambia en todo el disco, la palabra Puigcorbe por Slqh, ( puedes cambiar rápidamente tu nombre a todos los archivos del disco):
dd if=/dev/sda | sed ‘s/Puigcorbe/Slqh/g’ | dd of=/dev/sda
Llena el disco con caracteres aleatorios cinco veces. No va a quedar ni rastro de información en el disco Razz :
for n in {1..5}; do dd if=/dev/urandom of=/dev/hda bs=8b conv=notrunc; done
comando dd-2
The dd command (Dataset Definition), is a simple, useful, and surprising tool, at the same time unknown to many.
This application was created in the mid-70s, initially for Unix, simply because it did not exist.
But unlike other tools that have become more sophisticated since its creation, this one has been simplified, to the point of being able to do the same as good commercial programs like Norton Ghost or free ones like CloneZilla, with just a small command in the command line.
It goes without saying that all the dd information can be consulted with the man dd and info dd commands, also two great forgotten ones.
dd command
The first thing is always to be clear about the source and destination hard disk, something we can easily find out with the command (as root):
$ sudo: fdisk -l.
It would be like a kind of fdisk/status for former windows 3.1 users onwards.
The most basic syntax, would be this [as root]:
dd if=[source] of=[target].
So if we wanted to clone a hard disk:
dd if=/dev/hda of=/dev/hdb bs=1M with this we would clone the hda disk into hdb.(IDE disks).
O:
dd if=/dev/sda of=/dev/sdb bs=1M.
for SATA disks
With bs=1M, we are saying that both reading and writing should be done in 1 megabyte blocks (less, it would be slower but safer, and with more we risk losing data along the way).
Keep in mind that this way you will burn the disk "as is", MBR, partition table, empty space, etc., so you will only be able to burn to a disk of the same or larger size.
Let's see some practical examples and options of this command:
dd if=/dev/hda1 of=/dev/hdb bs=1M
We would write only the first partition of the source disk to the target disk.
dd if=/dev/hda of=/dev/hdb1 bs=1M
You would write the entire disk to the first partition of the destination disk.
dd if=/dev/hda of=/home/hda.bin
Create an image of the hard disk, it can be bin or iso (from now on I will use our home as an example).
As root:
dd if=/dev/hda | gzip > /home/hda.bin.gz
We would create with the previous command a compressed disk image, (we can use gzip, bzip or bzip2.)
Create a CD image:
dd if=/dev/cdrom of=/home/imagendeCD.iso
To mount the CD image:
mount -o loop imagedeCD.iso /mnt/home
Copy the Master Boot Record:
dd if=/dev/hda of=mbr count=1 bs=512
To restore the MBR:
dd if=mbr of=/dev/hda
Copy the Volume Boot Sector (VBS):
dd if=/dev/hda of=/home/sector_boot_sector_hda count=1 bs=512
To restore the VBS:
dd if=/home/sector_boot_hda of=/dev/hda.
Some curiosities:
To recover a scratched DVD:
dd if=/dev/cdrom of=/home/dvd_recovered.iso conv=noerror,sync.
This does not recover the whole DVD, in this case, only the readable sectors. It also works for defective hard disks.
The noerror option is used to avoid reading errors in any situation. Another example would be:
dd conv=noerror if=/dev/hda of=~/home/disk_image_with_errors.iso
We would write with it an image of the hard disk in our home skipping the errors of the disk (very useful for disks that are dying).
Clean our MBR and partition table:
dd if=/dev/zero of=/dev/hda bs=512 count=1
Cleans the MBR but does not touch the partition table (very useful to erase GRUB without losing data in the partitions):
dd if=/dev/zero of=/dev/hda bs=446 count=1
Creates an empty 1 Mb file, a very interesting option as we will now see:
dd if=/dev/zero of=new_empty_file bs=1024 count=1024
Create a 2Gb swap file as easy as that:
sudo dd if=/dev/zero of=/swapspace bs=4k count=2048M
mkswap /swapspace
swapon /swapspace
On the verge of paranoia... Convert all letters to uppercase:
dd if=myfile of=myfile conv=ucase.
Change in all the disk, the word Puigcorbe by Slqh, (you can quickly change your name to all the files of the disk):
dd if=/dev/sda | sed 's/Puigcorbe/Slqh/g' | dd of=/dev/sda
Fill the disk with random characters five times. There will be no trace of information left on the Razz disk:
for n in {1..5}; do dd if=/dev/urandom of=/dev/hda bs=8b conv=notrunc; done
command dd-2
Home Page oficial del proyecto: /Official home page of the project: gdiskdump
Screenshots / Capturas de pantallas:
Blogs, Sitios Web y Redes Sociales / Blogs, Webs & Social Networks | Plataformas de Contenidos/ Contents Platforms |
---|---|
Mi Blog / My Blog | Los Apuntes de Tux |
Red Social Twitter / Twitter Social Network | @hugorep |
Blurt Official | Blurt.one | BeBlurt | Blurt Buzz |
---|---|---|---|