Proceso de Arranque

Conceptos Clave

  • Proporcionar comandos comunes para el gestor de arranque (BootLoader) y las opciones al kernel en el arranque.
  • Demostrar conocimiento de la secuencia de arranque desde el BIOS hasta la finalización del proceso arranque.
  • Revisar los eventos del arranque en los logs.

Términos y utilidades

  • /var /log/messages
  • dmesg
  • BIOS
  • kernel
  • bootloader
  • init

Introducción

El proceso que se da cuando se inicia una computadora mediante el botón de encendido hasta que tenemos un sistema operativo en funcionamiento es complejo. Involucra varios tipos de software que se van conectando entre sí hasta que el sistema operativo se encuentra en estado funcional.

Si bien la mayoría de las veces no necesitamos intervenir demasiado en este proceso, es necesario comprender algunos detalles de su funcionamiento.

Inicio de ejecución con el Firmware

El firmware es el software que viene en dispositivos electrónicos para permitir su funcionamientos mas básico. Se suele almacenar en memoria no volátil.

Muchas dispositivos de hardware contienen firmware, entonces, cualquier computadora puede tener varios tipos de firmware diferentes instalados (motherboard, modem, etc.).

El firmware mas importante es el que se encuentra instalado en la placa madre, ya que este controla el hardware que pertenece a la misma y controla el proceso de arranque.

En el pasado , la mayoría de las computadoras basadas en arquitecturas X86 y X86-64 usaban un tipo de firmware llamado BIOS (Basic Input/Output System).

A principios de 2011, un nuevo tipo de firmware, conocido como EFI (Extensible Firmaware Interface) o UEFI (Unified EFI), empezó a ser el estándar.

El firmware del motherboard (placa madre) reside en una memoria flash o EEPROM (Electrically Erasable Programmable Read-Only Memory). Cuando uno enciende la maquina, esta realiza una prueba para revisar que todo este funcionando correctamente, este prueba se llama POST (Power On Self Test). Una vez finalizado esto, carga el gestor de arranque desde el dispositivo de arranque. Típicamente, este es el primer disco duro. El gestor de arranque toma control y carga el sistema operativo.

Proceso arranque con BIOS

Luego de iniciado el equipo, un programa llamado BIOS (Basic Input Output Service), que es guardado en memoria no volátil, es ejecutado. El proceso seria así:

  1. El BIOS prueba el correcto funcionamiento del equipo con el programa POST.
  2. Se le indica al BIOS que dispositivo de arranque usar (Disco Duro, CD-ROM, floppy, etc.), mediante la interfaz de usuario.
  3. BIOS carga el código del gestor de arranque del MBR (Master Boot Record), localizado en el primer sector del disco duro. El MBR también guarda la tabla de particiones.
  4. El gestor de arranque dentro del MBR puede realizar a su vez dos acciones diferentes:
    1. Examinar la tabla de particiones y localizar la partición que tenga la bandera de arrancable. El gestor de arranque primario llama a un gestor de arranque secundario, localizado en el sector de arranque de esa partición. Este ultimo continua el proceso localizando un kernel de sistema operativo y cargándolo en memoria.
    2. Localizar un Kernel y cargarlo directamente. Este enfoque se saltea el gestor de arranque secundario.

Tradicionalmente, los gestores de arranque de Windows necesitaban estar en el MBR del disco. Los gestores de arranque en Linux soportan estar en el sector de arranque de una partición. Por lo que se aconseja en el caso de tener una maquina con arranque dual, colocar el gestor de arranque de Windows en el MBR del disco y el de Linux en el MBR de la partición.

Este es un resumen muy simplificado del arranque basado en BIOS y MBR. En la practica, esquemas mas complejos son posibles.

Proceso de Arranque con UEFI

El proceso basado en BIOS, fue diseñado en los años 80, cuando el espacio disponible para el BIOS era diminuto comparado con los estándares actuales. Por lo que el proceso de arranque del BIOS necesitaba ser simple, y la complejidad se trasladaba al software dentro del disco.

El firmware UEFI es bastante mas complejo que el antiguo BIOS. En lugar de usar el código que esta en los sectores de arranque de los discos, EFI utiliza gestores de arranque almacenados como archivos en una partición de disco, conocida como ESP (EFI System Partition). En Linux, generalmente el ESP se monta en /boot/efi. Los gestores de arranque residen en archivos con la extensión .efi. Se nombran en subdirectorios con el nombre de la distribución y el nombre del archivo es el nombre del gestor de arranque. Por ejemplo, /boot/efi/EFI/Ubuntu/grub.efi .

Esta configuración permite tener un gestor de arranque diferente para cada sistema operativo que se instala en una computadora. El firmware de EFI incluye un programa propio, llamado boot manager que ayuda a elegir que gestor de arranque se quiere lanzar.

EFI debe ser saber acerca de los gestores de arranque almacenados en el ESP del disco. Normalmente, esto se hace registrando los gestores de arranque con el firmware, esto se puede hacer mediante una utilidad que viene con el firmware o con alguna otra herramienta como efibootmgr (http://linux.die.net/man/8/efibootmgr).

Gestores de Arranque

Los gestores de arranque se ejecutan antes que cualquier sistema operativo sea cargado, aunque normalmente son configurados desde Linux o algún otro sistema operativo.

De alguna u otra manera, el firmware de la computadora lee y carga el código del gestor de arranque. El gestor de arranque, una vez cargado, será responsable de llamar al kernel de Linux. Por lo que una correcta configuración del gestor de arranque es necesaria para poder dar inicio a Linux.

Si bien las instalaciones de las distribuciones proveen métodos automáticos de configuración del gestor, es importante saber como funciona. Ya que en ciertos casos, como en la re-complicación de un kernel, podría ser necesario hacer modificaciones.

Inicio de Linux con init

Una vez que el Kernel pasa a controlar el sistema, se llama al proceso init. Por defecto este programa se encuentra dentro de /sbin/init. Este programa tomara el PID 1 ya que es el primer proceso que se ejecuta en el sistema. En un sistema Linux tradicional, /sbin/init leerá los contenidos del archivo /etc/inittab para determinar que otros programas ejecutar. En sistemas mas modernos que usan otros sistemas de inicio como Upstart o Systemd, init leerá otros archivos de configuración.

Obteniendo información acerca del proceso de arranque

Cierta información acerca del Kernel y sus módulos se registra en el kernel ring buffer. Esta información es la que se muestra en pantalla durante el proceso de arranque, aunque al pasar tan rápido es muy difícil su lectura. Se puede inspeccionar esta información con el comando dmesg.

results matching ""

    No results matching ""