Capítulo 3. La inicialización del sistema

Tabla de contenidos

3.1. Un resumen del proceso de arranque
3.1.1. Fase 1: la BIOS
3.1.2. Fase 2: el cargador de arranque
3.1.3. Fase 3: el sistema mini-Debian
3.1.4. Fase 4: el sistema normal Debian
3.2. init estilo Sys V
3.2.1. El significado de los niveles de ejecución
3.2.2. La configuración de los niveles de ejecución
3.2.3. Ejemplo de gestión de niveles de ejecución
3.2.4. El parámetro por defecto para cada archivo de órdenes init
3.2.5. El nombre del equipo (hostname)
3.2.6. El sistema de archivos
3.2.7. Inicialización del interfaz de red
3.2.8. Inicialización del servicio de red
3.2.9. El sistema de mensajes
3.2.10. Los mensajes del núcleo
3.3. El sistema udev
3.3.1. La inicialización del módulo del núcleo

Es inteligente por su parte como administrador de sistemas conocer profundamente como el sistema Debian comienza y se configura. Aunque los detalles concretos están en el código fuente de los paquetes instalados y su documentación, es un poco abrumador para la mayoría de nosotros.

Hice lo mejor que pude para proporcionar un resumen de los puntos principales del sistema Debian y su configuración en base al conocimiento actual y previo mio y de muchos otros. Ya que el sistema Debian es un elemento en movimiento, la situación del sistema puede haber cambiado. Antes de realizar cualquier cambio en el sistema, debería consultar la documentación actual de cada paquete.

[Aviso] Aviso

Este capítulo esta desactualizado ya que esta fundamentado en Debian 7.0 (Wheezy) publicado en 2013.

Un sistema de ordenador pasa por diferentes fases en el proceso de arranque desde el encendido hasta que le ofrece al usuario la funcionalidad completa del sistema operativo (SO).

Por simplicidad, limité la discusión a la de una típica plataforma PC con la instalación por defecto.

El proceso normal de arranque es como un cohete de cuatro fases. Cada fase del cohete cede el control del sistema a la siguiente.

Desde luego, esto puede ser configurado de otra manera. Por ejemplo, si compila su propio núcleo, puede saltar el paso del sistema mini-Debian. Así que, por favor, no asuma cuál es el caso de su sistema hasta que no lo compruebe por si mismo.

[Nota] Nota

Para plataformas de PC no estándar como sistemas SUN o Macintosh, la BIOS en ROM y la partición en el disco puede ser bastante diferentes (Sección 9.5.2, “Configuración del particionado de disco”). Por favor busque la documentación específica de su plataforma para cada caso en el lugar correspondiente.

La BIOS es la primera fase del proceso de arranque que comienza con hecho del encendido. La BIOS que reside en la memoria de solo lectura (ROM) se ejecuta desde una dirección de memoria específica con la que es inicializada el contador del programa por el hecho del encendido.

La BIOS realiza la inicialización básica del «hardware« (POST: encendido y autocomprobación (power on self test)) y pasa el control del sistema al siguiente paso. La BIOS es normalmente proporcionado con el «hardware«.

La pantalla de inicio de la BIOS normalmente muestra que tecla(s) pulsar para entrar en la configuración de la BIOS para cambiar su comportamiento. Las teclas normalmente utilizadas son F1, F2, F10, Esc, Ins, and Del. Si la pantalla de inicio de la BIOS está oculta por alguna otra pantalla, puede pulsar algunas teclas como Esc para inhabilitarla. Estas teclas tienen una gran dependencia del «hardware«.

La ubicación del «hardware« y la prioridad del código de comienzo de la BIOS se pueden seleccionar desde la pantalla de configuración del BIOS. Por lo general, los primeros sectores del primer dispositivo seleccionado (disco duro, disquete, CD-ROM,...) se cargan en la memoria y se ejecuta dicho código inicial. Este código inicial puede ser cualquiera de los siguientes:

  • El código del cargador de arranque

  • El código del núcleo del escalón del SO como FreeDOS

  • El código del núcleo del SO objetivo si encaja en su pequeño espacio

