jueves, 3 de mayo de 2012

Como hacer una copia de seguridad del sector de arranque con Linux

El "Master Boot Record (MBR)" o "Sector de Arranque" es una de las piezas que debemos conocer de nuestro disco duro para poder mantener de forma acertada un equipo con varios sistemas operativos instalados.

El BIOS (Basic Input Output System)

Todos hemos oido hablar del BIOS, es esa pantallita que aparece en un ordenador al arrancar, pero vamos a intentar contextualizar la BIOS dentro del mundo de la informática.

Plataforma de un ordenador

No todos los equipos tienen BIOS. Entendemos por plataforma hardware como una combinación de hardware que va a constituir una computadora.
Por ejemplo, si cogemos un ordenador Apple con un microprocesador PowerPC, tendremos lo que llamamos una plataforma PowerPC.
Tendremos una plataforma PC o tambien llamada x86 cuando tengamos un equipo basado en un microprocesador descendiente del 8086 (como lo son el 80286, 80386, 80486, Pentium, II, III, IV, AMD K6, AMD Athlon, etc) con una placa base compatible con este, memoria y disco duro.
También podremos tener una plataforma PC de 64 bits, también denominada x86_64, que es una nueva plataforma basada en los PC, pero compatible hacia atrás con estos.
Además existen múltiples plataformas: Alpha, Itanium, etc. cada una de ellas con sus características distintivas.

¿Todos los ordenadores tienen BIOS?

Te lo estás imaginando, no, no todos los ordenadores tienen BIOS, solamente los PC's la tienen.
Me parece un error garrafal no comentar a los estudiantes de informática sobre lo específico que es el mundo PC, que aunque domine casi toda la computación, no es lo único disponible. No es necesario enseñar a nadie nuevas plataformas, ya que estas son minoritarias, pero por lo menos, que sepan que no todo el "monte es oregano".
De hecho, ya ha habido intentos de sustituir la obsoleta BIOS, por un sistema más potente de esquema de arranque (el sistema EFI) que además de usar memoria ROM, usaría una pequeña partición en el disco duro para tal cometido. Estos intentos se han topado con el poco interés de los fabricantes de hardware por implementarlos, además del requisito de la compatibilidad con la BIOS.

Pero exactamente, ¿que hace la BIOS?

Como todos sabeis, hay dos tipos generales de memoria, RAM (Random Access Memory) y ROM (Read Only Memory), y que un ordenador para arrancar necesita que se le proporcione un programa, pues bién, debemos introducir de algún modo ese programa, y ese modo es tenerlo guardado en memoria ROM, la cual no va a ser borrada en el arranque del equipo.
Cuando un PC arranca, comienza a ejecutar instrucciones a partir de la dirección de memoria 0x0000 (cero o la primera dirección de memoria), donde casualmente está ubicado el chip BIOS.
En el arranque, el programa BIOS lee una pequeña memoria flash donde se guarda la configuración del ordenador (o también llamado configuración de la BIOS). En esta memoria va a leer cosas como ¿que dispositivos deben ser activados?, ¿cuales no?, ¿orden de arranque de los dispositivos?, ¿fecha y hora?, etc.
Tras leer la flash, la BIOS va a activar y chequear que los dispositivos que componen el PC funcionan correctamente.
Una vez comprobado que todo está bien, el programa BIOS va a cargar en memoria el primer sector del disco duro y va a comenzar a ejecutarlo. Esto es el arranque a partir del disco duro. Si arrancamos a partir de un CD o de otro dispositivo el procedimiento tienen que ser similar: Leer un sector, y proceder a su ejecución.
Lo que mucha gente no sabe, es que la BIOS mantiene una segunda función: Es una especie de API o biblioteca de funciones que permite acceder al hardware. Efectivamente, La BIOS tiene rutinas para leer y escribir en los discos duros, en pantalla, puertos, etc. De hecho los sistemas operativos MS-DOS no tenían sus propias rutinas para estos cometidos ya que llamaban a las rutinas de la BIOS, pero posteriormente, debido a limitaciones en la BIOS, los sistemas operativos no van a usar las rutinas BIOS, sustituyendo estás por sus propias rutinas (en esto también influye que la memoria ROM que forma la BIOS es mucho más lenta de leer que la RAM).

El Master boot Record (MBR)

