Tema 3. Arranque y parada del sistema Administración de Sistemas Operativos Administración de Sistemas Operativos y Periféricos Ma Pilar González Férez Tema 3. Arranque y parada del sistema– p. 1/29 Índice 1. Proceso de arranque del sistema a) Arranque de un PC b) Gestor de arranque GRUB c) Modo monousuario d) Modo multiusuario e) Niveles de ejecución o arranque en Linux f ) Arranque mediante Upstart g) Ficheros de inicialización h) Resumen del proceso de arranque 2. Parada del sistema 3. Caídas del sistema y problemas de arranque Tema 3. Arranque y parada del sistema– p. 2/29 Arranque y parada del sistema Todo sistema necesita los procesos de arranque y de parada En el proceso de arranque se prepara al sistema para ser usado por los usuarios En el proceso de parada se deja el sistema consistente (por ejemplo, los bloques de disco modificados en memoria se guardan en el sistema de ficheros) El administrador debe saber qué hacen estos dos procesos y cómo lo hacen, ya que le facilitará reconocer posibles situaciones de error y solucionarlas En la actualidad son procesos muy sencillos ⇒ una serie de ficheros de configuración y de guiones shell determinan y controlan estos procesos Tema 3. Arranque y parada del sistema– p. 3/29 1. Proceso de arranque del sistema Arranque de un PC El arranque de un ordenador actual tiene 2 fases: arranque hardware arranque del S.O. Tema 3. Arranque y parada del sistema– p. 4/29 1.1 Arranque de un PC (ii) Iniciador ROM ⇒ Programa de arranque disponible en la ROM Al arrancar el ordenador ⇒ Señal eléctrica ⇒ Carga valores predefinidos en los registros En el contador del programa se carga la dirección de inicio del iniciador ROM El iniciador ROM realiza tres funciones: 1. Comprueba el sistema, detectando sus características y comprobando su funcionamiento 2. Lee y almacena en memoria el programa cargador del S.O. 3. Pasa el control al cargador del S.O., saltando a la dirección de memoria donde lo ha almacenado Tema 3. Arranque y parada del sistema– p. 5/29 1.1 Arranque de un PC (iii) El programa cargador (master boot program o boot program) está en los primeros sectores del disco y con un tamaño prefijado Estos sectores se conocen como Master Boot Record (o Volume Boot Record) Es el encargado de cargar el núcleo (o kernel) del S.O. y pasarle el control El iniciador de la ROM y el S.O. tienen un acuerdo sobre el programa cargador, (ubicación, dirección de arranque y tamaño), de esta manera el iniciador puede soportar varios S.O.’s Tema 3. Arranque y parada del sistema– p. 6/29 1.1 Arranque de un PC (iv) El núcleo del S.O. continúa el proceso de arranque: Realiza una comprobación del hardware del sistema Se prepara a sí mismo para ejecutar el sistema inicializando sus tablas internas, creando las estructuras de datos necesarias, etc. A continuación crea el proceso Init y le pasa el control Para que el núcleo no tenga un tamaño muy grande, la mayoría de las opciones se compilan como módulos, que se cargarán cuando se necesiten Por ello, en el arranque el núcleo necesitará cargar algunos módulos para poder iniciar el sistema, p.e. el módulo ext3 para acceder al SF El fichero initrd_version.img cargará los módulos que el núcleo necesita para poder arrancar: El núcleo primero carga el initrd y le pasa el control El initrd carga los módulos necesarios y le devuelve el control al núcleo Entonces el núcleo continuará el proceso de arranque Tema 3. Arranque y parada del sistema– p. 7/29 1.1 Arranque de un PC (v) El proceso Init termina el proceso de arranque, dejando el sistema en modo multiusuario preparado para que los usuarios trabajen en él Usa una serie de ficheros scripts que le indican las acciones a realizar Las tareas que realiza el proceso Init son: Chequea los sistemas de ficheros Monta los sistemas de ficheros permanentes Activa las áreas de swapping o intercambio Activa los demonios y la red (NFS, NIS, etc.) Limpia los sistemas de ficheros (borra los directorios temporales) Habilita el login a los usuarios del sistema ¿Qué se realiza primero la ejecución de proceso Init o el montaje del sistema de ficheros raíz? Tema 3. Arranque y parada del sistema– p. 8/29 1.2 Gestor de arranque GRUB GRUB: GRand Unified Bootloader GRUB se instala en el master boot record (M.B.R.) y hace de las funciones de master boot program (M.B.P.) Pregunta qué S.O. arrancar: Linux o Windows Si la respuesta es Linux ⇒ carga el núcleo solicitado y le pasa el control para que el arranque continúe Si la respuesta es Windows ⇒ pasa el control a Windows que realiza su arranque Fichero de configuración: /boot/grub/grub.conf (en algunos sistemas es /boot/grub/menu.lst) Ejecutable (para instalación): /sbin/grub-install Soporta el modo Direccionamiento Lógico de Bloques (LBA) Lee los sistemas de ficheros Ext2, Ext3 o reiserfs (GRUB se puede instalar el sector de arranque de la partición de Linux, en este caso sólo se lanzará si es esa partición activa) Tema 3. Arranque y parada del sistema– p. 9/29 1.2 Gestor de arranque de GRUB (ii) Lee el fichero de configuración en cada arranque (las modificaciones se toman de manera automática) Dispone de tres interfaces con distinto grado de funcionalidad: De menú ⇒ seleccionar S.O. Del editor de menú de entrada ⇒ modificar líneas de órdenes antes de arrancar el sistema operativo, p.e. para pasar parámetros al núcleo o corregir errores del fichero. (Pulsar la tecla e) Para pasar parámetros al núcleo pulsar la tecla a De línea de órdenes ⇒ ejecutar órdenes interactivamente. (Pulsar la tecla c) Terminología de GRUB, numerando los dispositivos según los reconozca la BIOS: Nombres de dispositivos (hd0,0) ⇒ /dev/sda1 (<tipo_de_dispositivo><número_dispositivo_bios>,<numero_particion>) Nombres de ficheros (hd0,0)/boot/grub/grub.conf (<tipo_de_dispositivo><número_dispositivo_bios>,<numero_particion>)/path Tema 3. Arranque y parada del sistema– p. 10/29 1.2 Gestor de arranque de GRUB (iii) Ejemplo de fichero de configuración con Linux y Windows: (se lee en cada arranque del sistema) default=0 #Opción por defecto timeout=10 #Tiempo de espera password --md5 $1$4hKKr1$LvSjN89PmeeHXBljr13yq0 splashimage=(hd0,0)/boot/grub/splash.xpm.gz title Fedora Core Linux (2.6.37) #Etiqueta root (hd0,0) #Parti. a montar por GRUB, donde está el núcleo kernel /boot/vmlinuz-2.6.37 ro root=LABEL=/ #Núcleo y parámetros initrd /boot/initrd-2.6.37.img #Fichero initrd title Windows 2008 #Etiqueta rootnoverify (hd0,2) #Partición a usar chainloader +1 #Pasarle el control # Observa esta diferencia----------------------------------------------# root=LABEL=/ Indica al núcleo cuál es el SF raı́z del SO # root (hd0,0) Dónde encuentra GRUB los ficheros del núcleo Tema 3. Arranque y parada del sistema– p. 11/29 1.3 Modo monousuario Estado del sistema definido para realizar tareas administrativas y de mantenimiento, que requieren un control completo y no compartido del sistema Sólo realiza el montaje del sistema de ficheros raíz (/), los otros SF están disponibles pero no están montados Se puede acceder a todo el sistema, pero muchos servicios no están activos o configurados: Muy pocos demonios están en ejecución, sólo los necesarios Muchas utilidades no están activas (impresión, red) Sólo las órdenes del SF raíz están disponibles, (si /usr está en otra partición no está montado) etc. Para entrar en modo monousuario el proceso Init crea el shell por defecto (/bin/sh) como usuario root, (en ocasiones ejecuta la orden /sbin/sulogin, que pedirá la contraseña del root para dejar entrar al sistema) Tema 3. Arranque y parada del sistema– p. 12/29 1.3 Modo monousuario (ii) ¿Cómo se entra en modo monousuario? Indicándolo manualmente al Master Boot Program con una opción o parámetro: GRUB: añadir, mediante la interfaz de edición, la opción «single» a la entrada del núcleo « kernel /boot/vmlinuz-2.6.37 ro root=LABEL=/ » Automáticamente, si hay problemas en el proceso de arranque que el sistema no puede solucionar por sí solo, (p.e. problemas en el SF que fsck no puede solucionar, errores en los ficheros de arranque) ¡Problema! Modo monousuario no tiene ninguna protección (un usuario podría entrar en el sistema en modo monousuario, y por tanto tener acceso a todo el sistema, estando delante del ordenador) Solución: GRUB: en el fichero /boot/grub/grub.conf añadir la opción: password −−md5 password_encriptado La orden grub-md5-crypt encripta el password, que habrá que copiar al fichero de configuración Tema 3. Arranque y parada del sistema– p. 13/29 1.4 Modo multiusuario Pasos del proceso de arranque: 1. Chequea el sistema de ficheros raíz con fsck Si al apagar el sistema, el sistema de ficheros se desmontó correctamente, no se chequea Sin embargo, algunos S.O.’s con determinados SF’s fuerzan el chequeo siempre, o cada cierto tiempo (cada 3 meses) o cada cierto no de montajes sin chequear (cada 20 veces) Si fsck encuentra problemas que no puede solucionar “sólo”, lleva al sistema a modo monousuario para que el administrador realice el chequeo manual 2. Monta el sistema de ficheros raíz en modo lectura-escritura 3. Chequea el resto de sistemas de ficheros con fsck (idem al punto 1) 4. Monta el resto de sistemas de ficheros 5. Activa las particiones de intercambio o swapping con swapon -a 6. Activa las cuotas de disco: quotacheck -a y quotaon -a Tema 3. Arranque y parada del sistema– p. 14/29 1.4 Modo multiusuario (ii) Pasos del proceso de arranque (continúa . . . ) 7. Lanza los procesos servidores o demonios crond, atd, etc. cupsd syslogd ... 8. Activa la red 9. Lanza los demonios de red xinetd, sendmail, named, routed rpcbind, nfsd, rpc.statd, ypbind, ypserv 10. Limpia los sistemas de ficheros: /tmp, etc. 11. Permite que los usuarios entren: Crea las terminales, lanzando mingetty (o getty ) en modo texto, y el terminal gráfico, si es preciso Borra, en caso de que exista, el fichero /etc/nologin Si el fichero /etc/nologin existe los usuarios (excepto el root) no pueden entrar al sistema. Algunos sistemas lo crean al iniciar el arranque Tema 3. Arranque y parada del sistema– p. 15/29 1.5 Niveles de ejecución en Linux Algunos sistemas operativos consideran que el sistema puede estar en distintos niveles de ejecución (o arranque), y no sólo en multiusuario y monousuario (originalmente apareció en los UNIX de System V) En Linux estos niveles de ejecución son: 0: El sistema está apagado 1, s ó S: Modo monousuario 2: Multiusuario sin funciones de red, el mismo que el 3 pero sin las utilidades de red. (En ocasiones está sin usar y puede ser redefinido) 3: Multiusuario completo, con terminales en modo texto 4: Sin usar, puede ser redefinido por el administrador 5: Multiusuario con pantalla de inicio de sesión basada en X 6: El sistema se está reiniciando Tema 3. Arranque y parada del sistema– p. 16/29 1.5 Niveles de ejecución en Linux (ii) /sbin/telinit ⇒ cambiar de nivel de ejecución telinit 1 ⇒ a modo monousuario telinit 6 ⇒ reiniciar el sistema telinit 3 ⇒ cambiar al nivel 3 /sbin/runlevel ⇒ saber en qué nivel está el sistema Hay un nivel por defecto en el que arranca el sistema, que se establece en el fichero /etc/inittab con la línea: id:5:initdefault: Al arrancar, mediante el GRUB, al núcleo se le puede pasar como parámetro un número indicando el nivel en el que queremos arrancar. En este caso se obviará el nivel por defecto Tema 3. Arranque y parada del sistema– p. 17/29 1.6 Arranque mediante Upstart Proceso de arranque/parada del sistema basado en eventos, que son ejecutados por el proceso Init De forma asíncrona realiza las siguientes tareas: Dirige el inicio de las tareas y demonios. Controla, si es necesario, los demonios mientras el sistema está encendido. Detiene los demonios durante el proceso de apagado. En el directorio /etc/event.d/ hay una serie de eventos (ficheros) que Init ejecuta según el orden y las dependencias establecidas en los mismos Estos eventos indican qué tarea ejecutar, cuándo y cómo, mediante su propio lenguaje La orden initctl permite indicar al proceso Init que realice determinadas acciones: start evento stop evento status evento Tema 3. Arranque y parada del sistema– p. 18/29 1.6 Arranque mediante Upstart (ii) Los ficheros de eventos están en modo texto siguiendo la siguiente nomenclatura: exec <orden><argumentos> ⇒ ejecutar la orden con esos argumentos: exec /etc/rc.d/rc 0 exec /sbin/mingetty tty2 script . . . end script ⇒ ejecutar el guión shell indicado: script set $(runlevel || true) if [ "$2" != "0" ] && [ "$2" != "6" ]; then set $(runlevel --set 0 || true) fi if [ "$1" != "unknown" ]; then PREVLEVEL=$1 RUNLEVEL=$2 export PREVLEVEL RUNLEVEL fi exec /etc/rc.d/rc 0 # Combina exec con script end script Tema 3. Arranque y parada del sistema– p. 19/29 1.6 Arranque mediante Upstart (iii) Nomenclatura de los ficheros de eventos: start on <event> ⇒ describe bajo qué condiciones se lanzará ese evento start on startup start on runlevel 5 start on stopped rc2 start on started prefdm stop on <event> ⇒ describe bajo qué condiciones se parará ese evento stop on runlevel [35] stop on started prefdm respawn ⇒ volver a lanzar ese proceso o demonio cuando muera console ⇒ hacia dónde redirigir la salida del evento pre-start ⇒ ejecutar la orden/guión shell antes de lanzar ese proceso pre-start exec rm -f /var/run/crond pre-start script if [ "$RUNLEVEL" == "S"] then RUNLEVEL=1 fi end-script Tema 3. Arranque y parada del sistema– p. 20/29 1.6 Arranque mediante Upstart (iv) Nomenclatura de los ficheros de eventos: post-start ⇒ ejecutar la orden/guión shell después de lanzar ese proceso post-start exec touch/var/run/crond post-start script if [ "$RUNLEVEL" == "1"] then RUNLEVEL=S fi end-script pre-stop ⇒ ejecutar la orden/guión shell antes de parar ese proceso pre-stop exec ... pre-stop script / end-script post-stop ⇒ ejecutar la orden/guión shell después de parar ese proceso post-stop exec ... post-stop script / end-script ... Tema 3. Arranque y parada del sistema– p. 21/29 1.6 Arranque mediante Upstart (v) Ejemplos start on startup stop on runlevel console output script /etc/rc.d/rc.sysinit end script post-stop script runlevel=$(/bin/grep initdefault /etc/inittab | cut -f 2 -d ":") [ -z "$runlevel" ] && runlevel="3" exec telinit $runlevel end script ------------------------------------------------start on runlevel 5 stop on runlevel [!5] console output script exec /etc/rc.d/rc 5 end script Tema 3. Arranque y parada del sistema– p. 22/29 1.7 Ficheros de inicialización Varios ficheros script generales, llamados rc* que están en /etc/rc.d o /etc, son ejecutados al arrancar por el Init mediante un evento Varios ficheros scripts específicos de cada nivel de arranque, que están en el directorio /etc/rcn.d o /etc/rc.d/rcn.d, siendo n el nivel de arranque, son ejecutados al arrancar o cambiar de nivel Son ficheros scripts que su nombre empieza por K o S, seguido de un número de 2 dígitos y un nombre descriptivo: K35smb K15httpd S40atd S50xinetd S60cups S99local El script /etc/rc (o /etc/rc.d/rc) es el encargado de ejecutar estos ficheros scripts, según el nivel de arranque Los ejecuta en orden alfabético, primero los K después los S, los dos dígitos establecen el orden entre todos los K y todos los S Los ficheros K sirven para detener demonios o matar procesos Los ficheros S sirven para lanzar demonios o ejecutar funciones de inicialización De esta manera, para cada nivel de inicialización, se especifica qué demonios tienen que estar activos y qué demonios no tienen que estar activos Tema 3. Arranque y parada del sistema– p. 23/29 1.7 Ficheros de inicialización (ii) En los directorios /etc/rcn.d (o /etc/rc.d/rcn.d ) Estos ficheros son enlaces simbólicos al fichero con el mismo nombre descriptivo que está en el directorio /etc/init.d (o /etc/rc.d/init.d) Los ficheros scripts reciben varios parámetros: start, stop, restart, etc. (esto permite lanzar o relanzar demonios sin reiniciar el sistema) rc ejecuta los K con el parámetro stop y los S con start /sbin/chkconfig ⇒ configurar los demonios a lanzar (S) o finalizar (K) para cada nivel. También permite consultas −−add nombre ⇒ Añadir para los niveles que especifique el demonio −−del nombre ⇒ Eliminarlo (ni siquiera lo deja como K) [−−level levels] nombre <on|off|reset> −−list [nombre] En entorno gráfico: /usr/sbin/ntsysv, system-config-services Lanzar demonios a “mano” (sin reiniciar) ⇒ P.e. el demonio de impresión: /etc/rc.d/init.d/cups restart Tema 3. Arranque y parada del sistema– p. 24/29 1.8 Resumen del proceso de arranque 1. Iniciador ROM Chequeo inicial del sistema Lee y almacena en memoria el programa cargador del S.O. Pasa el control al cargador del S.O., saltando a la dirección de memoria donde lo ha almacenado 2. Cargador del sistema operativo (GRUB) ⇒ carga el núcleo del sistema operativo y le pasa el control, sabe dónde está el núcleo o cómo localizarlo 3. Núcleo del sistema operativo Chequeo hardware Creación e inicialización de las estructuras de datos, tablas, etc., que necesita Crea el proceso Init y le pasa el control 4. Proceso Init ⇒ termina el proceso de arranque, dejando el sistema preparado para ser usado (chequeo de SF’s, montaje de SF’s, activación de swap, de cuotas, demonios, etc.) Tema 3. Arranque y parada del sistema– p. 25/29 2. Parada del sistema En ocasiones es necesario apagar o reiniciar el sistema: mantenimiento, diagnóstico, hardware nuevo, etc. Las acciones que se realizan en el proceso de parada son: 1. 2. 3. 4. 5. 6. 7. Se notifica a los usuarios Procesos en ejecución ⇒ enviar la señal de terminación (TERM) Se paran los demonios A los usuarios que quedan conectados se les echa del sistema Procesos que queden en ejecución ⇒ enviar la señal de fin (KILL) Actualizaciones de disco pendientes (integridad del SF) con sync Dependiendo del tipo de shutdown: a) Se cambia a modo monousuario, opción por defecto b) Se apaga el ordenador c) Se reinicia el sistema Orden: shutdown (también telinit nivel) Tema 3. Arranque y parada del sistema– p. 26/29 2. Parada del sistema (ii) shutdown [opciones] tiempo [mensaje] Opciones: Sin opciones ⇒ modo monousuario ⇒ telinit 1 -r ⇒ reiniciar ⇒ telinit 6 -h ⇒ parar ⇒ telinit 0 -c ⇒ cancelar -k ⇒ simular un shutdown, pero realmente no se lleva a cabo Tiempo: +minutos, now, h:m Al salir de modo monousuario vuelve al nivel por defecto, (salvo que expresamente se reinicie o apague) Tema 3. Arranque y parada del sistema– p. 27/29 3. Caídas del sistema y problemas de arranque Causas de caídas del sistema: Fallos hardware Errores de hardware irrecuperables Fallos de luz (cortes o altibajos) Otros problemas ambientales Problemas de entrada/salida Problemas de algún sistema de ficheros Problemas de arranque Hardware mal No se puede leer el sistema de ficheros de los discos de trabajo Hay en el disco áreas dañadas que no pertenecen al sistema de ficheros (p.e. tabla de particiones) Hardware incompatible Errores en la configuración del sistema Tema 3. Arranque y parada del sistema– p. 28/29 3. Caídas del sistema y problemas de arranque (ii) Al rearrancar mirar los mensajes que hay en el fichero /var/log/messages La orden dmesg ⇒ mensajes producidos durante el arranque En el arranque al núcleo se le pueden pasar otros parámetros: root=particion ⇒ indicar que monte como partición raíz una distinta init=ejecutable ⇒ que en vez del proceso Init lance otro proceso: init=/bin/bash ⇒ en este caso el proceso de inicio del Init no se realiza, el SF está montado en modo sólo lectura, hay que remontarlo « mount -o remount -w -n / » single ⇒ arrancar en modo monousuario Un número indicando el nivel de arranque Tema 3. Arranque y parada del sistema– p. 29/29