Puede iniciar su sistema Linux desde un disco duro o disquete. La sección de instalación de la Guía GNU/Linux: Instalación y Primeros Pasos, se explica cómo instalar el sistema operativo para arrancar de un modo u otro.
Al encender una PC, el BIOS efectúa varias pruebas al hardware para asegurarse de que no existan problemas[24] , y luego empieza realmente el proceso de inicio del sistema operativo. El BIOS selecciona una unidad de disco y lee su primer sector. Típicamente, la unidad de disco seleccionada es la unidad de disquetes (y funciona si existe un disquete insertado booteable), de no ser así selecciona el primer disco duro, si existe un disco en la computadora (de todas maneras el orden de selección de unidad de discos es configurable en la mayoría de las PC's). Al primer sector de un disco se le llama sector de arranque, en inglés boot sector o master boot sector (MBR o sector de arranque maestro). Si el disco contiene varias particiones, cada una de ellas tiene su propio sector de arranque (primer sector de cada partición).
El sector de arranque (boot sector) contiene un pequeño programa lo suficientemente pequeño para que quepa en un único sector, cuya responsabilidad es leer el sistema operativo desde el disco, cargarlo en memoria y ponerlo en ejecución. Cuando se inicia Linux desde un disquete, el sector de arranque contiene un código que solamente lee los primeros cientos de bloques (dependiendo del tamaño del kernel por supuesto) y los coloca en una ubicación predeterminada en la memoria. En un disquete de inicio de Linux no existe un sistema de archivos, el kernel está simplemente almacenado en sectores consecutivos, lo que simplifica el proceso de arranque. Sin embargo es posible también arrancar desde un disquete con un sistema de archivos utilizando LILO, el cargador de Linux.
Al arrancar desde un disco duro, el código contenido en el sector de arranque maestro (MBR o Master Boot Record), examina la tabla de particiones del disco duro (esta tabla también se almacena en el MBR), identifica la partición activa (aquella partición que ha sido designada como de inicio), lee el cargador contenido en el sector de arranque (boot sector) a una localización en memoria y lo ejecuta.
El código almacenado en el sector de arranque de la partición del disco duro hace lo mismo que el contenido en el sector de arranque del diskette: lee el kernel desde la partición del disco duro, lo coloca en memoria e inicia su ejecución. Sin embargo, existen diferencias. No es muy útil mantener una partición exclusiva para almacenar la imagen del kernel, por lo tanto el cargador no se limita a leer de manera secuencial los sectores del disco, como lo hace en el caso de un floppy, sino que en el caso de un disco duro debe encontrar en qué lugar del sistema de archivos ha sido almacenado el kernel. Existen varias maneras de resolver este problema, pero la más común es utilizando LILO (consulte la documentación de LILO si desea conocer mayores detalles de cómo LILO realiza esta tarea).
LILO normalmente lee, coloca en memoria y comienza la ejecución del kernel Linux predeterminado. Es posible configurar LILO para que sea capaz de iniciar una de varias imágenes del kernel diferentes, o de otros sistemas operativos. De esta manera, también es posible que el usuario seleccione con cuál de ellos trabajar al momento de iniciar el sistema. Se puede configurar LILO, para que no inicie la carga del kernel predeterminado de manera inmediata y consulte cuál kernel o sistema operativo debe iniciarse (esta configuración necesita que se mantengan presionadas la teclas de alt, shift, or ctrl cuando LILO comienza su ejecución). Otra opción consiste en configurarlo de manera que siempre consulte desde qué imagen o sistema se va a iniciar, y que transcurrido cierto tiempo de no recibir ninguna indicación, arranque desde el kernel predeterminado.
Con LILO es posible "pasarle" al kernel información a través de argumentos en la línea de comandos (kernel command line argument), tecleando los argumentos después del nombre del kernel o del sistema operativo que se desea utilizar.
Iniciar el sistema desde un disquete o desde un disco duro tienen ventajas diferentes, aunque generalmente iniciar desde el disco duro es mas agradable, ya que evita la incomodidad de lidiar con diskettes. También es más rápido. Sin embargo, en un principio puede ser complejo para algunos usuarios instalar el sistema para que arranque desde un disco duro. Por lo que, a veces se instala de manera que inicie desde un disquete y después cuando el sistema está instalado de manera adecuada y todo funciona correctamente se instala el LILO para arrancar desde el disco duro.
Después de que el kernel ha sido leído del disco, cargado en la memoria y puesto en ejecución, pasa lo siguiente:
Se descomprime el kernel, ya que éste se almacena comprimido, al principio de la imagen del kernel, se encuentra un pequeño programa que se encarga de esta tarea.
Si la máquina cuenta con una tarjeta super VGA que Linux reconoce y soporta modos especiales de texto (tales como 100 columnas por 40 renglones), Linux pregunta cuál es el modo que se desea usar. Al compilar de principio el kernel se puede determinar de antemano que modo de video usar, de manera que Linux nunca pregunte. También se puede determinar mediante la configuración de LILO o por el comando rdev.
Una vez realizado lo anterior, el kernel verifica qué otro hardware existe dentro de la máquina (discos duros, unidades de diskettes, tarjetas de red, adaptadores, etc...), y configura sus controladores de manera apropiada. Conforme lo va haciendo, envía mensajes a la consola acerca de lo que se va encontrando. Por ejemplo, al iniciar una computadora puede verse lo siguiente:
LILO boot:
Loading linux.
Console: colour EGA+ 80x25, 8 virtual consoles
Serial driver version 3.94 with no serial options enabled
tty00 at 0x03f8 (irq = 4) is a 16450
tty01 at 0x02f8 (irq = 3) is a 16450
lp_init: lp1 exists (0), using polling driver
Memory: 7332k/8192k available (300k kernel code, 384k reserved, 176k
data)
Floppy drive(s): fd0 is 1.44M, fd1 is 1.2M
Loopback device init
Warning WD8013 board not found at i/o = 280.
Math coprocessor using irq13 error reporting.
Partition check:
hda: hda1 hda2 hda3
VFS: Mounted root (ext filesystem).
Linux version 0.99.pl9-1 (root@haven) 05/01/93 14:12:20
El idioma y la forma exacta del texto es diferente en cada sistema, en función del hardware instalado, la versión de Linux que se está utilizando y como se ha establecido la configuración del sistema.
A continuación el kernel trata de montar el sistema de archivos raíz (root filesystem, "/"). El punto de montaje se puede determinar al momento de compilar el kernel o después mediante el uso de LILO o del comando rdev. El tipo del sistema de archivos se detecta automáticamente. Si la acción de montar el sistema de archivos raíz falla, por ejemplo debido a que no recordó incluir el controlador del sistema de archivos correspondiente dentro del kernel, el kernel entra en pánico y detiene la actividad del sistema operativo (de todas maneras, no puede hacer más).
El sistema de archivos raíz se monta en modo de sólo lectura, lo anterior se determina al momento de compilar el kernel, lo que permite verificar el estado del sistema de archivos (filesystem check) al momento de ser montado. No es una buena idea verificar la integridad de un sistema de archivos que es montado en modo de lectura/escritura.
El paso siguiente consiste en iniciar la ejecución del
programa init (almacenado en
/sbin/init
) en segundo plano (background). El
programa INIT siempre será el proceso con ID 1. INIT
realiza varias tareas relacionadas con el inicio del sistema. La manera
exacta en que las realiza depende en cómo sea configurado. Puede leer el
Capítulo 9, init para obtener mayor información al respecto. Al
menos, INIT iniciará algunos demonios en segundo plano esenciales.
Acto seguido, init cambia a modo multiusuario y ejecuta un getty (get tty) para las consolas virtuales y la líneas seriales. Getty es el programa que permite a las personas iniciar sesiones (log in) a través de las consolas virtuales y terminales conectadas vía puertos seriales. INIT puede también ejecutar otros programas dependiendo del modo en que esté configurado.
Después de todas las etapas anteriores, el inicio de Linux está completo y el sistema se encuentra activo de manera normal.