Lathack

Secuencia de arranque en Linux

Sistemas de arranque en Linux

En este apartado veremos en detalle cómo funciona la secuencia de arranque en Linux, con respecto a los componentes y sistemas que este posee antes de iniciarse, a diferencia de otros sistemas operativos. Un conocimiento crucial para quien quiera conocer y manejar este tipo de sistemas operativos.

Componentes del arranque

BIOS o UEFI

El BIOS (Basic Input Output System) se trata de un firmware embebido en la placa madre encargado del hardwre cuando se enciende el ordenador, y un proceso de diagnóstico llamado POST (Power On Self Test).

Las computadoras más nuevas cuentan con UEFI (Unified Extended Firmware Interface), que es un firmware que reemplaza al sistema BIOS.

Las principales diferencias son:

  •  Proporciona una serie de estándares técnicos para una interfaz en lugar de aplicarse a una única implementación de un firmware.

  • Entiende los conceptos de “cargador de arranque”, particiones y sistemas operativos.

  • Es capaz de saltear GRUB y lanzar el kernel directamente (aunque este modo no es recomendado)

  • La configuración (que incluye rutas del sistema de archivos a cargadores y núcleos de sistemas operativos) está almacenada en memoria no volátil.

KERNEL

Como vimos anteriormente, el kernel (o núcleo) del sistema operativo. Se trata de un programa que administra los recursos de hardware y los procesos del sistema.

INITRAMFS

Es una imagen inicial utilizada por el kernel para precargar los módulos de los dispositivos de bloques (tales como IDE, SCSI o RAID) que se necesitan para acceder y montar el sistema de archivos raíz e iniciar el sistema real. Esta operación se realiza en espacio de usuario.

Secuencia de arranque

La secuencia de arranque en Linux refiere a todo el sistema de operaciones, desde que iniciamos el equipo, hasta que inicia el primer proceso del sistema.

Describamos estos procesos:

  1. Cuando iniciamos el equipo, se ejecuta el BIOS o UEFI. Dentro de las opciones de configuración de los mismos, podemos definir los dispositivos físicos de arranque del sistema (Disco rígido, USB, CD-ROM, etc).

  1. El dispositivo utilizado para el arranque debe tener instalado en el primer sector, conocido como MBR (Master Boot Record), el código de arranque, la definición de la tabla de particiones y el código de comprobación.

  1. El código de arranque inicia el bootloader o cargador de arranque (GRUB en Linux), donde podemos elegir a través de un menú, el Sistema Operativo a iniciar.

  1. El sistema UEFI mantiene por compatibilidad el inicio de MBR. En caso de no utilizar el modo de compatibilidad intentará usar una partición GPT (Guid Partition Table) para cargar los archivos de inicio de los distintos sistemas operativos. Estos archivos tienen extensión .EFI. Este sistema puede arrancar directamente su propio bootloader o bien usar GRUB.

  1. Este cargará el kernel. Luego montará (si es que existe) el initramfs. Continuará el inicio para detectar el tipo de CPU, el manejo de memoria, planificador de tareas, entradas y salidas, comunicación interprocesos, y demás sistemas de control. Una vez que el sistema de archivos raíces esté localizado y montado el initramfs le cede el control al gestor del sistema de la máquina.

  1. Llegado este punto se ejecuta el primer proceso llamado init o systemd que es el encargado de iniciar los distintos servicios del sistema, realizar configuraciones y montar unidades entre otras cosas. También va a ser el responsable del apagado del sistema.

Parámetros del kernel

Se pueden pasar parámetros mediante la línea de comandos del cargador de arranque GRUB. De esta manera podemos configurar el comportamiento tanto del kernel como de initramfs.

Cuando aparece la pantalla de GRUB, podemos pasarle parámetros al kernel presionando la tecla “e”. Recordar que hay un periodo de tiempo para hacer esto.

Luego, buscamos la línea correspondiente al kernel, como se ve en el recuadro rojo, y podemos agregar, quitar o editar parámetros.

Sistemas de arranque en Linux

A continuación, mostraremos algunos parámetros que podemos pasarle al kernel durante el proceso de arranque. Estos son fundamentales en la secuencia de arranque en Linux, ya que podemos modificar el inicio del sistema mediante los mismos.

Opciones del kernel

Parámetros

Descripción

debug

Muestra los mensajes de depuración durante el proceso arranque.

quiet

Suprime todos los mensajes durante el arranque, excepto los extremadamente

críticos.

highmem=n

Establece la memoria (highmem) en n bytes. La memoria alta o “highmem” es aquella que no está asignada de manera permanente y utilizada en espacio de usuario. Este parámetro solamente es

importante en plataformas de 32 bits.

mem=n[KMG]

Establece en n[KMG] la cantidad de memoria que usará el Kernel.

initrd=filename

Indica la localización del ramdisk para el arranque del núcleo.

noinitrd

No carga ningún ramdisk inicial.

ro

Monta el dispositivo root como sólo lectura

root=device

Define la ubicación del disco del sistema de archivos raíz root=/dev/{disco}{partición}

rw

Monta el dispositivo root como lectura-escritura

init=filename

El proceso init ejecutará filename en lugar de /sbin/init.

rdinit=full_path_name

Ejecuta el programa especificado por como el proceso init. El archivo debe estar en el ramdisk del Kernel.

S

Ejecuta init en el modo monousuario. Por defecto lo hace en modo multiusuario.

selinux=[0|1]

Activa o desactiva selinux en el arranque

nousb

Deshabilita el subsistema USB.

panic=n

En una situación de Kernel panic, el núcleo no se reiniciará. Con esta opción

se especifica la cantidad de segundos para que el sistema se reinicie.

systemd.unit=target

El proceso padre systemd (o init) ejecutará el target definido ( rescue para single user)

Después de iniciada esta parte, el kernel nos devolverá una serie de mensajes. Los cuales son enviados por la salida estándar. Estos se guardarán en un log del sistema a través del demonio syslogd (el cual se verá más adelante). Puede ver un ejemplo de pasar parámetros al kernel en grub en nuestro artículo del blog.

Mensajes del kernel

Luego de iniciado el GRUB, con o sin parámetros pasados, obtendremos una serie de mensajes por parte del sistema. Los cuales informan lo siguiente:

  • Identificación del Kernel
  • Información de la cpu, la memoria, las particiones y su estado.
  • Información sobre el hardware detectado (mouse, teclado, puertos, discos, etc).
  • Inicialización de la red.
  • Información de los módulos de kernel cargados.

Cabe aclarar, que todo esto se suele mostrar muy rápido. Lo que dificulta la visibilidad del mismo. No obstante, existe una herramienta para monitorizar y ver estos mensajes, este es, el comando dmesg.

Comando dmesg

El comando dmesg (diagnostic message) es una herramienta muy útil para controlar el buffer de mensajes del Kernel.

Opciones:

-T Muestra fecha y hora en formato legible por humanos

-C Borra el buffer (sólo root)

-t No muestra marcas de tiempo

-l [nivel] Nivel de información a mostrar (debug, info, notice, warn, err, crit, alert, emerg)

#dmesg

Sistemas de arranque en Linux

Busquemos en los mensajes aquella línea que mencione al initramfs:

Como podemos notar, es necesario tener permisos elevados (haciendo uso de “sudo”) para poder ejecutar dicho comando en el sistema.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

2 + 20 =

Lathack
Scroll al inicio