Haciendo backup del disco duro

Dias atrás realicé algunas pruebas con dd para poder hacer un backup de mi disco duro.

Ya se que existe software que realiza la misma tarea, pero quise tratar de usar las herramientas GNU que vienen con cualquier distribución.

Utilizando dd y gzip

Mi objetivo era realizar un backup del disco duro en un archivo, del mismo modo que trabaja Norton Ghost. Este programa nativo de Windows, permite generar la imagen exacta de un disco duro (sector de arranque incluído) en un simple archivo o varios, y poder restaurarlos en otro disco aunque sea de diferente tamaño.

Mi equipo actual corre Debian Lenny sobre un Intel Core 2 Duo E8400 3GHz, con 4Gb de ram y un disco duro S-ATA II de 300Gb. La información que contiene, incluído el sistema operativo, es de unos 85Gb (82Gb de información + 3Gb de S.O.)

Asi que tomé un viejo disco P-ATA (o IDE) de 80Gb lo conecté y al encender mi máquina, ya tenía un dispositivo de backup listo para hacer un borrado de particiones, creación de nuevas, formateo y ya. Dispositivo Listo. Tomé mi SystemRescueCD y reinicié.

Una vez que tuve sesión de root, monté el disco IDE:

# mkdir /backup
# mount /dev/hda1 /backup -o rw

Así que comencé con las pruebas.

La sintaxis del comando sería más o menos así:

# dd if=/dev/sda of=/backup/lenny.img

Pero esto tiene dos inconvenientes… Uno es que copia de a bloques de 512 bytes… y son 85GB de datos!!!

El otro problema es que dd copia absolutamente TODA la información, es decir los 320GB (si, si, aún cuando sea espacio vacío), con lo cual el viejo disco de 80Gb no servirá de mucho.

Así que opté por un truco, llenar el disco con un archivo de ‘ceros’. Crear un archivo de 235Gb enteramente de ceros y luego borrarlo, eso me deja solamente el tamaño de la información, los 85Gb.

Para crear el archivo de ceros, tuve que montar el disco S-ATA y ejecutar lo siguiente:

# mkdir /hd
# mount /dev/sda1 /hd
# dd if=/dev/zero of=/hd/BORRAME
# rm /hd/BORRAME
# umount /hd
# mount /dev/sda2 /hd
# dd if=/dev/zero of=/hd/BORRAME
# rm /hd/BORRAME
# umount /hd

Si se fijan bien, tuve que montar las dos particiones ya que tengo separados la raíz y home. Y también he creado un archivo BORRAME que contiene únicamente ceros (0) y luego lo he borrado. Con esto me aseguro que cualquier otro ‘byte’ en el disco desaparezca.

Eso soluciona el segundo problema, asi que con dd solamente voy a copiar la información ‘verdadera’. Pero me resta resolver el tamaño… 85Gb no entrarán en el disco duro de 80Gb. Habrá que comprimir.

dd if=/dev/sda | gzip > /backup/lenny.img.gz

Este proceso es bastante lento, muy lento; ya que seguimos con el problema de los bloques 512 bytes.

Asi que leyendo el man de dd, encuentro la solución: utilizar bloques de lectura y escritura más grandes.

Como dispongo de 4Gb de Ram, no me importa realizar lecturas de a 1 Gb por vez, asi que me están sobrando 3Gb de ram para realizar la compresión en memoria.

El man es muy clarito: bs=BYTES force ibs=BYTES and obs=BYTES. ibs es la cantidad de bytes que va a leer, obs la cantidad de bytes que escribirá. Además se le puede asignar un multiplicador:

BLOCKS  and  BYTES may be followed by the following multiplicative suffixes:
xM M, c 1, w 2,  b  512,  kB  1000,  K  1024,  MB  1000*1000,  M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.

Así que la línea de mi comando de backup queda de la siguiente manera:

dd bs=1G if=/dev/sda | gzip > /backup/lenny.img.gz

El proceso, que sin ningún parámetro me hubiera demandado unas cuantas horas, ahora se redujo drásticamente a tan solo 20 minutos y los 85Gb de información quedaron comprimidos al increíble tamaño de 22Gb!!! Casi una reducción del 75%.