Normalmente, el sistema se inicia desde una partición especifica del disco duro primario. En los PC estándar, los dos primeros sectores del disco duro contienen el registro maestro de arranque (master boot record , MBR). La información de la partición del disco incluye la selección de arranque que es guardada al final del MBR. El código de arranque que primero se ejecuta después de la BIOS es el que ocupa el resto del MBR.

El cargador de arranque es la segunda fase del proceso de arranque que comienza con la BIOS. Carga la imagen del núcleo del sistema y la imagen de initrd en memoria y pasa el control a estos. La imagen de initrd es la imagen del sistema de archivos raíz y su compatibilidad depende del cargador usado.

Habitualemente el sistema Debian usa el núcleo de Linux como núcleo del sistema por defecto. La imagen initrd del núcleo de Linux actual 2.6/3.x es técnicamente la imagen initramfs (sistema de archivos inicial RAM). La imagen initramfs es un repositorio de archivos cpio comprimidos con gzip del sistema de archivos raíz.

[Aviso] Aviso

Lo anterior no es verdad más desde los nuevos initramfs multisegmento. Consulte Bug #790100.

La instalación por defecto del sistema Debian ubica el la primera fase el código del cargador de arranque GRUB en el MBR para la plataforma PC. Existen muchos cargadores de arranque y opciones de configuración disponibles.


[Aviso] Aviso

No pruebe con cargadores de inicio sin tener un medio de inicio de rescate (CD o disquete) creado de las imagesnes del paquete grub-rescue-pc. Con ello se permite el inicio de su sistema incluso sin un cargador de inicio operativo en el disco duro.

En GRUD heredado, el archivo del menú de configuración está ubicado en /boot/grub/menu.lst». Por ejemplo, podría tener las siguientes entradas:

title           Debian GNU/Linux
root            (hd0,2)
kernel          /vmlinuz root=/dev/hda3 ro
initrd          /initrd.img

En GRUB 2, el archivo del menú de configuración está ubicado en «/boot/grub/grub.cfg». Se genera automáticamente por «/usr/sbin/update-grub» usando las plantillas de «/etc/grub.d/*» y configuraciones de «/etc/default/grub». Por ejemplo, puede tener el contenido siguiente:

menuentry «Debian GNU/Linux« {
        set root=(hd0,3)
        linux /vmlinuz root=/dev/hda3
        initrd /initrd.img
}

Para estos ejemplos, los parámetros de GRUB tienen el siguiente significado:


[Nota] Nota

El valor del número de la partición que utiliza el programa GRUB heredado es uno menos que utilizado por el núcleo de Linux y las herramientas de uso común. El programa GRUB 2 soluciona este problema.

[Sugerencia] Sugerencia

UUID (consulte Sección 9.5.3, “Acceso al particionado utilizando UUID”) puede ser utilizado para identificar un dispositivo especial de bloque en vez del nombre del archivo como «/dev/hda3», p. ej. «root=UUID=81b289d5-4341-4003-9602-e254a17ac232 ro».

[Sugerencia] Sugerencia

Si se utiliza GRUB, el parámetro del núcleo de inicio esta asignado en /boot/grub/grub.cfg. En el sistema Debian no se debe modificar directamente /boot/grub/grub.cfg. Debe editar el valor de GRUB_CMDLINE_LINUX_DEFAULT en /etc/default/grub y ejecutar update-grub(8) para actualizar /boot/grub/grub.cfg.

[Sugerencia] Sugerencia

Puede iniciar un cargador de arranque desde otro cargados de arranque mediante la técnica llamada chain loading.

Consulte «info grub» y grub-install(8).

El sistema mini-Debian es la fase 3 del proceso de arranque que comienza con el cargador de arranque. Este ejecuta el núcleo del sistema con el sistema de archivos raíz en memoria. Esta es una fase preparatoria opcional del proceso de arranque.

[Nota] Nota

En este documento el término «el sistema mini-Debian« es como el autor describe la tercera fase del proceso de arranque. El sistema es conocido como initrd o sistema initramfs. El instalador de Debian usa un sistema parecido en memoria.

El primer archivo de órdenes que se ejecuta en el sistema de archivo raíz en memoria es «/init». Es un archivo de órdenes el es que inica el núcleo en el espacio de usuario y toma el control para la próxima fase. Este sistema mini-Debian ofrece flexibilidaddir módulo al proceso de arranque, como añas al núcleo antes de que el proceso principal de arranque o montar un sistema de archivos raíz cifrado.

Puede interrumpir esta parte del proceso de arranque para obtener un intérprete de órdenes de supuerusuario dandole al arranque del núcleo el parámetro «break=init» etc. Consulte el archivo de órdenes /init» para conocer más formas de interacción. Este entorno del intérprete de órdenes es suficientemente complejo para realizar una reconocimiento avanzado del «hardware« de su equipo.

Las órdenes disponibles en este sistema mini-Debian son básicas y las funciones principales las aporta la herramienta GNU llamada busybox(1).

[Atención] Atención

Necesita utilizar el parámetro «-n» en la órden mount cuando interaccione con el sistema de solo lectura del sistema de archivos raíz.

El sistema normal Debian es la cuarta fase del proceso de arranque el cual comienza con el sistema mini-Debian. El núcleo del sistema para el sistema mini-Debian continua ejecutandose en este entorno. El sistema de archivos raíz cambio del que existe en memoria a uno real sobre el sistema de archivos en disco duro.

El programa init es ejecutado en primer lugar con el PID=1 preparando el proceso de arranque principal para el cominezo de muchos programas. La ruta de archivo por defecto para el programa init es «/sbin/init» pero puede ser modificado por un párametro de arranque del núcleo como «init=/path/to/init_program».

El programa de inicio por defecto ha sido cambiado:

  • Antes de la versión squeeze de Debian utiliza el sencillo estilo SysV init.

  • La versión de Debian wheezy mejora el estilo SysV de init ordenando la secuencia de arranque con la cabecera LSB e inicia los archivos de órdenes de inicio en paralelo.

  • Debian jessie cambia su «init« por defecto a systemd para una inicialización en paralelo basada en eventos.

[Sugerencia] Sugerencia

Todos los mecanismos son compatibles a través de los archivos de órdenes «/etc/init.d/rc», «/etc/init.d/rcS», «/usr/sbin/update-rc.d» y «/usr/sbin/invoke-rc.d».

[Sugerencia] Sugerencia

Puede comprobar cual es el sistema init real que usa su equipo mediante la órden «ps --pid 1 -f».


[Sugerencia] Sugerencia

Consulte la wiki de Debian : AcelerandoElProcesodeArranque para los consejos actualizados para mejorar la velocidad del proceso de arranque.

[Atención] Atención

El sistema Debian actual por defecto no usa el init estilo SysV. Por fabor lea otras fuentes sobre el init modernos basados en systemd. Consulte El manual del administrador de Debian

Esta sección describe como el antiguo init del estilo SysV usa el sistema de arranque. Su sistema Debian no funciona exactamente así pero es bastante instructivo para ofrecer el conocimiento básico de la nuevas tendencias en sistemas init que ofrecen funcionalidades similares.

El proceso de arranque del estilo Sys-V en esencia pasa por lo siguiente:

  1. El sistema Debian pasa al nivel de ejecución N (nadie) para iniciar el sistema siguiendo la descripción de «/etc/inittab».

  2. El sistema Debian pasa al nivel de ejecución S para iniciar el sistema en modo monousuario para completar la inicialización del «hardware« etc.

  3. El sistema Debian pasa a uno de los niveles de arranque multiusuario (2 a 5) para comenzar los servicios del sistema.

El nivel de ejecución inicial para el modo multiusuario es determinado por el parámetro de arranque del núcleo init= o en la línea «initdefault« de /etc/inittab». El sistema Debian según se instala comienza en el nivel de ejecución 2.

Todos los archivos de órdenes ejecutados realmente por el sistema init están ubicados en el directorio «/etc/init.d/».

Para una descripción detallada consulte init(8), inittab(5) y «/usr/share/doc/sysv-rc/README.runlevels.gz».

Cuando las órdenes init(8) o telinit(8) pasan al nivel de ejecución a «<n>«, el sistema principalmente ejecuta los archivos de órdenes de inicialización como sigue:

  1. Los nombres de los archivos de órdenes que comienzan con una «K» en «/etc/rc<n>.d/» son ejecutados en orden alfabético con un único parámetro «stop». (servicios finalizados)

  2. Los nombres de los archivos de órdenes que comienzan con una «S» en «/etc/rc<n>.d/» son ejecutados en órden alfabético con el único parámetro «start». (servicio inicializado)

Por ejemplo, si tiene los enlaces «S10sysklogd» y «S20exim4» en el directorio del nivel de ejecución, «S10sysklogd» que es un enlace simbólico a «../init.d/sysklogd» se ejecutará antes «S20exim4» que es un enlace simbólico a «../init.d/exim4».

El sistema sencillo de inicialización secuencial es un sistema de inicio según el estilo clásico de System V y fue usado por Debian hasta el sistema lenny.

El último sistema Debian, en su lugar, esta optimizado para la ejecución de los archivos de órdenes de inicialización de forma concurrente.

[Aviso] Aviso

No es recomendable realizar cambios en los enlaces simbóicos en «/etc/rcS.d/» a menos que tenga más conocimientos que el desarrollador.

Por ejemplo, instalemos el sistema del nivel de ejecución similar al de Red Hat Linux como se muestra.

  • init inicia el sistema por defecto en el nivel de ejecución (runlevel=3).

  • init no inicia gdm3(1) en los niveles de ejecución 0,1,2,6.

  • init lanza gdm3(1) en los niveles de ejecución 3,4 y 5.

Se puede modificar el archivo «/etc/inittab» para cambiar el nivel de ejecución por defecto y usar herramientas de gestión de niveles de ejecución fáciles de usar como sysv-rc-conf o bum para editar los niveles de ejecución. Si va a usar la línea de órdenes en su lugar, le mostramos como hacerlo (después de una instalación por defecto del paquete gdm3 y selecccionarlo como gestor de inicio).

# cd /etc/rc2.d ; mv S21gdm3 K21gdm3
# cd /etc ; perl -i -p -e 's/^id:.:/id:3:/' inittab

Tenga en cuenta que el archivo «/etc/X11/default-display-manager» es comprobado cuando comienzan los demonios de los gestores de inicio : xdm, gdm3, sddm y wdm.

[Nota] Nota

Todavía puede iniciar X desde el intérprete de órdenes de la consola con la órden startx(1).

El parámetro por defecto para cada archivo de órdenes init en «/etc/init.d/» lo proporciona el archivo correspondiente en «/etc/default/» el cual contiene únicamente las asignaciones de las variables de entorno. El nombre del directorio elegido es especifico del sistema Debian. Su equivalente aproximado en Red Hat Linux y otras distribuciones es el directorio «/etc/sysconfig». Por ejemplo, «/etc/default/cron» puede ser usado para controlar el funcionamiento de «/etc/init.d/cron».

El archivo «/etc/default/rcS» puede ser usado para personalizar por defecto el inicio de motd(5), sulogin(8), etc.

Si no puede configurar el comportamiento que desea cambiando esas variables puede puede cambiar los mismisimos archivos de órdenes de init. Estos son archivos de configuración modificables por el administrador de sistemas.

Muchos servicios de red (see Capítulo 6, Aplicaciones de red) son iniciados en el modo multiusuario directamente como un proceso de demonio en tiempo de arranque por los archivos de órdenes de init, p. ej., «/etc/rc2.d/S20exim4» (para el nivel de ejecución 2) el cual es un enlace simbólico a «/etc/init.d/exim4».

Algunos servicios de red pueden ser iniciados bajo demanda usando el super servidor inetd (o sus equivalente). Inetd se inicia en tiempo de arranque por «/etc/rc2.d/S20inetd» (para el nivel de ejecución 2) el cual es un enlace simbólico a «/etc/init.d/inetd». Fundamentalmente, inetd permite a un demonio llamar a otros, reduciendo la carga del sistema.

Cuando quiera que llegue una petición para el servicio al super servidor inetd , su protocolo y servicio son identificados buscándolos en la base de datos «/etc/protocols» y «/etc/services». Inetd entonces busca un servicio de internet en la base de datos «/etc/inetd.conf», o un servicio de llamada de red a procedimiento remoto abierto(ONC RPC)/Sun RPC en «/etc/rpc.conf».

Algunas veces, inetd no inicia inmediatamente directamente el servidor sino que inicia el programa TCP wrapper, tcpd(8), con el nombre del servicio llamado como su parámetro en «/etc/inetd.conf». En este caso, tcpd ejecuta el servicio correcto después de acreditar la petición y haciendo algunas comprobaciones mediante «/etc/hosts.deny» y «/etc/hosts.allow».

Por seguridad se deben inhabilitar tantos servicios de red como sea posible. Consulte Sección 4.6.4, “Restricción de acceso a algunos servicios del servidor”.

Consulte inetd(8), inetd.conf(5), protocols(5), services(5), tcpd(8), hosts_access(5), hosts_options(5), rpcinfo(8), portmap(8) y «/usr/share/doc/portmap/portmapper.txt.gz».

Desde el núcleo de Linux 2.6 en adelante, el sistema udev aporta mecanismos automáticos de descubrimiento e inicialización de «hardware« (consulte udev(7)). Después del descubrimiento de cada dispositivo por parte del núcleo, el sistema udev comienza un proceso de usuario el cual usa la información del sistema de archivos sysfs (consulte Sección 1.2.12, “procfs y sysfs”), carga los módulos necesarios para el núcleo mediante el programa modprobe(8) (consulte Sección 3.3.1, “La inicialización del módulo del núcleo”) y crea los nodos de dispositivo correspondientes.

[Sugerencia] Sugerencia

Si por cualquier motivo «/lib/modules/<núcleo-version>/modules.dep» no fue generado correctamente por depmod(8) , los módulos no pueden ser cargados por el sistema udev como se debería. Para solucionarlo ejecute «depmod -a».

El nombre de los nodos del dispositivo puede ser configurado por los archivos de relgas de udev en «/etc/udev/rules.d/». Las reglas predeterminadas actuales tienden a crear nombres generados dinámicamente, dando como resultado nombres de dispositivo no estático excepto para cd y red. Para añadir sus reglas personalizadas parecidas a lo que hace con los dispositivios de cd y red, se pueden generar nombres de dispositivo estáticos para, por ejemplo, llaveros de memoria, también. Consulte «Escribiendo reglas udev« o «/usr/share/doc/udev/writing_udev_rules/index.html».

Ya que udev es un sistema en evolución, dejaré los detalles para otra documentación y se describirá de forma mínima aquí.

[Sugerencia] Sugerencia

Para las reglas de montaje de «/etc/fstab», los nodos de dispositivos no necesitan nombres estáticos. Se puede usar UUID para los dispositivos montados en lugar de los nombres de los dispositivos como «/dev/sda». Consulte Sección 9.5.3, “Acceso al particionado utilizando UUID”.

El programa modprobe(8) nos permite configurar el núcleo de Linux en ejecución desde el proceso de usuario añadiendo o eliminando módulos al núcleo. El sistema udev (see Sección 3.3, “El sistema udev”) automatiza su llamada para ayudar a la inicialización de módulos en el núcleo.

No existen módulos que no correspondan a hardware ni módulos controladores de hardware especiales como los que necesitan ser precargados al estar enumerados en el archivo «/etc/modules» (consultemodules(5)).

Los archivos de configuración del programa modprobe(8) están ubicados en el árbol bajo el directorio «/etc/modprobes.d/» como se detalla en modprobe.conf(5). (Si quiere evitar que algunos módulos del núcleo se cargen de forma automática, incluyalos en la lista negra que es el archivo «/etc/modprobes.d/blacklist».)

El archivo «/lib/modules/<version>/modules.dep» creado por el programa depmod(8) describe las dependencias de los módulos usados por el programa modprobe(8).

[Nota] Nota

Si tiene problemas en la carga de módulos cuando se inicia su carga de módulos o con modprobe(8), «depmod -a» puede solucionarlo reconstruyendo «modules.dep».

El programa modinfo(8) muestra información acerca de los módulos del núcleo de Linux.

El programa lsmod(8) da formato al contenido de «/proc/modules», mostrando los módulos del núcleo que están cargados en este momento.

[Sugerencia] Sugerencia

Puede determinar cual es el hardware de su sistema. Consulte Sección 9.4.3, “Identificación del hardware”.

[Sugerencia] Sugerencia

Puede configurar su hardware en tiempo de arranque y activar las funcionalidades del hardware conocidas. Consulte Sección 9.4.4, “Configuración del hardware”.

[Sugerencia] Sugerencia

Seguramente pueda añadir soporte a sus dispositivos especiales recompilando el núcleo. Consulte Sección 9.9, “El núcleo”.