Red Hat Linux 9: Manual de referencia de Red Hat Linux | ||
---|---|---|
Anterior | Capítulo 1. Proceso de arranque, inicio y cierre del sistema | Siguiente |
El inicio del proceso de arranque varía dependiendo de la plataforma de hardware usada. Sin embargo, una vez que se encuentra el kernel y se carga el sistema, el proceso de arranque por defecto es idéntico a través de todas las arquitecturas. Este capítulo se basa en la arquitectura x86.
Cuando un ordenador x86 se carga, el procesador busca al final de la memoria del sistema por Basic Input/Output System o el programa BIOS y lo ejecuta. La BIOS controla no sólo el primer paso del proceso de arranque, sino que también proporciona una interfaz de bajo nivel para dispositivos periféricos. Por este motivo se escribe tan sólo en modo lectura, memoria permanente y está siempre disponible para el uso.
Otras plataformas usan programas diferentes para ejecutar tareas a bajo nivel equivalentes a aquellas de la BIOS en el sistema x86. Por ejemplo, los ordenadores basados en Itanium usan Interfaz de Firmware extensible (EFI) Shell, mientras que los sistemas Alpha usan SRM console.
Una vez que se haya cargado, la BIOS chequea los periféricos y localiza un dispositivo con el que arrancar el sistema. Habitualmente, en primer lugar comprueba cualquier disquete y unidades de CD-ROM presente por los medios de arranque, y a continuación si esto falla, echa un vistazo a las unidades de disco duro del sistema. El orden de las unidades necesario para arrancar puede ser controlado con una configuración de la BIOS. La BIOS carga en memoria cualquier programa que resida en el primer sector de este dispositivo, llamado Master Boot Record o MBR. La MBR sólo tiene 512 bytes de tamaño y contiene las instrucciones de código de máquina para el arranque del equipo, llama un gestor de arranque así como también la tabla de particiones. Una vez que la BIOS haya encontrado y cargado el gestor de arranque en memoria, le deja el control del proceso de arranque a éste.
Esta sección revisa los gestores de arranque para la plataforma x86. Dependiendo de la arquitectura del sistema, el proceso de arranque diferirá ligeramente. Consulte Sección 1.2.2.1 para una descripción general de los gestores de arranque para otras arquitecturas.
Bajo Red Hat Linux están disponibles dos gestores de arranque: GRUB o LILO. GRUB es el gestor de arranque por defecto, pero LILO está disponible para los usuarios que lo necesiten o prefieran. Para obtener más información sobre la configuración y el uso de GRUB o LILO, consulte Capítulo 2.
Los gestores de arranque de Linux para la plataforma x86 se dividen en dos etapas. La primera es un código binario de máquina pequeña en el MBR. Su única función es la de localizar el gestor de arranque de la segunda etapa y cargar la primera parte de éste en memoria.
GRUB es el gestor de arranque más nuevo y tiene la ventaja de ser capaz de leer particiones ext2 y ext3 [1] y cargar su archivo de configuración — /boot/grub/grub.conf — al momento de arranque. Consulte Sección 2.7 para detalles sobre cómo modificar este archivo.
Con LILO, la segunda etapa del gestor de arranque es usar la información del MBR para determinar las opciones de arranque disponibles para el usuario. Esto significa que cada vez que se produzca un cambio en la configuración o actualice el kernel de forma manual, debe ejecutar el comando /sbin/lilo -v -v para escribir la información apropiada al MBR. Para obtener más detalles sobre como realizarlo, consulte Sección 2.8.
![]() | Sugerencia |
---|---|
Si actualiza el kernel mediante el uso de Agente de actualización de Red Hat, el archivo de configuración es actualizado automáticamente. Se puede encontrar más información sobre Red Hat Network en el siguiente URL: https://rhn.redhat.com. |
Una vez que el gestor de arranque de la segunda etapa está en memoria,
presenta al usuario con la pantalla inicial, gráfica de Red Hat Linux mostrando
los diferentes sistemas operativos o kernels que para los que ha sido
configurado para arrancar. En esta pantalla el usuario puede usar las
flechas direccionales para escoger el sistema operativo o kernel
con el que desea arrancar y presione la tecla
![]() | Nota |
---|---|
Si ha instalado el soporte para el kernel Symmetric Multi-Processor (SMP), verá más de una opción la primera vez que arranque el sistema. Bajo LILO verá linux, el cual es el kernel SMP, y linux-up, el cual es para procesadores únicos. GRUB mostrará Red Hat Linux (<kernel-version>-smp), el cual es el kernel SMP, y Red Hat Linux (<kernel-version>), la cual es para procesadores únicos. Si surge cualquier problema con el kernel SMP, trate de seleccionar un kernel que no sea SMP antes de rearrancar. |
Una vez que el gestor de arranque de la segunda etapa haya determinado qué kernel arrancar, localizará el binario del kernel correspondiente en el directorio /boot/. El kernel binario es llamado usando el siguiente formato — /boot/vmlinuz-<kernel-version> (donde <kernel-version> corresponde a la versión del kernel especificada en las configuraciones del gestor de arranque).
Para instrucciones sobre el uso del gestor de arranque para proveer argumentos de comandos al kernel, consulte el Capítulo 2. Para información sobre el cambio del nivel de ejecución en la línea de comandos de GRUB o LILO, vea Sección 2.10.
El gestor de arranque luego coloca la imagen apropiada de initial RAM disk, conocida como initrd, en la memoria. El initrd es usado por el kernel para cargar controladores necesarios para arrancar el sistema. Esto es muy importante si posee unidades de disco duro SCSI o si está usando el sistema de ficheros ext3. [2].
![]() | Aviso |
---|---|
No elimine el directorio /initrd/ del sistema de ficheros bajo ningún concepto. Si lo elimina su sistema le dará un mensaje de error de pánico en el momento de arranque. |
Una vez que el kernel y la imagen initrd se cargan en memoria, el gestor de arranque controla el proceso de arranque para el kernel.
Para una descripción más detallada sobre los gestores de arranque GRUB y LILO, consulte el Capítulo 2.
Una vez que el kernel de Red Hat Linux arranca y pasa el proceso de arranque al comando init, los mismos acontecimientos suceden en cada arquitectura exactamente en el mismo modo. La única diferencia entre el proceso de arranque de cada arquitectura está en la aplicación que se usa para encontrar y cargar el kernel.
Por ejemplo, la arquitectura Alpha usa el gestor de arranque aboot, mientras que Itanium usa el gestor de arranque ELILO.
Consulte el Manual de instalación de Red Hat Linux específico para estas plataformas para obtener información sobre la configuración de sus gestores de arranque.
Cuando el kernel se carga, inmediatamente se inicializa y configura la memoria del ordenador y los diferentes hardware conectado al sistema, incluyendo procesadores, subsistemas de entrada/salida y dispositivos de almacenamiento. A continuación buscará la imagen initrd en una ubicación predeterminada en memoria, la descomprimirá, la montará y cargará todos los controladores necesarios. A continuación inicializa los dispositivos virtuales relacionados con el sistema de ficheros, tal como LVM o software RAID antes de desmontar la imagen del disco initrd y liberar toda la memoria que la imagen del disco ocupó anteriormente.
El kernel luego crea un dispositivo root, monta la partición root como sólo lectura y libera cualquier memoria no utilizada.
Llegados a este punto, el kernel está cargado en memoria y operativo. Sin embargo, como no hay aplicaciones de usuario que permitan la entrada significativa de datos al sistema, no se puede hacer mucho más.
Para configurar el entorno de usuario, el kernel inicia el programa /sbin/init.
El programa /sbin/init (también llamado init) coordina el resto del proceso de arranque y configura el ambiente del usuario.
Cuando el comando init arranca, se vuelve el padre o abuelo de todos los procesos que comienzan automáticamente en el sistema Red Hat Linux. Primero, ejecuta el script /etc/rc.d/rc.sysinit, que establece la ruta a otros programas, activa el swap, controla los sistemas de fichero y y se encarga de todo lo que el sistema necesita tener hecho al momento de la inicialización. Por ejemplo, la mayoría de los sistemas usan un reloj, por lo tanto, en ellos, el rc.sysinit tendrá una referencia /etc/sysconfig/clock para inicializar el reloj. Otro ejemplo es si hay procesos en los puertos seriales especiales que deben ser inicializados, rc.sysinit ejecutará el archivo /etc/rc.serial.
El comando init luego ejecuta el script /etc/inittab, que describe cómo el sistema debería configurarse en cada nivel de ejecución de SysV init [3]. Entre otras cosas, /etc/inittab configura el nivel de ejecución por defecto y establece que /sbin/update debería de ejecutarse cuando se arranque un nivel de ejecución en concreto. [4].
A continuación, el comando init configura la librería de función de fuente, /etc/rc.d/init.d/functions, para el sistema. Esto indica el modo en que empezar o matar un programa y cómo determinar el PID del programa.
El programa init inicia todos los procesos de fondo buscando en el directorio apropiado rc por el nivel de ejecución especificado por defecto en /etc/inittab. Los directorios rc están numerados para corresponder al nivel de ejecución que represente. Por ejemplo, /etc/rc.d/rc5.d/ es el directorio para el nivel de ejecuación 5.
Cuando se arranca el nivel de ejecución 5, el programa init consulta el directorio /etc/rc.d/rc5.d/ para determinar qué procesos iniciar o parar.
A continuación un ejemplo de listado del directorio /etc/rc.d/rc5.d/:
K05innd->../init.d/innd K05saslauthd->../init.d/saslauthd K10psacct->../init.d/psacct K12cWnn->../init.d/cWnn K12FreeWnn->../init.d/FreeWnn K12kWnn->../init.d/kWnn K12mysqld->../init.d/mysqld K12tWnn->../init.d/tWnn K15httpd->../init.d/httpd K15postgresql->../init.d/postgresql K16rarpd->../init.d/rarpd K20bootparamd->../init.d/bootparamd K20iscsi->../init.d/iscsi K20netdump-server->../init.d/netdump-server K20nfs->../init.d/nfs K20rstatd->../init.d/rstatd K20rusersd->../init.d/rusersd K20rwalld->../init.d/rwalld K20rwhod->../init.d/rwhod K24irda->../init.d/irda K25squid->../init.d/squid K28amd->../init.d/amd K34dhcrelay->../init.d/dhcrelay K34yppasswdd->../init.d/yppasswdd K35atalk->../init.d/atalk K35dhcpd->../init.d/dhcpd K35smb->../init.d/smb K35vncserver->../init.d/vncserver K35winbind->../init.d/winbind K40mars-nwe->../init.d/mars-nwe K45arpwatch->../init.d/arpwatch K45named->../init.d/named K45smartd->../init.d/smartd K46radvd->../init.d/radvd K50netdump->../init.d/netdump K50snmpd->../init.d/snmpd K50snmptrapd->../init.d/snmptrapd K50tux->../init.d/tux K54pxe->../init.d/pxe K55routed->../init.d/routed K61ldap->../init.d/ldap K65identd->../init.d/identd K65kadmin->../init.d/kadmin K65kprop->../init.d/kprop K65krb524->../init.d/krb524 K65krb5kdc->../init.d/krb5kdc K70aep1000->../init.d/aep1000 K70bcm5820->../init.d/bcm5820 K74ntpd->../init.d/ntpd K74ups->../init.d/ups K74ypserv->../init.d/ypserv K74ypxfrd->../init.d/ypxfrd K84bgpd->../init.d/bgpd K84ospf6d->../init.d/ospf6d K84ospfd->../init.d/ospfd K84ripd->../init.d/ripd K84ripngd->../init.d/ripngd K85zebra->../init.d/zebra K90isicom->../init.d/isicom K92ipvsadm->../init.d/ipvsadm K95firstboot->../init.d/firstboot S00microcode_ctl->../init.d/microcode_ctl S05kudzu->../init.d/kudzu S08ip6tables->../init.d/ip6tables S08ipchains->../init.d/ipchains S08iptables->../init.d/iptables S09isdn->../init.d/isdn S10network->../init.d/network S12syslog->../init.d/syslog S13portmap->../init.d/portmap S14nfslock->../init.d/nfslock S17keytable->../init.d/keytable S20random->../init.d/random S24pcmcia->../init.d/pcmcia S25netfs->../init.d/netfs S26apmd->../init.d/apmd S28autofs->../init.d/autofs S44acpid->../init.d/acpid S55sshd->../init.d/sshd S56rawdevices->../init.d/rawdevices S56xinetd->../init.d/xinetd S80sendmail->../init.d/sendmail S80spamassassin->../init.d/spamassassin S84privoxy->../init.d/privoxy S85gpm->../init.d/gpm S90canna->../init.d/canna S90crond->../init.d/crond S90cups->../init.d/cups S90xfs->../init.d/xfs S95anacron->../init.d/anacron S95atd->../init.d/atd S97rhnsd->../init.d/rhnsd S99local->../rc.local S99mdmonitor->../init.d/mdmonitor |
Como puede ver, ninguno de los scripts que inician y cierran los servicios están localizados en el directorio /etc/rc.d/rc5.d/. Casi todos los ficheros en /etc/rc.d/rc5.d/ son enlaces simbólicos apuntando a los scripts localizados en el directorio /etc/rc.d/init.d/. Los enlaces simbólicos se usan en cada uno de los directorios rc de manera que los niveles de ejecución puedan ser reconfigurados al crear, modificar y eliminar los enlaces simbólicos sin que afecte a los scripts actuales a los que se refiere.
El nombre de cada enlace simbólico inicia con K o S. Los enlaces K son procesos eliminados en ese nivel de ejecución, mientras que aquellos que inician por S son procesos iniciados.
El comando init en primer lugar detiene todos los enlaces simbólicos de K en el directorio mediante la ejecución del comando /etc/rc.d/init.d/<command> stop, en el que <command> es el proceso a matar. A continuación inicia todos los enlaces simbólicos S al ejecutar /etc/rc.d/init.d/<command>. start.
![]() | Sugerencia |
---|---|
Una vez que el sistema haya acabado el arranque podrá registrarse como root y ejecutar los mismos scripts para iniciar y parar los servicios. Por ejemplo, el comando /etc/rc.d/init.d/httpd stop paralizará el servidor Web Apache. |
Cada uno de los enlaces simbólicos se numera para dictaminar el orden de inicio. Puede cambiar el orden en el que los servicios inician o paran al cambiar el número. Mientras más bajo es el número, más rápido se arrancará. Los enlaces simbólicos con el mismo número se inician de modo alfabético.
![]() | Nota |
---|---|
Una de las últimas cosas que el programa init ejecuta es el archivo /etc/rc.d/rc.local. Este archivo es útil para la personalización del sistema. Consulte Sección 1.3 para más información sobre el uso del archivo rc.local. |
Después que el comando init ha progresado a través del directorio adecuado rc para el nivel de ejecución, el script /etc/inittab bifurca los procesos /sbin/mingetty para cada consola virtual (intérpretes de comando de registro, login) ubicada para el nivel de ejecución. Los niveles de ejecución del 2 al 5 obtienen todas las seis consolas virtuales, mientras que el nivel de ejecución 1 (modo usuario único) obtiene tan sólo uno y lo niveles de ejecución del 0 al 6 no obtienen ninguno. El proceso /sbin/mingetty abre las rutas de la comunicación para los dispositivos tty [5], establece sus modos, imprime el indicador de inicio de sesión, toma el nombre del usuario, e inicia el proceso de inicio de sesión para el usuario.
En el nivel de ejecución 5, el /etc/inittab ejecuta un script llamado /etc/X11/prefdm. El script ejecuta prefdm ejecuta su gestor de pantalla preferido para X — gdm, kdm, o xdm, dependiendo de los contenidos del archivo /etc/sysconfig/desktop.
En este punto, el sistema está operando en el nivel de ejecución nivel 5 y mostrando la pantalla de inicio de sesión.
[1] | GRUB lee el sistema de archivos ext3 así como también ext2, sin importar el archivo journal. Consulte el capítulo titulado El sistema de archivos ext3 en el Manual de personalización de Red Hat Linux para más información sobre el sistema de archivos ext3. |
[2] | Para más detalles sobre initrd, consulte el capítulo llamado El sistema de archivos ext3 en el Manual de personalización de Red Hat Linux. |
[3] | Para más información sobre los niveles de ejecución de SysV init, consulte Sección 1.4. |
[4] | El comando update se usa para eliminar buffers contaminados del disco. |
[5] | Consulte Sección 5.3.11 para más información sobre dispositivos tty. |