dd es un comando de la familia de los Sistemas Operativos Unix que permite copiar y convertir datos de archivos a bajo nivel.
Es de mucha importancia aclarar que en sistemas operativos Unix, cualquier dispositivo es manejado como un archivo. Por lo tanto el comando dd, puede ser utilizado en diversos dispositivos y volúmenes (particiones), más allá de los archivos propiamente dicho.
Si se ha especificado el tamaño de bloques para la transferencia (lectura/escritura), mediante el parámetro bs, y no se ha indicado alguna conversión salvo noerror, notrunc o sync, se procede a la lectura de a un bloque por vez del origen y la escritura del mismo en destino.
El tamaño del bloque a escribir es el mismo que el de la de entrada, salvo cuando se indica la conversión sync, que en cuyo caso se procede a rellenar con ceros el bloque de destino. Si no se utiliza sync, el último bloque a escribirse puede tener un tamaño menor.
Por otro lado, en caso de que no se haya especificado un tamaño de bloque, dd utiliza 512 bytes como tamaño por defecto.
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.
La sintaxis más básica, sería ésta:
Por lo que si quisiéramos clonar un disco duro tipo IDE:
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:
Grabaríamos sólo la primera partición del disco de origen en el de destino.
Grabaríamos el disco completo en la primera partición del disco de destino.
Crear una imagen del disco duro, puede ser bin o iso (a partir de ahora utilizaré nuestro home como ejemplo). Como root:
Crearíamos con el anterior comando una imagen del disco comprimida, (podemos utilizar gzip, bzip o bzip2.)
Crea una imagen de un CD:
Para montar la imagen del CD:
Copiar el Master Boot Record:
Para restaurar el MBR:
Copiar el Volume Boot Sector (VBS):
Para restaurar el VBS:
Algunas curiosidades:
Recuperar un DVD rayado:
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:
sudo 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:
Limpia el MBR pero no toca la tabla de particiones (muy útil para borrar el GRUB sin perder datos en las particiones):
Crea un archivo vacío de 1 Mb, una opción muy interesante como ahora veremos:
Crear un archivo swap de 2Gb así de fácil:
Al borde de la paranoia… Convierte todas las letras en mayúsculas:
Cambia en todo el disco, la palabra Puigcorbe por Slqh, ( puedes cambiar rápidamente tu nombre a todos los archivos del disco):
Llena el disco con caracteres aleatorios cinco veces. No va a quedar ni rastro de información en el disco :
Es de mucha importancia aclarar que en sistemas operativos Unix, cualquier dispositivo es manejado como un archivo. Por lo tanto el comando dd, puede ser utilizado en diversos dispositivos y volúmenes (particiones), más allá de los archivos propiamente dicho.
Si se ha especificado el tamaño de bloques para la transferencia (lectura/escritura), mediante el parámetro bs, y no se ha indicado alguna conversión salvo noerror, notrunc o sync, se procede a la lectura de a un bloque por vez del origen y la escritura del mismo en destino.
El tamaño del bloque a escribir es el mismo que el de la de entrada, salvo cuando se indica la conversión sync, que en cuyo caso se procede a rellenar con ceros el bloque de destino. Si no se utiliza sync, el último bloque a escribirse puede tener un tamaño menor.
Por otro lado, en caso de que no se haya especificado un tamaño de bloque, dd utiliza 512 bytes como tamaño por defecto.
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.
Es muy importante tener claro cual sera el disco duro de origen y cual el de destino, algo que averiguamos fácilmente con el comando:
sudo fdisk –l
La sintaxis más básica, sería ésta:
sudo dd if=[origen] of=[destino]
Por lo que si quisiéramos clonar un disco duro tipo IDE:
sudo dd if=/dev/hda of=/dev/hdb bs=1M
para discos SATA:
sudo dd if=/dev/sda of=/dev/sdb bs=1M
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:
sudo 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.
sudo dd if=/dev/hda of=/dev/hdb1 bs=1M
Grabaríamos el disco completo en la primera partición del disco de destino.
sudo 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:
sudo 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:
sudo 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:
sudo dd if=/dev/hda of=mbr count=1 bs=512
Para restaurar el MBR:
sudo dd if=mbr of=/dev/hda
Copiar el Volume Boot Sector (VBS):
sudo dd if=/dev/hda of=/home/sector_arranque_hda count=1 bs=512
Para restaurar el VBS:
sudo dd if=/home/sector_arranque_hda of=/dev/hda
Algunas curiosidades:
Recuperar un DVD rayado:
sudo 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:
sudo 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:
sudo 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):
sudo 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:
sudo 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
sudo mkswap /swapspace
sudo swapon /swapspace
sudo mkswap /swapspace
sudo 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):
sudo 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 :
for n in {1..5}; do dd if=/dev/urandom of=/dev/hda bs=8b conv=notrunc; done
Este es un excelente post acerca del ABC de los comandos en Unix (está en italiano, pero con el traductor de Google pueden entender todo sin problemas).
Búsqueda personalizada
0 comentarios:
Publicar un comentario
No insertes enlaces clicables, de lo contrario se eliminará el comentario. Si quieres ser advertido via email de los nuevos comentarios marca la casilla "Avisarme". Si te ayudé con la publicación o con las respuestas a los comentarios, compártelo en Facebook,Twitter o Instagram. Gracias.