Arranque y apagado en Linux Índice Introducción Secuencia de arranque initrd y linuxrc Niveles de ejecución (runlevels) Detención del sistema: shutdown Apéndice: Bootchart Los pasos en el arranque son los siguientes: 1.- La CPU se inicializa y ejecuta una instrucción en una dirección fija de memoria. 2.- La instrucción salta a la BIOS. 3.- La BIOS encuentra un dispositivo de arranque y accede a su MBR, que apunta al GRUB. 4.- La BIOS carga y transfiere el control al GRUB. 5.- GRUB carga el núcleo comprimido. 6.- El núcleo comprimido se descomprime y transfiere el control al núcleo previamente descomprimido. 7.- Inicializado el núcleo se ejecuta el programa init, para que inicie las aplicaciones y el resto del sistema. initrd y linuxrc El cargador de arranque carga el kernel e initrd en la memoria. El contenido de initrd es un sistema Linux mínimo que contiene un ejecutable llamado linuxrc. Linuxrc carga los módulos adicionales necesarios para el arranque del núcleo y monta el sistema de archivos raíz. Desde que se monte el FS raíz real, Linuxrc se detiene y continua el proceso de arranque. Finalizado el arranque del núcleo se desmonta initrd y se lanza init. initrd y linuxrc Varios de los mensajes que el núcleo produce durante esta etapa de arranque pueden ser revisados en el archivo /var/log/dmesg con el programa dmesg. Secuencia de arranque BIOS Comprueba periféricos HD MBR + Tabla de particiones Gestor Arranque Localizar /boot Cargar kernel Cargar initrd Kernel Configurar sistema Montar imagen initrd Montar /root Liberar memoria Iniciar init Secuencia de arranque ubicación placa base Power ON CPU test e inicializa registros salta a la BIOS 0xfffffff0 ROM 1er sector físico 512 bytes de BIOS Master Boot Record Pequeño programa de arranque disco disco duro CDROM 1 er sector de una partición sistema de ficheros root memoria del núcleo test de la placa base, reconoce el hardware, almacena valores, salta al 1 er sector del dispositivo boot elije una partición de arranque Tabla de particiones Boot sector LILO - GRUB contiene el comienzo del cargador, carga el resto del cargador inicializa parámetros carga el núcleo start_kernel se descomprime, inicializa el sistema Distribución del GRUB init programa getty login shell primer proceso PID=1 trozo pequeño en el 1er sector físico trozo en el 1er sector de la partición Linux resto en el sistema de ficheros / LILO -GRUB NO SÍ /sbin/init Finalizando el arranque… Padre de todos los procesos, arranca todos los procesos o servicios básicos que están en la capa de usuario. Ejecuta el escript /etc/inittab que define como el sistema debe ser inicializado. 1. define un nivel de ejecución o arranque 2. Ejecuta /etc/rc.d/rc.sysinit establece la variable PATH o ruta del entorno, activa el swap, verifica los sistemas de archivos,… 3. Ejecución de servicios: /etc/rc.d/rcX.d/ define la acción por defecto al pulsar las teclas CTRL+ALT+DELETE (shutdow por defecto, se puede cambiar o comentar). 5. ejecuta el proceso /sbin/mingetty para cada consola virtual 6. acepta el nombre de usuario y su contraseña e inicializa el proceso login. 4. Niveles de ejecución (runlevels) /etc/inittab establece el nivel de arranque id:5:initdefault: Localizados en /etc/rc.d/ Formato: rcX.d (X = 0…6) rc0.d Apagado del sistema rc1.d Modo monousuario rc2.d Modo multiusuario rc3.d Modo multiusuario con red rc4.d No usado definible por usuario rc5.d Modo gráfico rc3.d + GUI rc6.d Reinicio del sistema Scripts [ /etc/rc.d ] Scripts [ /etc/rc.d/init.d ] por cada servicio ha de existir un script. deben admitir estas “acciones”: start, stop, restart, try-restart, reload, force-reload y status. [ S | K ] [ 0 – 99] <nombre_script>. ‘S’ (start) le indica al sistema que lo inicie. ‘K’ (kill) que lo detenga. 0 a 99 proporciona un orden único de inicio. en /etc/rc.d/rcX.d/ hay enlaces a los scripts localizados en el directorio /etc/rc.d/init.d/ Scripts on/off Estructura: [ K | S ] [ 0 – 99 ] nombre Iniciar script: mv K55sshd S55sshd Apagar script: mv S55sshd K55sshd Scripts [ /etc/rc.d/init.d ] El comando init primero para todos los procesos cuyo enlace comienza por K /etc/rc.d/init.d/<command> stop arranca todos los procesos que tienen un enlace que comienza con S /etc/rc.d/init.d/<command> start el root del sistema puede parar, arrancar o reiniciar un servicio service <nombre del servicio> stop, start, restart Scripts: rc.local Configurar programas de inicio manualmente por el usuario Fácilmente editable Scripts: utilidades service: service <nombre> [stop | start | restart] chkconfig chkconfig --list chkconfig <nombre> [on/off] chkconfig --level [0.. 6] <nombre> [on/off] /usr/sbin/ntsysv – interfase basada en ncurses login Finalmente se ejecuta el proceso /sbin/mingetty para cada consola virtual. El proceso /sbin/mingetty establece un camino de comunicación con el dispositivo tty, inicializa sus modos, imprime el login, acepta el nombre de usuario y su contraseña e inicializa el proceso login. Detención del sistema Importante realizarlo correctamente para evitar archivos corruptos. Órdenes: shutdown, halt, reboot, poweroff Detención del sistema shutdown envía señal a init para cambiar el nivel de ejecución. Apagar: shutdown –h now Reiniciar: shutdown –r now