viernes, 5 de octubre de 2007

comando dd [guia]

Introducción:
El comando dd (duplicate disk) es un comando bastante útil para transferir datos desde un dispositivo/archivo hacia un dispositivo/archivo/etc.
En este mini-howto vamos a ver las diferentes utilidades que se le pueden dar al comando
La sintaxis básica del comando es la siguiente:
dd if=origen of=destino
donde if significa "input file", es decir, lo que quieres copiar y
of significa "output file", o sea, el archivo destino (donde se van a copiar los datos); origen y destino pueden ser dispositivos (lector de CD, diskettera, etc.), archivos, etc.
Copiando Diskettes:
Primero insertamos el diskette origen y escribimos lo siguiente en una consola:
dd if=/dev/fd0 of=~/diskette.img
Después insertamos el diskette destino (en blanco) y escribimos lo siguiente:
dd if=~/diskette.img of=/dev/fd0
Nos queda eliminar la "imagen" que creamos y listo...
rm -f ~/diskette.img
NOTA: El ~ significa "tu directorio home", es similar a escribir $HOME

Manejo de errores durante la copia:
Es posible que durante la copia o duplicación de un diskette se encuentren errores en la superficie del mismo. Para evitar que este error nos impida copiar los datos "buenos" del disco podemos hacer lo siguiente:
dd conv=noerror if=/dev/fd0 of=~/imagen_disco_con_errores.img
NOTA: la opción noerror hace que se continúe con la copia aunque se produzcan errores de lectura

Copiando Discos Duros
Con sudo fdisk -l sabremos cómo llama el Sistema a nuestros Discos Duros y cuales son nuestras particiones:
...@puesto1:~$ sudo fdisk -l
[sudo] password for...:
Disco /dev/sda: 320.0 GB, 320072933376 bytes
255 cabezas, 63 sectores/pista, 38913 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Identificador de disco: 0x000c55b5
Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sda1 * 1 38913 312568641 83 Linux
Disco /dev/sdb: 120.0 GB, 120034123776 bytes
255 cabezas, 63 sectores/pista, 14593 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Identificador de disco: 0x94319431
Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sdb1 1 2436 19567138+ 83 Linux
/dev/sdb2 2437 2679 1951897+ 82 Linux swap / Solaris
/dev/sdb3 2680 14593 95699205 83 Linux
...@puesto1:~$
Ahora utilizamos el comando dd para hacer nuestras copias o clonación:
sudo dd if=/dev/sda of=/dev/sdb bs=1M
*el parámetro bs no es obligado
Haciendo imágenes ISO de un CD:
La forma mas fácil y efectiva de crear nuestras "imagenes" de CD es la siguiente:
dd if=/dev/cdrom of=micd.iso
El comando dd también sirve para copiar particiones o discos completos unos sobre otros. Básicamente podemos decir que mediante dd podemos "clonar" particiones o nuestro disco duro completo. Para hacerlo, en consola:
dd if=/hdxa of=/hdyb (copia una partición en otra)
dd if=/hdx of=/hdy (copia de un disco duro en otro)
donde: x: disco rígido origen, y: disco rígido destino, a: partición origen, b: partición destino.
Si añadimos bs=1M, copiara de 1MB en 1MB; ejemplo:
dd if=/dev/hda of=/dev/hdb bs=1M
Donde:
dd = comando para realizar el clonado o copiado byte a byte
if = desde el dispositivo donde compiaremos (/dev/hda el disco maestro)
of= el dispositivo donde se copiara (/dev/hdb el disco esclavo)
bs=1M; determina que la copia se realizará mega a mega
NOTA: Es necesario que sepas como se definen los discos y particiones en Linux.
RECOMENDACIONES:
* Los datos de la partición o disco destino serán destruidos por completo.
* Tener en cuenta también que la partición o disco destino debe ser igual en tamaño o mayor que la partición o disco origen.
* Es conveniente que hagas una copia de seguridad de los datos importantes y tener a mano un disco de arranque de linux por si las moscas
Por último:
Tener presente que el tamaño de la imagen resultante va ser exactamente el mismo que el del dispositivo original. Es decir: dd te guarda también el espacio no utilizado.
Puedes redirigir la salida con una tubería (pipe) y comprimirlo con gzip, bzip o bzip2 pero aún así vas a necesitar bastante espacio libre para poder guardar las imágenes que generes.
Más información: man dd

No hay comentarios: