Hola a todos! Así que abrimos la siguiente, cuarta fila consecutiva, del curso de
Administrador de Linux , que ocupa con confianza su nicho junto al curso de devopersky. Más
docentes , más información y stands. Bueno, como siempre, más información interesante que los maestros recogieron.
Vamos
¿Alguna vez se ha preguntado qué se necesita para que su sistema esté listo para ejecutar aplicaciones?
Comprender los procesos de carga del kernel e iniciar el sistema Linux es importante para configurar Linux y resolver problemas de inicio. Este artículo proporciona una descripción general del proceso de arranque del kernel utilizando el
gestor de arranque GRUB2 y el inicio
por el sistema de inicialización systemd .
De hecho, hay dos series de eventos necesarios para que una computadora Linux funcione: arranque del núcleo (arranque) y arranque del sistema (arranque). El proceso de arranque del kernel comienza cuando enciende la computadora y termina con el kernel inicializando e iniciando systemd. Después de eso, comienza el proceso de inicio del sistema, y es él quien pone la computadora Linux en condiciones de funcionamiento.

En general, el proceso de cargar el kernel e iniciar el sistema Linux es bastante simple. Consiste en los siguientes pasos, que se describirán con más detalle en las siguientes secciones:
- BIOS POST;
- Carga de grano (GRUB2);
- Inicialización del núcleo;
- Ejecutando systemd, el padre de todos los procesos.
Tenga en cuenta que este artículo trata sobre GRUB2 y systemd, ya que son el cargador de kernel y el programa de inicialización para la mayoría de las distribuciones. Otras opciones se utilizaron anteriormente y, a veces, todavía se pueden encontrar en algunas distribuciones.
Proceso de arranque del kernelEl proceso de arranque del kernel se puede iniciar de varias maneras. En primer lugar, si se apaga la alimentación, al encender la computadora se iniciará el proceso de arranque. En segundo lugar, si un usuario local ya se está ejecutando en la computadora, incluidos el usuario root y el usuario sin privilegios, el usuario puede iniciar mediante programación el proceso de arranque del kernel utilizando la GUI o la línea de comando para reiniciar. El reinicio primero apagará la computadora y solo luego la reiniciará.
POST BIOS
El primer paso en el proceso de arranque del kernel de Linux no tiene nada que ver con Linux. Esta es la parte de hardware del proceso, la misma para todos los sistemas operativos. Cuando se suministra energía a la computadora, lo primero que se inicia es POST (Power On Self Test), que forma parte del BIOS (Sistema básico de E / S, Sistema básico de entrada / salida).
Cuando IBM lanzó su primera computadora personal en 1981, el BIOS fue diseñado para inicializar componentes de hardware. POST es parte del BIOS, cuya tarea es garantizar el correcto funcionamiento de los equipos informáticos. Si la POST falla, entonces la computadora puede estar funcionando mal y el proceso de arranque no continuará.
BIOS POST verifica el rendimiento básico del hardware, y luego causa una
interrupción del BIOS - INT 13H, que encuentra los sectores de arranque del núcleo en todos los dispositivos conectados con la capacidad de arrancar. El primer sector encontrado, que contiene un registro de inicio válido, se carga en la RAM, después de lo cual el control se transfiere al código desde el sector de inicio.
El sector de arranque es solo la primera etapa. La mayoría de las distribuciones de Linux usan una de las tres opciones de gestor de arranque: GRUB, GRUB2 y LILO. GRUB2 es el más nuevo y ahora se usa con mucha más frecuencia que las versiones anteriores.
GRUB2GRUB2 significa "GRand Unified Bootloader, versión 2", y ahora es el gestor de arranque principal para la mayoría de las distribuciones modernas de Linux. GRUB2 es un programa que hace que una computadora sea lo suficientemente inteligente como para que pueda encontrar el núcleo del sistema operativo y cargarlo en la memoria. Dado que hablar y escribir solo GRUB es más fácil que GRUB2, en este artículo probablemente usaré el término GRUB, pero implicaré GRUB2 a menos que se especifique lo contrario.
GRUB es compatible con
la especificación de arranque múltiple , que le permite cargar diferentes versiones de Linux y otros sistemas operativos; También puede iniciar el registro de arranque de sistemas operativos propietarios en una cadena.
GRUB también permite al usuario elegir entre varias posibles descargas de kernel para cualquier distribución de Linux proporcionada. Esto hace posible descargar la versión anterior del núcleo si el actualizado no puede iniciarse correctamente o es incompatible con alguna parte importante del software. GRUB se puede configurar en el archivo
/boot/grub/grub.conf
.
GRUB1 ahora se considera obsoleto y en la mayoría de las distribuciones modernas se reemplaza por GRUB2, que es su versión reescrita. Las distribuciones basadas en Red Hat se actualizaron a GRUB2 alrededor de Fedora 15 y CentOS / RHEL 7. GRUB2 tiene la misma funcionalidad de arranque que GRUB1, pero además proporciona entornos basados en comandos previos al SO de mainframe y más flexibilidad en la etapa previa al arranque. GRUB2 está configurado en
/boot/grub2/grub.cfg
.
La tarea principal de cualquiera de GRUB es cargar el kernel de Linux en la memoria y ejecutarlo. Ambas versiones de GRUB funcionan de manera similar en tres etapas, pero en este artículo usaré GRUB2 para describir cómo funciona GRUB. La configuración de GRUB y GRUB2 y el uso de comandos GRUB2 está fuera del alcance de este artículo.
Aunque oficialmente GRUB2 no usa numeración de pasos, por conveniencia lo usaré en este artículo.
Etapa 1Como ya se mencionó en la sección POST del BIOS, al final de la POST, el BIOS busca los registros de arranque en los discos conectados, generalmente ubicados en el Registro de arranque maestro (MBR), después de lo cual carga el primer registro encontrado en la memoria y comienza a ejecutarlo. El código de arranque, es decir, la primera etapa de GRUB2, ocupa muy poco espacio, ya que debe caber en el primer sector de 512 bytes en el disco duro junto con la tabla de particiones. La cantidad total de espacio asignado para el código de arranque en sí en el
MBR estándar es de 446 bytes. El archivo de 446 bytes para la etapa 1 se llama boot-img y no contiene una tabla de particiones; se agrega al registro de arranque por separado.
Como el registro de arranque debe ser tan pequeño, no es muy "inteligente" y no comprende la estructura del sistema de archivos. Por lo tanto, el único propósito del paso 1 es detectar y cargar el paso 1.5. Para lograr esto, el paso 1.5 de GRUB debe ubicarse en el espacio entre el registro de arranque y la primera partición del disco. Después de cargar la etapa 1.5 GRUB en la RAM, la etapa 1 transfiere el control a la etapa 1.5.
Etapa 1.5Como se señaló anteriormente, el paso 1.5 de GRUB debe estar entre el registro de arranque y la primera partición del disco. Históricamente, este espacio permanece sin usar por razones técnicas. La primera partición en el disco duro comienza en el sector 63, y teniendo en cuenta el MBR en el sector 0, hay 62 sectores de 512 bytes (31744 bytes) en los que puede almacenar el archivo core.img - etapa 1.5 GRUB. El archivo core.img pesa 25389 bytes, que es suficiente espacio para almacenarlo entre el MBR y la primera partición del disco.
Dado que se puede usar más código para el paso 1.5, puede ser suficiente para contener varios controladores de sistema de archivos comunes, como EXT estándar y otros sistemas de archivos Linux, FAT y NTFS. core.img en GRUB2 es más complejo y funcional que en el paso 1.5 de GRUB1. Esto significa que la etapa 2 de GRUB2 puede residir en un sistema de archivos EXT estándar, pero no en un volumen lógico. Por lo tanto, la ubicación estándar para los archivos de la etapa 2 es el sistema de archivos
/boot
, o más bien
/boot/grub2
.
Tenga en cuenta que el directorio / boot debe estar ubicado en el sistema de archivos compatible con GRUB. No todos los sistemas de archivos tienen este soporte. La tarea de la etapa 1.5 es comenzar con los controladores del sistema de archivos necesarios para buscar archivos de la etapa 2 en el sistema de archivos / boot y cargar los controladores necesarios.
Etapa 2Todos los archivos de GRUB Stage 2 se encuentran en el
/boot/grub2
y en varios subdirectorios. GRUB2 no tiene un archivo de imagen como en los pasos 1 y 2. En su lugar, se compone principalmente de módulos de kernel en tiempo de ejecución, que se cargan desde el directorio
/boot/grub2/i386-pc
según sea necesario.
La tarea de GRUB2 etapa 2 es detectar y cargar el kernel de Linux en la RAM y transferir el control del control de la computadora al kernel. El núcleo y sus archivos asociados se encuentran en el directorio
/boot
. Los archivos del núcleo son fáciles de reconocer, ya que sus nombres comienzan con vmlinuz. Puede enumerar el contenido del directorio
/boot
para ver los núcleos actualmente instalados en su sistema.
GRUB2, como GRUB1, admite la carga de uno de varios núcleos de Linux. El sistema de administración de paquetes de Red Hat admite el almacenamiento de múltiples versiones del kernel para que pueda cargar la versión anterior del kernel en caso de problemas con la última. Por defecto, GRUB proporciona un menú precargado de núcleos instalados, incluida la opción de rescate y, después de la configuración, la opción de recuperación.
Etapa 2 GRUB2 carga el kernel seleccionado en la memoria y transfiere el control del control de la computadora al kernel.
El núcleoTodos los núcleos están en un formato comprimido autoextraíble para ahorrar espacio. Los núcleos se encuentran en el directorio
/boot
, junto con la imagen del disco RAM original y una lista de particiones en los discos duros.
Después de que el kernel seleccionado se carga en la memoria y comienza a ejecutarse, en primer lugar, debe extraerse de la versión comprimida del archivo antes de comenzar a hacer un trabajo útil. Una vez que se ha producido la extracción, carga
systemd , que es un reemplazo para el antiguo programa de
inicio SysV , y le transfiere el control.
Este es el final del proceso de arranque del kernel. En este punto, el kernel de Linux y systemd se están ejecutando, pero no pueden realizar tareas útiles para el usuario final, ya que no hay nada más que hacer.
Proceso de inicio del sistemaEl proceso de inicio del sistema sigue el proceso de arranque del kernel y pone en funcionamiento la computadora Linux.
systemdsystemd es el padre de todos los procesos responsables de llevar el host Linux a un estado eficiente. Algunas de sus funciones, más extensas que las presentadas en el antiguo programa de inicialización, deben administrar muchos aspectos del host Linux en ejecución, incluido el montaje del sistema de archivos, el inicio y la administración de los servicios del sistema necesarios para que el host Linux funcione de manera eficiente. Todas las tareas de systemd que no están relacionadas con el proceso de inicio del sistema están fuera del alcance de la discusión en este artículo.
Primero, systemd monta los sistemas de archivos como se define en
/etc/fstab
, incluidos los archivos de intercambio y las particiones. En este punto, puede acceder a los archivos de configuración ubicados en
/etc
, incluido el suyo. Utiliza su propio archivo de configuración
/etc/systemd/system/default.target
para determinar el destino para el que cargar el host. El archivo default.target es solo un enlace simbólico al archivo de destino real. Para una estación de trabajo de escritorio, esto suele ser graphical.target, equivalente al nivel de ejecución 5 en el antiguo inicializador SystemV. Para el servidor, es probable que el valor predeterminado sea multi-user.target, similar al nivel de ejecución 3 en SystemV. emergency.target es similar al modo de usuario único.
Tenga en cuenta que los objetivos y los servicios son unidades systemd.
La Tabla 1 a continuación es una comparación de todos los objetivos systemd con los antiguos niveles de ejecución en SystemV. Los alias de destino de Systemd son proporcionados por systemd para compatibilidad con versiones anteriores. Los alias de destino permiten que los scripts, y muchos administradores de sistemas, incluido yo, utilicen comandos de SystemV como init3 para cambiar los niveles de ejecución. Por supuesto, los comandos de SystemV son dirigidos por systemd para su interpretación y ejecución.
Tabla 1: Comparación de los niveles de control de SystemV con objetivos systemd y algunos alias de objetivos.Cada objetivo tiene un conjunto de dependencias descritas en el archivo de configuración. systemd ejecuta los necesarios. Estas dependencias son los servicios necesarios para ejecutar un host Linux con un cierto nivel de funcionalidad. Cuando se cargan e inician todas las dependencias enumeradas en los archivos de configuración de destino, el sistema funciona en este nivel de destino.
systemd también escanea directorios de inicialización de SystemV obsoletos en busca de archivos de inicio. Si lo están, systemd los usa como archivos de configuración para ejecutar los servicios descritos en los archivos. Un servicio de red desactualizado es un buen ejemplo de uno que todavía usa archivos de inicio de SystemV en Fedora.
La figura 1 a continuación se copia directamente de la
página principal de arranque. Muestra la secuencia general de eventos durante el inicio de systemd y los requisitos básicos para garantizar su éxito.
Los objetivos sysinit.target y basic.target pueden considerarse puntos de control durante el inicio del sistema. Aunque uno de los objetivos de systemd es ejecutar servicios del sistema en paralelo, hay algunos servicios y objetivos funcionales que deben iniciarse antes que otros. Estos puntos de control no se pueden pasar hasta que se completen todos los servicios y objetivos que necesitan.
Por lo tanto, sysinit.target se logra cuando se completan todas las unidades de las que depende. Deben completarse todas las siguientes unidades: montar sistemas de archivos, configurar archivos de intercambio, iniciar udev, configurar el estado inicial del generador de números aleatorios, inicializar servicios de bajo nivel, configurar servicios criptográficos si al menos un sistema de archivos está encriptado. En sysinit.target se pueden ejecutar en paralelo.
sysinit.target ejecuta todos los servicios y unidades de bajo nivel necesarios para la funcionalidad mínima del sistema, y los necesarios para acceder a basic.target.
Figura 1. Mapa de inicio de SystemdDespués de ejecutar sysinit.target, systemd inicia basic.target, comenzando con todas las unidades necesarias para ejecutarlo. El objetivo básico proporciona una funcionalidad adicional al iniciar las unidades necesarias para el próximo objetivo, incluida la configuración de rutas a varios directorios ejecutables, tomas de comunicación y temporizadores.
Finalmente, puede comenzar a inicializar objetivos a nivel de usuario: multi-user.target o graphical.target. Vale la pena señalar que se debe alcanzar el objetivo multiusuario antes de ejecutar las dependencias del objetivo gráfico.
Los objetivos subrayados en la Figura 1 son objetivos de inicio típicos. El inicio del sistema finaliza cuando se alcanza uno de ellos. Si multi-user.target es el objetivo predeterminado, en la consola verá el inicio de sesión en modo texto. Si se especifica graphical.target de manera predeterminada, verá un inicio de sesión gráfico; La GUI de la pantalla de inicio de sesión depende del administrador de pantalla que esté utilizando.
Los problemasRecientemente tuve que cambiar el kernel de arranque predeterminado en una computadora Linux que usaba GRUB2. Encontré que algunos comandos dejaron de funcionar correctamente o los usé de alguna manera incorrecta. Todavía no sé cuál era el problema, llevará más tiempo investigarlo.
El comando grub2-set-default configuró incorrectamente el índice de kernel predeterminado en el
/etc/default/grub
, por lo que no se cargó el kernel alternativo deseado. Cambié manualmente
/etc/default/grub GRUB_DEFAULT=saved
en
GRUB_DEFAULT=2
, donde 2 es el índice del kernel instalado que quería ejecutar. Luego, ejecuté el
grub2-mkconfig > /boot/grub2/grub.cfg
para crear un nuevo archivo de configuración de grub. Este truco funcionó y se lanzó un kernel alternativo.
ConclusionesGRUB2 y el sistema de inicialización systemd son componentes clave para las fases de arranque del sistema y arranque del sistema de la mayoría de las distribuciones modernas de Linux. A pesar de las contradicciones, especialmente en torno a systemd, estos dos componentes funcionan bien juntos para cargar el kernel y ejecutar todos los servicios del sistema necesarios para crear un sistema Linux funcional.
Aunque considero que GRUB2 y systemd en general son más complejos que sus predecesores, no son más difíciles de dominar y administrar. Los manuales contienen mucha información sobre systemd, y en freedesktop.org se presenta la lista completa de sus páginas. Para obtener más información, consulte los siguientes enlaces:
Eso es todo Estamos esperando preguntas y comentarios aquí o pueden hacerse directamente en
una lección abierta .