El MBR es el primer sector del del disco duro. Cuando la BIOS decide que es nuestro disco duro el que debe arrancar el equipo, lee el MBR, lo coloca en memoria y comienza a ejecutarlo.
El MBR está compuesto por tres zonas:
  1. El arranque maestro (446 bytes): No es más que un programa para ser ejecutado por el procesador. Este se encargará de cargar el sistema operativo. Hay que notar que el tamaña de este programa es demasiado pequeño para contener un sistema operativo, por lo cual solamente se podrá hacer cargo de buscar el resto del sistema operativo y cargarlo en memoria. Digamos que el arranque maestro tira del hilo para seguir cargando nuestro sistema operativo.
  2. Tabla de Particiones (64 bytes): Aquí se guarda la configuración de las particiones del disco.
  3. Firma de unidad arrancable (2bytes).

Arranque maestro en Windows

En los sistemas operativos Windows, a grandes rasgos, tras cargarse el MBR, el arranque maestro lee la tabla de particiones y busca la partición activa. A partir de hay cede el control a determinados ficheros de la partición activa.
Como en una plataforma Windows el código de arranque solo sabe ceder el control a la partición activa, este arranque es igual en todos los sistemas Windows.

Arranque maestro en Linux

En los sistemas Linux, se pueden usar multitud de gestores de arranque, pero el que vamos a ver nosotros es el GRUB.
El gestor de arranque GRUB está formado por dos partes:
  1. Stage1: Es el código que se coloca en el arranque maestro (o alternativamente en el primer sector de una partición primaria, pero este caso no es muy frecuente).
  2. Stage2: Es código que se coloca en la partición donde tenemos instalado Linux. Esto es a grosso modo, ya que realmente, el stage2 se coloca dentro de la carpeta /boot/grub.
El stage1 es distinto en cada disco duro, ya que este debe ceder el control al stage2, que se encuentra dentro de una partición, y no disponemos de espacio para incluir los controladores de los sistemas de archivos más usados en Linux. Por esto, debemos de incluir en el stage1 la dirección de disco del stage2 (es decir el número de sector donde está escrito), y esta dirección será distinta en cada disco duro.

El comando dd

El comando dd es usado por los administradores de sistemas para hacer copias de seguridad de discos duros y tareas parecidas. Es un comando peligroso, pero que bien usado, tiene grandes ventajas.
Dd copia dispositivos a nivel físico (es decir, sector a sector) sin pasar a través de un sistema de archivos.
dd admite estos parámetros principales:
dd [if=<fichero|dispositivo>][of=<fichero|dispositivo>][bs=tamaño_sector][count=numero_sectores]
  1. if indica el dispositivo o fichero del cual vamos a leer. Si no lo indicamos, leemos de la entrada estandard.
  2. of indica el fichero o dispositivo en el cual vamos a escribir. Si no lo indicamos, escribimos en la salida estandard.
  3. bs indica el tamaño de sector que vamos a usar, por defecto, 512 bytes.
  4. count indica el numero de sectores que queremos copiar. Si no lo indicamos dd irá copiando de la entrada hasta llegar al final.
Veamos un ejemplo, queremos hacer una copia de un disco duro (/dev/sda) a otro disco duro idéntico (/dev/sdb). Para ello usaremos el siguiente comando:
# dd if=/dev/sda of=/dev/sdb
Estoy leyendo el dispositivo (if) /dev/sda (primer disco duro), y el contenido leido lo guardo en /dev/sdb (segundo disco duro).
El proceso termina cuando se haya leido todo el disco duro del que leo, o cuando en el segundo disco duro se acabe el espacio. Si los dos discos tienen el mismo tamaño, se hará una copia exacta del primero.

Hacemos la copia del sector de arranque

Bueno, para copiar nuestro sector de arranque, tendremos que usar el siguiente comando (suponiendo que el disco sea /dev/sda):
# dd if=/dev/sda of=copia_arranque bs=446 count=1
Que explicado, copia del primer disco duro (/dev/sda) 446 bytes (el tamaño del arranque maestro) en un fichero denominado copia_arranque.

Restaurar la copia del sector de arranque

Para restaurar la copia del sector de arranque, tendremos que invertir entrada y salida en el comando anterior:
# dd if=copia_arranque of=/dev/sda
No nos hace falta indicar cuantos bytes escribir, ya que el fichero copia_arranque solo tiene 446 bytes, y los debe copiar en el primer sector del disco duro.

No hay comentarios:

Publicar un comentario