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 es
“sda”
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/