Backup de particiones con dd y fsarchiver

Todos hemos sufrido el desastre de que el Windows (o Linux) se estropee por acción de un virus, o un programa, y no arranque de nuevo, o tal vez el sistema tras instalar todo tipo de programas empieza a funcionar mal o demasiado lento.

Pues bien, la idea es hacer backups completos de nuestra tabla de particiones y de cada una de las particiones del sistema.

Live CD

Un Live CD es una distribución de un sistema operativo que no necesita instalarse para ejecutarse, en nuestro caso usaremos un Live CD de una distribución de Linux que nos permite ejecutar herramientas de backup y restauración.

Se pueden usar muchas Live CDs diferentes para llevar a cabo el backup y la restauración, dado que en realidad usamos 2 herramientas dd y fsarchiver, en mi caso recomiendo: System Rescue CD, acceded a la web y descargar la versión estable (o la beta si os queréis arriesgar), en el momento de redactar este post, he usado la versión 1.3.0.

Una vez descargada la ISO, podéis grabarla en un CD (o en un pendrive USB) y arrancad vuestro ordenador con dicho CD (o USB), para lo cual es necesario que en vuestra BIOS se indique que se debe arrancar por CD (o USB) antes que por el disco duro (es posible que ya lo tengáis configurado así por defecto, así que no accedáis a la BIOS a menos que os sea necesario, dado que acceder a la BIOS es peligroso sino sabéis lo que estáis haciendo).

Una vez reiniciado el PC con la Live CD tendréis una línea de comandos, lo cual indica que ya tenéis todo listo para empezar a trabajar.

Lo primero es que montéis (indicar al sistema operativo que hay que usar una unidad) el disco duro o llave USB dónde queréis dejar los backups o desde dónde queréis leerlos. Para ello usamos el comando mount, por ejemplo para montar un disco duro USB en una carpeta, podemos ejecutar lo siguiente (adecúalo a tu propia situación):

mount /dev/sdb1 /mnt/backup

Listar las discos y particiones

Para saber que particiones queremos hacer backup o restaurar, ejecutaremos el siguiente comando:

fsarchiver probe simple

Con esto obtendremos un listado de las particiones, con la etiqueta del volumen, tamaño, tipo, etc… Por ejemplo podríamos obtener la siguiente información:

[=====DEVICE=====] [==FILESYS==] [=====LABEL=====] [====SIZE====] [MAJ] [MIN]
[/dev/sda1       ] [ext3       ] [boot           ] [   768.72 MB] [  8] [  1]
[/dev/sda2       ] [reiserfs   ] [gentoo         ] [    12.00 GB] [  8] [  2]
[/dev/sda3       ] [ext3       ] [data           ] [   350.00 GB] [  8] [  3]
[/dev/sda4       ] [ext3       ] [backup         ] [   300.00 GB] [  8] [  4]
[/dev/sda5       ] [lvm2pv     ] [               ] [   134.38 GB] [  8] [  5]
[/dev/sda6       ] [lvm2pv     ] [               ] [   106.24 GB] [  8] [  6]
[/dev/sdb1       ] [reiserfs   ] [usb8gb         ] [     7.46 GB] [  8] [ 17]

Hacer el backup del MBR y de la tabla de particiones

El MBR (Master Boot Record) es la información residente en el inicio de cada disco duro, dónde se indica cómo arrancar el PC desde dicho disco, junto al MBR se encuentra la tabla de particiones del disco duro.

Comando de ejemplo para hacer el backup de MBR + tabla de particiones:

dd if=/dev/sda of=sda-mbrl bs=512 count=1

Explicación de los parámetros:

  • if=/dev/sda disco duro a hacer backup (ver sección anterior para listar discos duros y particiones).
  • of=sda-mbrl fichero dónde dejar el backup.
  • bs=512 tamaño en bytes a copiar desde el disco duro (los primeros 512 bytes de cada disco duro tienen el MBR y la tabla de particiones).
  • count=1 cuantas copias hacer, dejar siempre a 1.

Hacer el backup de una partición

Ejemplo para hacer un backup de la partición:

fsarchiver savefs -j2 -s 4300 -v sda1-windows.fsa /dev/sda1

Explicación de los parámetros:

  • savefs comando para hacer el backup.
  • -j2 lanza 2 hilos para hacer el backup, esto es últil para PCs con dual core o quad core (poner -j4)…
  • -s 4300 esto divide los ficheros de backup en trozos en megas, en el ejemplo trocea en 4300Mb (el tamaño de un DVD).
  • sda1-windows.fsa fichero dónde se hará el backup, la extensión tiene que ser .fsa, la ruta puede ser relativa (como en el ejemplo) o absoluta.
  • /dev/sda1 partición de la qué queremos hacer el backup, para discos IDE (los viejos), la ruta será del tipo /dev/hda1, para los SATA (los nuevos) es tal y como se veía en el ejemplo. Para saber que partición exactamente queremos hacer el backup, usar el comando indicado en la sección anterior.

… en construcción …

6 comentarios

  1. Neov dice: Responder

    Saludos,

    Gracias por explicar en detalle la forma de hacer backups en unix.

    Estoy en este momento intentando hacer una copia de una particion de una maquina fisica a una virtual. No quiero todas las particiones solo quiero la primera /dev/sda1.

    No usé fsarchiver, sino transferencia usando dd y netcat desde una maquina a la otra. Pero jamás arranca.

    Será posible hacer esto con un tar -czf / de la raiz? Instalar un nuevo linux muy pequeño con lo básico para arrancar y descomprimir el tarfile en una nueva particion primaria activa, para, finalmente, intercambiar las particiones en el fstab o en la maquina virtual.

    Lo que noto es que con el tar no copio el espacio libre y eso se traduce en un pequeño archivo comprimido.

    La otra duda que tengo es si puedo hacer dd if=/dev/sda bs=512 count=?? del disco duro completo /dev/sda que incluya el MBR,tabla de particion, programa de arranque, y la primera particion activa /dev/sda1 pero ignorar las otras particiones.

    Que me recomiendan?

  2. gerardo dice: Responder

    Muy bueno toda la información, pero tengo una duda, como haces el proceso en inversa, es decir, como restauras?

    1. Igual, pero cambiando el órden del comando dd (la entrada es el fichero, y el destino la partición):

      dd if=sda-mbrl of=/dev/sda bs=512 count=1

      Para el fsarchiver, no tienes más que ver las opciones del comando para en vez de salvar la partición, restaurarla (man fsarchiver).

  3. Buen resumen, sólo matizaría el tema del backup del mbr+tabla de particiones…

    Las tablas de particiones tienen que definir las particiones en unidades de pistas, es decir, que no se puede definir una partición que empiece en el sector 32 si hay 63 sectores por pista.

    Es frecuente, que la primera partición empiece en la segunda pista puesto que en la primera pista además del MBR+tabla de particiones (primer bloque) suele encontrarse el código ejecutable de ciertos arrancadores de sistema. Lo más recomendable es salvar con dd toda la primera pista no sólo el primer bloque.

    El comando dd es el mismo sólo que cambia el count=1 a count=63 y listo.

    >dd if=/dev/sda of=sda-mbrl bs=512 count=63

    No necesariamente han de ser 63 bloques por pista, si quieres saber cuantos bloques por pista tiene el disco a guardar, una forma de averiguarlo es con el siguiente comando:

    >sudo sfdisk -l -uS /dev/sda
    Disco /dev/sda: 30401 cilindros, 255 cabezas, 63 sectores/pista
    Unidades = sectores de 512 bytes, contando desde 0

    Disp. Inicio Principio Fin Nº sect. Id Sistema
    /dev/sda1 63 305234 305172 de Utilidad Dell
    /dev/sda2 * 305235 69802424 69497190 7 HPFS/NTFS
    /dev/sda3 69802425 71923004 2120580 83 Linux
    /dev/sda4 71923005 488392064 416469060 5 Extendida
    /dev/sda5 71923068 473724719 401801652 8e Linux LVM
    /dev/sda6 473724783 488392064 14667282 82 Linux swap / Solaris

    En el ejemplo se puede ver que la primera partición empieza en el sector 63 así que lo más seguro es salvar los primeros 63 sectores (del 0 al 62). El comando es el indicado más arriba.

    Un saludo,
    Rafael Lorenzo.

    1. Graias Rafa!

      Tan completo y detallista como siempre (por cierto, te he editado el comentario para usar los tags de <code>).

  4. Nice info.

Deja un comentario