11 octubre 2014

Hacer una copia de respaldo del MBR usando un live CD el comando dd de Linux.

En los sistemas basados en BIOS (no UEFI) el MBR (Registro de Arranque Maestro o Master Boot Record) se encuentra al principio del disco duro y sirve para permitir arrancar el sistema operativo. 

Consta de 512 bytes y se encuentra en el sector 0. 
  • Los primeros 64B están libres, en los siguientes 376B (hasta 440) se encuentra el Código de Arranque Maestro o Master Boot Code (MBC), el cual puede ser sustituido por otro gestor de arranque como GRUB, por ejemplo.  
  • A continuación puede estar la firma o identificador del disco, 4B, y otros 2B con valor 0. 
  • Seguidamente encontramos otros 64B con la tabla de particiones y finalmente otros 2B que indican si el registro contiene efectivamente código de arranque. Esta misma firma está presente en los códigos de arranque de los VBR. El Registro de Arranque de Volumen o VBR (Volume Boot Record) es similar al MBR pero se encuentra al principio de los volúmenes no particionados.

En ocasiones nos puede interesar tener una copia del MBR, que además contiene la tabla de particiones, para que en caso de que se corrompa por alguna razón Windows pueda arrancar de nuevo.

Arrancamos el equipo desde el DVD donde habremos puesto una versión live de cualquier distribución de linux. Una vez que ha terminado de arrancar, abrimos una consola para averiguar cual es el nombre del disco donde está el mbr usando el comando

sudo fdisk -l

La salida que obtendremos dependerá de los discos y particiones que tengamos, pero podría ser como sigue:

Dispositivo Inicio Comienzo Fin Bloques Id Sistema
/dev/sda1 * 2048 41017343 20507648 83 Linux
/dev/sda2 1949405182 1953523711 2059265 5 Extendida
/dev/sda3 195311616 1949403135 877045760 83 Linux
/dev/sda4 41017344 195311615 77147136 83 Linux
/dev/sda5 1949405184 1953523711 2059264 82 Linux swap / Solaris


En este caso solo hay un disco, sda, por lo que el mbr está en él.

dd es un comando que permite copiar y convertir datos de archivos a bajo nivel. Vamos a hacer una copia de respaldo del MBR, tabla de particiones incluida utilizando este comando. Ya sabemos que el disco de arranque donde tenemos el MBR essda” y el archivo de respaldo que vamos a crear lo llamaremos “da.mbr.bak”, por ejemplo.

dd if=/dev/sda of=sda.mbr.bak bs=512 count=1 # copiamos todo el MBR

if= archivo o partición de origen. En este caso disco “/dev/sda”.
of= archivo o partición de destino. En este caso, archivo “sda.mbr.bak”.
bs= escribe “x” bytes de una sola vez, en este caso 512, el tamaño del MBR.
count= copia bloques del tamaño indicado en “bs” tantas veces como queramos, en este caso 1.

También podríamos escribirlo así:

dd if=/dev/sda | pv | dd of=sda.mbr.bak bs=512 count=1

Con “pv” lo que logramos es ver una barra de progreso mientras se procede a la copia. No es necesario pero si interesante.

La restauración la podemos hacer de una sola vez o restaurar el MBC y la tabla de particiones por separado.

dd if=sda.mbr.bak |pv|dd of=/dev/hda

Para hacer la restauración primero copiamos el Master Boot Code como se indica, copiando un bloque de 446B del archivo sda.mbr.bak una sola vez (count=1).

dd if=sda.mbr.bak of=/dev/sda bs=446 count=1 # restauramos el MBC

Seguidamente podemos restaurar la tabla de particiones. Para ello teminamos de copiar el archivo sda.mbr.bak dando un salto (skip) de 446 bloques en dicho archivo para empezar la copia, y en ese punto empezará a copiar 64 bloques (count) de 1B (bs – block size). Seek indica que debe saltar 446 bloques de 1B (indicado en bs)en el archivo de salida (/dev/sda) antes de proceder a la copia, es decir, que empiece justo a continuación del MBC.

dd if=sda.mbr.bak of=/dev/sda bs=1 count=64 skip=446 seek=446 # Restaura la tabla de particiones


Una página donde explica muy bien como funciona el comando "dd" es la siguiente:

http://blog.desdelinux.net/uso-del-comando-dd/