Apago mi equipo, desconecto el disco IDE y lo guardo en algún lugar seguro. Si es que alguna vez mi disco estalla en mil pedazos (porque es la única forma que pierda mi sistema operativo) entonces podré restaurar desde el disco de 80Gb ejecutando el comando:

# gunzip -c /backup/lenny.img.gz | dd bs=1G of=/dev/sda

Lo que vendrá

En otra oportunidad mostraré como utilizar tar y gzip para realizar copias de seguridad de archivos y carpetas. También haré una breve reseña de como utilizar rsync y la aplicación rsnapshot para realizar backups incrementales y rotativos en tan solo un disco del doble de tamaño de la información (es decir, si la información llega a 30Gb, se necesitará al menos un disco de 60Gb)

Saludos

6 comentarios (+¿añadir los tuyos?)

  1. incendialaciudad
    Dic 26, 2009 @ 11:37:12

    Esto esta buenísimo, podría salvar a muchos.

    Responder

  2. César del Águila
    May 24, 2010 @ 16:17:37

    Muchas gracias por esta información. Estuve haciendo algunas pruebas con un USB de 2GB con 81MB de uso. El uso es solamente por el Parted Magic 4.10 recién instalado.

    Lo que hice fue primero llenar de 0s toda la usb con DD. Luego instale el Parted Magic y todo bien. Luego creé un archivo del tamaño del espacio restante (por siacaso) tambien con DD tal como hiciste tú. Y finalmente:
    dd bs=1G if=/dev/sdb | gzip > /home/cesar/USB_Halifax.img.gz

    El asunto es que el backup me salió de 82MB, es decir 1MB más grande. Mi pregunta es: ¿existe alguna forma de definir el tipo de compresión usado por gzip o de usar otro compresor como rar?

    CesarIII

    Responder

  3. jinetedeldragon
    May 25, 2010 @ 17:34:21

    Gracias por tu comentario.
    Para empezar, cuando se crea un archivo comprimido, se generá un encabezado que influirá en el tamaño del archivo comprimido (ya que contiene la lista de archivos y otra información específica para que sea posible descomprimirla luego sin problema)
    Por otro lado, el tamaño de un archivo comprimido está íntimamente relacionado al tipo de información que se quiera comprimir.
    Si es en su mayoría texto (documentos, scripts, binarios, etc) , la compresión será enorme.
    Si en cambio quieres comprimir archivos que ya están comprimidos, como archivos gz y bz2 o archivos multimedias como mp3, jpg, avi o mpg, la compresión será mucho menor: no se puede comprimir más de lo que ya está comprimido.

    En cuanto a las opciones de gzip: abre una consola y ejecuta man gzip
    Saludos

    Responder

  4. Cesar del Aguila
    Jul 15, 2010 @ 15:59:35

    Después de muchas pruebas haciendo copias de respaldo de unidades USB y uno que otro Disco Duro, encuentro mas practico usar el gzip. Revisando el manual (man gzip) solo puedo agregar “–best” para mejora la compresión, que por defecto es “6”. Y esta puede estar entre 1 y 9, siendo 9 la mejor compresión.
    También sería util usar split para poder luego grabarlo en discos CD ó DVD a ver si me doy un tiempo esta semana de revisarlo.

    De cualquier forma la línea del ejemplo quedaría así:

    dd if=/dev/sda | gzip –best > /backup/lenny.img.gz

    Saludos.

    CesarIII

    Responder

  5. jinetedeldragon
    Jul 15, 2010 @ 16:19:15

    Excelente Cesar. Muchas gracias por el aporte y me alegro que te haya sido de utilidad.

    Responder

  6. hernannh
    Jul 19, 2010 @ 22:27:42

    Hola jinetedeldragon, realmente muy agradecido por toda tu informacion, es de mucha utilidad, te lo agradezco nuevamente, saludos!!. Sigue asi!!

    Responder

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Archivos

noviembre 2009
D L M X J V S
« Oct   Dic »
1234567
891011121314
15161718192021
22232425262728
2930  
A %d blogueros les gusta esto: