sábado, 3 de octubre de 2020

El proceso de arranque (Boot Process) de una computadora con kernel Linux.

Hola amigos del software libre,

En este artículo os mostraré todos los pasos del proceso que realiza cualquier distribución del Sistema Operativo GNU/Linux para arrancar.

El proceso de arranque (Boot Process) de Linux es el procedimiento para inicializar el sistema. Consiste en todo lo que sucede desde que se enciende la computadora por primera vez hasta que la interfaz de usuario está completamente operativa. Tener una buena comprensión de los pasos del proceso de arranque puede ayudaros a solucionar problemas, así como a adaptar el rendimiento de la computadora a vuestras necesidades.

En la siguiente imagen os muestro un esquema del proceso:


BIOS - El primer paso:

Iniciar un sistema Linux basado en x86 (también conocido como x86_64 y AMD64 es la versión de 64 bits del conjunto de instrucciones de los microprocesadores compatibles con el CPU Intel 8086) implica una serie de pasos.
Cuando la computadora está encendida, la BIOS (Basic Input/Output System) en castellano sistema básico de entrada / salida inicializa el hardware, incluida la pantalla y el teclado, y prueba la memoria principal. Este proceso también se denomina POST (Power On Self Test) en castellano Autoprueba de encendido.
El software BIOS se almacena en un chip ROM en la placa base. Después de esto, el resto del proceso de arranque lo controla el sistema operativo (SO).


Master Boot Record (MBR) y Boot Loader (Cargador de arranque)

Una vez que se completa la POST, el control del sistema pasa del BIOS al cargador de arranque (Boot Loader). El cargador de arranque generalmente se almacena en uno de los discos duros del sistema, ya sea en el sector de arranque (para sistemas BIOS / MBR tradicionales) o en la partición EFI (para sistemas de Interfaz de Firmware Extensible o UEFI para sistemas de Interfaz de Firmware Extensible Unificados más recientes).

Hasta esta etapa, la máquina no accede a ningún medio de almacenamiento masivo. A partir de entonces, la información sobre la fecha, la hora y los periféricos más importantes se cargan a partir de los valores CMOS (Es una tecnología utilizada para el almacenamiento de memoria mediante batería que permite al sistema realizar un seguimiento de la fecha y la hora incluso cuando está apagado). Existen varios cargadores de arranque para Linux; los más comunes son GRUB (GRand Unified Boot loader), ISOLINUX (para arrancar desde medios extraíbles) y DAS U-Boot (para arrancar en dispositivos o dispositivos integrados).
La mayoría de los cargadores de arranque de Linux pueden presentar una interfaz de usuario para elegir opciones alternativas para arrancar Linux e incluso otros sistemas operativos que puedan estar instalados.
Al arrancar Linux, el cargador de arranque es responsable de cargar la imagen del kernel y el disco RAM inicial (initramfs) en memoria, el disco RAM inicial contiene algunos archivos críticos y controladores de dispositivos necesarios para iniciar el sistema.

El disco RAM inicial (initramfs) por sus siglas en inglés, es un sistema de ficheros temporal usado por el núcleo Linux durante el inicio del sistema. Es usado típicamente para hacer los arreglos necesarios antes de que el sistema de ficheros raíz pueda ser montado.


El Boot Loader (Cargador de Aranque)

El cargador de arranque (Boot Loader), llamado a veces también Boot Manager (Gestor de Arranque) tiene dos etapas distintas:

Para los sistemas que utilizan el método BIOS / MBR, el cargador de arranque reside en el primer sector del disco duro, también conocido como Master Boot Record (MBR). El tamaño del MBR es de solo 512 bytes.
En esta etapa, el cargador de arranque examina la tabla de particiones y encuentra una partición de arranque. Una vez que encuentra una partición de arranque, busca el cargador de arranque de la segunda etapa, por ejemplo GRUB, y lo carga en la RAM (memoria de acceso aleatorio).

Para los sistemas que utilizan el método EFI / UEFI, el firmware UEFI lee sus datos de Boot Manager para determinar qué aplicación UEFI se iniciará y desde dónde (es decir, desde qué disco y partición se encuentra la partición EFI).
Luego, el firmware inicia la aplicación UEFI, por ejemplo el gestor de arranque GRUB, como se define en la entrada de inicio en el administrador del firmware. Este procedimiento es más complicado, pero más versátil que los métodos MBR más antiguos.

El cargador de arranque de la segunda etapa reside en el directorio /boot. Inmediatamente después se muestra una pantalla de bienvenida, que nos permite elegir qué sistema operativo (SO) arrancar.

Después de elegir el sistema operativo, el cargador de arranque carga el kernel del sistema operativo seleccionado en la RAM y le pasa el control.
Los kernels casi siempre están comprimidos, por lo que su primer trabajo es descomprimirse. Después de esto, verificará y analizará el hardware del sistema e inicializará los controladores de dispositivos de hardware integrados en el kernel.


El Kernel Linux

El cargador de arranque carga tanto el kernel como un sistema de archivos inicial basado en RAM (initramfs) en la memoria, por lo que puede ser utilizado directamente por el kernel. Cuando el kernel se carga en la RAM, inmediatamente se inicializa y configura la memoria de la computadora y también configura todo el hardware conectado al sistema. Esto incluye todos los procesadores, subsistemas de E / S, dispositivos de almacenamiento, etc. El kernel también carga algunas aplicaciones de espacio de usuario necesarias.



Initial RAM Disk (Initramfs) (Disco RAM Inicial)

La imagen del sistema de archivos initramfs contiene programas y archivos binarios que realizan todas las acciones necesarias para montar el sistema de archivos raíz adecuado, como proporcionar funcionalidad del kernel para el sistema de archivos necesario y controladores de dispositivos para los dispositivos de almacenamiento masivo con una función llamada udev (para el dispositivo del usuario), que es responsable para averiguar qué dispositivos están presentes, localizar los controladores de dispositivos que necesitan para funcionar correctamente y cargarlos.

Una vez que se ha encontrado el sistema de archivos raíz, se comprueba si hay errores y se monta. El programa de montaje le indica al sistema operativo que un sistema de archivos está listo para su uso y lo asocia con un punto particular en la jerarquía general del sistema de archivos (el punto de montaje).

Si tiene éxito, initramfs se borra de la RAM y se ejecuta el programa init en el sistema de archivos raíz (/sbin/init). init maneja el montaje y pivotando hacia el sistema de archivos raíz real final. Si se necesitan controladores de hardware especiales antes de poder acceder al almacenamiento masivo, deben estar en la imagen initramfs.


/sbin/init y Servicios

Una vez que el kernel ha configurado todo su hardware y montado el sistema de archivos raíz, el kernel ejecuta /sbin/init. Esto luego se convierte en el proceso inicial, que inicia otros procesos para que el sistema funcione.

La mayoría de los demás procesos del sistema rastrean su origen en última instancia hasta init; las excepciones incluyen los denominados procesos del núcleo. Estos los inicia el kernel directamente y su trabajo es administrar los detalles internos del sistema operativo. Además de iniciar el sistema, init es responsable de mantener el sistema en funcionamiento y de apagarlo limpiamente.

Una de sus responsabilidades es actuar cuando sea necesario como administrador de todos los procesos que no son del kernel; limpia después de que finalizan y reinicia los servicios de inicio de sesión de usuario según sea necesario cuando los usuarios inician y cierran sesión, y hace lo mismo con otros servicios del sistema en segundo plano.

Tradicionalmente, el inicio de este proceso se realizaba utilizando convenciones que se remontan a la década de 1980 y la variedad System V de UNIX. Este proceso en serie hace que el sistema pase a través de una secuencia de niveles de ejecución que contienen colecciones de scripts que inician y detienen servicios. Cada nivel de ejecución admite un modo diferente de ejecutar el sistema. Dentro de cada nivel de ejecución, los servicios individuales se pueden configurar para que se ejecuten o para que se apaguen si se ejecutan. Sin embargo, todas las principales distribuciones recientes se han alejado de este método secuencial de nivel de ejecución de inicialización del sistema, aunque por lo general son compatibles con las convenciones de System V por motivos de compatibilidad. A continuación, hablaremos de los métodos más nuevos, systemd y Upstart.


Text-Mode Login (Inicio de sesión en modo texto)

Cerca del final del proceso de arranque, init inicia una serie de mensajes de inicio de sesión en modo texto. Estos le permiten escribir su nombre de usuario, seguido de su contraseña, y eventualmente obtener un shell (intérprete) de comandos. Sin embargo, si estás ejecutando un sistema con una interfaz gráfica de inicio de sesión, no los verás al principio.

Se puede acceder a las terminales que ejecutan los shells de comandos usando la tecla ALT más una tecla de función. La mayoría de las distribuciones comienzan con seis terminales de texto y un terminal gráfico que comienza con F1 o F2.

Dentro de un entorno gráfico, cambiar a una consola de texto requiere presionar CTRL-ALT + la tecla de función apropiada (con F7 o F1 se vuelve a la GUI).

Por lo general, el shell de comandos predeterminado es bash (GNU Bourne Again Shell), pero hay varios otros shells de comandos avanzados disponibles. El shell imprime un mensaje de texto que indica que está listo para aceptar comandos; después de que el usuario escribe el comando y presiona Enter, el comando se ejecuta y se muestra otro mensaje después de que se realiza el comando.


X Window System (Sistema de Ventanas X)

El sistema X Window se carga como uno de los pasos finales en el proceso de arranque. A menudo se le llama simplemente X. Un servicio llamado Display Manager realiza un seguimiento de las pantallas que se proporcionan y carga el servidor X (así llamado, porque proporciona servicios gráficos a aplicaciones, a veces llamadas clientes X).
El administrador de pantalla (Display Manager) también maneja los inicios de sesión gráficos e inicia el entorno de escritorio apropiado después de que un usuario inicia sesión. X es un software bastante antiguo; se remonta a mediados de la década de 1980 y, como tal, tiene ciertas deficiencias en los sistemas modernos (por ejemplo, con la seguridad), ya que se ha extendido bastante lejos de sus propósitos originales. Un sistema más nuevo, conocido como Wayland, lo está reemplazando gradualmente y es el sistema de visualización predeterminado para Fedora, RHEL 8 y otras distribuciones recientes. En su mayor parte, el usuario lo ve como X, aunque bajo el capó es bastante diferente.

A grandes rasgos este es el famoso proceso de booteo de un Sistema Operativo GNU/Linux. Evidentemente hay mas manteca, pero os podéis hacer una buena idea.

Espero que os sirva.

Saludos.


2 comentarios:

Gracias por participar en este blog.