boot(7) Miscellaneous Information Manual boot(7)

inicio - Proceso de inicio de sistemas basados en la versión 4 de System V de Unix

El proceso de inicio (o "secuencia de arranque) varía según el sistema, pero se puede dividir a grandes rasgos en fases dirigidas por los siguientes componentes:

(1)
hardware
(2)
cargador de inicio del sistema operativo
(3)
núcleo
(4)
Proceso de espacio de usuario administrador (init(8) y inittab(5))
(5)
scripts de inicio

A continuación se describe cada uno de ellos con mayor detalle.

Tras el encendido o el reinicio completo, se asigna el control a un programa almacenado en la memoria de solo lectura (normalmente la PROM); por razones históricas relacionadas con el ordenador personal, este programa suele denominarse BIOS.

Este programa normalmente realiza una autocomprobación básica del equipo y accede a la memoria no volátil para leer más parámetros. Esta memoria del PC es una memoria CMOS con respaldo de batería, por lo que la mayoría de la gente la conoce como CMOS. Fuera del mundo informático, se suele denominar 'NVRAM'(RAM no volátil).

Los parámetros almacenados en la NVRAM varían según el sistema, pero como mínimo, deberían especificar qué dispositivo puede suministrar un cargador del SO, o al menos qué dispositivos pueden ser sondeados para conseguir uno; dicho dispositivo se conoce como 'dispositivo de inicio'.La etapa de arranque del hardware carga el cargador del SO desde una posición fija en el dispositivo de arranque y luego le transfiere el control.

El dispositivo desde el que se cargará el sistema operativo puede estar acoplado al equipo a través de una red, en cuyo caso los detalles para el inicio se darán mediante protocolos como DHCP, TFTP, PXE, Etherboot, etc...

La principal tarea del cargador de inicio es localizar el núcleo, cargarlo y ejecutarlo. La mayoría de cargadores de inicio permiten un uso interactivo, para poder especificar un núcleo alternativo (posiblemente una copia de seguridad en caso de que el último núcleo compilado no funcione) y para pasar parámetros opcionales al núcleo.

En un PC tradicional, el cargador del SO se encuentra en el bloque inicial de 512 bytes del dispositivo de arranque; este bloque se conoce como 'MBR' (Registro Maestro de Arranque).

En la mayoría de los sistemas, este cargador de inicio está limitado en base a varias restricciones. Incluso en sistemas que no son PC hay algunas limitaciones al tamaño y complejidad del cargador, así que, la limitación de tamaño del MBR en los PC (512 bytes incluyendo la tabla de particiones) hace casi imposible introducir un cargador de inicio completo dentro de él.

La mayoría de sistemas operativos dividen la tarea de iniciarse entre un cargador de inicio primario y otro secundario; éste último puede estar localizado dentro dentro de otra partición mayor de almacenamiento permanente como por ejemplo una partición de disco.

En linux, el cargador de inicio suele ser grub(8) (una alternativa a lilo(8).

Cuando se carga el núcleo, inicializa varios componentes del ordenador y del sistema operativo; cada parte del software responsable de dicha tarea suele considerarse un 'driver' para el componente correspondiente. El núcleo inicia el intercambiador de memoria virtual (un proceso del núcleo, llamado 'kswapd' en un núcleo Linux moderno) y monta un sistema de archivos desde la ruta raíz: /.

Algunos de los parámetros que se le pueden pasar al núcleo están relacionados con estas actividades (p.e: puede sobreescribir el sistema de archivos raíz por defecto). Para más información sobre los parámetros del núcleo Linux consulte bootparam(7).

Después de esto, el núcleo creará el primer proceso en espacio de usuario al que asigna como número de PID (ID de proceso) el número 1. Tradicionalmente, este proceso ejecuta el programa /sbin/init, pasándole cualquier parámetro que no haya podido ser manejado por el núcleo.

La siguiente descripción es de aplicación en sistemas operativos basados en la versión 4 de System V de UNIX. Muchos sistemas ampliamente utiizados adoptaron un sistema relacionado pero con una base diferente conocido como systemd(1) en el cual el proceso de inicio se describe en su bootup(7) asociado.

Cuando se inicia /sbin/init, éste lee /etc/inittab en busca de instrucciones. En este archivo se define qué debe ejecutarse según el nivel de ejecución permitiendo al administrador del sistema definir el entorno para ciertos usos de forma sencilla. Cada nivel de ejecución está asociado a un conjunto de servicios. Por ejemplo: el nivel de ejecución S es el modo monousuario y el nivel de ejecución 2 implica la ejecución de la mayoría de servicios de red.

El administrador puede modificar el nivel de ejecución actual mediante init(1) y ver el que está actualmente en ejecución con runlevel(8).

Sin embargo, puesto que no es conveniente gestionar los servicios individuales editando directamente este archivo, /etc/inittab solamente lanza un conjunto de scripts que son los que realmente arrancan/paran los servicios individuales.

La siguiente descripción se aplica a los sistemas basados en la versión de Unix System V. Sin embargo, algunos sistemas ampliamente usados (Slackware Linux, FreeBSD, OpenBSD) tienen una estructura para los scripts de inicio algo diferente.

Para cada servicio gestionado (mail, nfs server, cron, etc.) hay un único script de inicialización ubicado en un directorio específico (/etc/init.d en la mayoría de versiones de Linux). Cada uno de estos scripts acepta como único argumento la palabra 'start' (haciendo que se inicie el servicio) y la palabra 'stop' (hace que se detenga). También podrán aceptar otros argumentos a conveniencia como por ejemplo 'restart' que hace que se detenga y se vuelva a iniciar, 'status' que muestra el estado en que se encuentra el servicio, etc... Si se ejecuta sin ningún argumento, se listan todas las posibilidades que ofrece.

Para que scripts específicos se inicien o detengan en niveles de ejecución específicos y en un orden específico, existen directorios secuenciales, normalmente con el formato /etc/rc[0-6S].d. En cada uno de estos directorios, hay enlaces (normalmente simbólicos) a los scripts en el directorio /etc/init.d.

Un script principal (normalmente /etc/rc) es invocado desde inittab(5); este script principal llama al script de cada servicio mediante un enlace en el directorio de secuenciación correspondiente. Cada enlace cuyo nombre comience con 'S' se llama con el argumento 'start' (iniciando así el servicio). Cada enlace cuyo nombre comienza con 'K' se llama con el argumento 'stop' (deteniendo así el servicio).

Para establecer el orden de inico o parada dentro de un mismo nivel de ejecución, los nombres de los enlaces contienen números de orden. Además, para hacer los nombres más claros, éstos terminan habitualmente con el nombre del servicio al que se refieren. Ejemplo: el enlace /etc/rc2.d/S80sendmail lanza el servicio sendmail en el nivel de ejecución 2. Esto ocurriría después de ejecutar /etc/rc2.d/S12syslog pero antes de ejecutar /etc/rc2.d/S90xfs.

Para gestionar el orden de inicio y los niveles de ejecución, tenemos que manejar estos enlaces. En muchos sistemas, existen herramientas para facilitaresta tarea (p.ej: chkconfig(8)).

Un programa que proporciona un servicio suele denominarse "demonio". Normalmente, un demonio puede recibir varias opciones y parámetros desde la línea de órdenes. Para que el administrador del sistema pueda modificar estas entradas sin editar todo el script de arranque, se utiliza un archivo de configuración independiente, ubicado en un directorio específico donde un script de arranque asociado puede encontrarlo (/etc/sysconfig en sistemas Red Hat antiguos).

En sistemas UNIX antiguos, este archivo contenía las opciones de la línea de órdenes para un daemon, pero en los sistemas Linux modernos (y también en HP-UX), solo contiene variables de shell. Un script de arranque en /etc/init.d lee e incluye su archivo de configuración (es decir, "sources" su archivo de configuración) y luego utiliza los valores de las variables.

/etc/init.d/, /etc/rc[S0-6].d/, /etc/sysconfig/

init(1), systemd(1), inittab(5), bootparam(7), bootup(7), runlevel(8), shutdown(8)

La traducción al español de esta página del manual fue creada por Miguel Pérez Ibars <mpi79470@alu.um.es> y Marcos Fouces <marcos@debian.org>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.

17 Mayo 2025 Páginas de Manual de Linux 6.15