Administración de Sistemas Operativos en Red

 

 

 

 Práctica 1
Introducción
23/02/2004 Inicio y parada. Niveles de arranque
 

Objetivo

En esta práctica se pretende mostrar el proceso de inicio y parada de un equipo con el sistema operativo Linux.

 

Conocimientos previos

En la bibliografía básica se puede obtener la "Guía de Referencia de Red Hat" que cubre y amplía dicha información enfocándola al entorno Linux.

Otros documentos menos elaborados pero no por ello menos valiosos son los distintos HOWTOs que podemos encontrar en la documentación existente en las diversas distribuciones de Linux. Algunos de los más interesantes son:

Guía de instalación de Red Hat
Proporciona información sobre la instalación de la distribución Red Hat y, entre otras cosas, de los Gestores de arranque y el Inicio y parada del Sistema. Se encuentra disponible en castellano en la URL http://www.europe.redhat.com/documentation/rhl9/rhl-ig-x86-es-9/

Lilo-miniHOWTO
Proporciona información sobre la instalación y configuración de arranques basados en lilo. Se encuentra disponible en la URL http://www.europe.redhat.com/documentation/mini-HOWTO/LILO.php3.

Lilo Crash rescue HOWTO

En la URL http://www.europe.redhat.com/documentation/HOWTO/LILO-crash-rescue-HOWTO.php3. Se encuentra información para recuperar sistemas basados en el gestor Lilo.

Para configurar los equipos se va a utilizar la distribución Knoppix modificada para las prácticas de la asignatura. .Esta versión de Linux se lee de CD, creando un disco RAM donde se guardan determinados ficheros modificables en tiempo de ejecución.

Arranque y parada del sistema

Una de las principales características de los sistemas operativos unix es la posibilidad de configurar "a medida" el arranque y parada del equipo. Con la presente práctica se pretende  describir, por una parte, el proceso de arranque y parada de los distintos sistemas operativos y, por otra, mostrar qué es lo que hay que hacer para que un sistema esté bien configurado tras su arranque y para que realice, en todo momento, una parada adecuada.

 

Inicio del sistema

Evidentemente, el arranque de un sistema comienza con la alimentación eléctrica del mismo. Tras esto, se ejecutan una serie de procedimientos de inicialización y diversas acciones hasta llegar al punto final de permitir la entrada de un usuario.

Éste es un proceso de especial vulnerabilidad del sistema ya que cualquier error en la configuración de arranque, en el hardware o daños en el sistema de archivos puede provocar que no se cargue el sistema. Además, es la primera tarea que debe realizar un administrador cuando se adquiere una máquina nueva.

Cuando un ordenador se inicia, en primer lugar, se ejecutan los programas contenidos en la ROM de la máquina (EEPROM o cualquier tipo de memoria no volátil). Estos programas (BIOS en x86) comprueban el estado del hardware, determinan su configuración y pasan el control al "boot loader" o "bootstrap" que generalmente está situado en una zona reservada del disco (en el Master Boot Record o en el sector 0 de la partición de arranque). Este procedimiento depende de la máquina y del fabricante y su finalidad es ejecutar un gestor de arranque (explicados más adelante) que permitirá seleccionar la configuración de arranque apropiada.

Todos los sistemas Unix, tanto los basados en PC bajo arquitectura Intel x86 (Linux, Solaris, ...), como en sistemas propietarios (AIX de IBM, IRIX de Silincon Graphics, ...), tras la puesta en marcha del sistema y la ejecución de los procedimientos de inicialización, se carga el núcleo en memoria, se montan los distintos sistemas de ficheros y se ejecuta el proceso INIT, además de una serie de tareas de inicialización.

Existen 2 modos de arranque: manual o automático. En el modo automático, el sistema ejecuta, por sí mismo, todo el proceso de arranque, mientras que en el modo manual, el sistema sigue un procedimiento automático punto a punto, dejando el control al operador en la mayoría de los guiones que deben ser ejecutados. En este proceso, el computador está en modo monousuario.

En el arranque de un sistema Unix se puede hablar de 6 pasos:

  • carga e inicialización del kernel,
  • detección y configuración de los dispositivos,
  • ejecución de los procesos del sistema,
  • intervención del operador (sólo en modo monousuario),
  • ejecución de los scripts de arranque
  • y entrada en el modo multiusuario.

Ejecución del núcleo

El núcleo es un programa situado en el raíz del sistema de ficheros y su nombre suele ser /vmunix o /unix (/vmlinux en el caso del Linux).

La mayoría de los sistemas implementan la carga del núcleo en dos fases. En la primera, se carga en la memoria un pequeño programa de arranque desde un disco duro o disquete de arranque y será éste el que se encargue de ejecutar el núcleo. Esta tarea no es dependiente del sistema operativo.

Gestores de arranque

Dependiendo de la arquitectura hardware que tengamos nos podemos encontrar con distintos gestores de arranque: Lilo/Grub para x86, aboot para Alpha, ... En este apartado vamos a centrarnos en Lilo y Grub.

Lilo

LILO es un gestor de arranque que permite seleccionar entre múltiples configuraciones de arranque e, incluso, entre diferentes sistemas operativos. Se instala con el comando lilo y su configuración reside en el fichero /etc/lilo.conf. Para cambiar el arranque se debe modificar el fichero /etc/lilo.conf, realizar los cambios y ejecutar lilo para que se actualice el arranque.

Configurando LILO

Cada posible escenario tiene una etiqueta. La primera etiqueta que aparece es la que se considera arranque por defecto. Los parámetros genéricos que se le deben introducir a LILO son:

  • boot: dónde se instala el LILO. CON /dev/hda se instala en el MBR del disco primario del primer controlador. Con /dev/hda1 se instala en el sector 0 de la partición 1 del disco primario del primer controlador.
  • root: Partición raíz
  • Delay=20. Especifica el número de segundos que espera se introduzca qué imagen se quiere arrancar antes de cargar la de por defecto
  • Install=/boot/boot. Especifica el fichero como sector de arranque
  • Message=fichero. Indica el fichero cuyo contenido se mostrará junto con el prompt del lilo
  • Password=pp.. Passwd necesario para arrancar una imagen.
  • Prompt. Fuerza a que muestre el prompt
  • Restricted. Pide el passwd para introducir parámetros al lilo

Grub

Al igual que LILO, permite la selección de un arranque entre dintitas configuraciones previstas. Las características más importantes que presenta GRUB son:

  • Posibilidad de ejecutar comandos pre-OS
  • Direccionamiento lógico de bloques (LBA)
  • Posibilidad de lectura del sistema de archivos ext2

Para más información sobre GRUB ver el manual de referencia de la Red Hat.

Detección y configuración del hardware

Una de las tareas asignadas al núcleo es el chequeo y configuración del hardware presente (el que se le ha dicho cuando se crea el núcleo que debe existir).

La mayoría de la información que se le suministra al núcleo del SO en su configuración está mal especificada por lo que intenta determinar la información necesaria probando la comunicación con los dispositivos y preguntando la información a los drivers apropiados.

Normalmente, los drivers de los dispositivos que no se encuentran o no responden se deshabilitan. Si un dispositivo se conecta más tarde al sistema, no será accesible hasta que la máquina se reinicie, aunque existen servidores que reconocen hardware nuevo en caliente sin necesidad de reiniciarlos.

Procesos del sistema

Para que el proceso de inicialización se complete, el núcleo crea lo que se llaman procesos espontáneos (se llaman así porque el proceso no es creado usando una llamada a fork) y ejecuta el proceso "init".

De todos los procesos que se ejecuta el kernel, sólo INIT se puede considerar como un proceso realmente. Al resto se les etiqueta como tales por motivos de arquitectura y control de tiempo. A estos se les llama procesos espontáneos. Cuando se ha terminado de lanzar estos procesos, termina el trabajo del núcleo (dentro del proceso de arranque) y entra a ejecutar acciones el proceso INIT.

Las funciones de init son: inicializar cualquier dispositivo, controlar determinados procesos y de lanzar los scripts de inicialización que configuran adecuadamente el sistema (los llamados rc). Los procesos a lanzar dependerán de lo que en el mundo Unix se llama nivel de ejecución. Por nivel de ejecución se entiende a una configuración del sistema en la que se ejecutan un grupo determinado de procesos. Los procesos que se ejecutan en cada nivel de ejecución se indican en el fichero /etc/inittab. Éste está formado por líneas divididas en campos separados por el carácter ':'. El formato de las líneas del fichero /etc/inittab es:

Nombre:Nivel_De_Ejecución:Accion:Proceso

Nombre: Etiqueta de 1 ó 2 caracteres que identifican de forma unívoca una entrada del fichero /etc/inittab


Nivel_De_Ejecucion: indica los niveles en los que el proceso va a ser ejecutado. Puede tener hasta 20 caracteres. Si es nulo, blanco, se lanza en todos los niveles.
Se dispone, en un sistema Unix, de los siguientes niveles de ejecución: 0, 1, 2, 3, 4, 5, 6 y s o S (modo monousuario):

0 Apagado de la máquina
1, s o S modo monousuario. Es usado para instalar/eliminar software, recuperar y chequear sistemas de ficheros
2 Modo multiusuario. Modo normal de operación.
3 y 4 Modos multiusuarios
5 Modo reservado
6 Modo de parada y arranque del sistema

Accion: indica cómo se va a comportar init tras lanzar el proceso asociado al nivel. Los valores que puede tomar este campo son

Initdefault Indica el nivel de ejecución en el que se debe situar el sistema en el arranque. Si no existe una línea con esta acción, preguntará en la consola el nivel de ejecución deseado.
Respawn Si el proceso no existe se lanza, en caso contrario init continua escrutando inittab. Está continuamente lanzado el programa cada vez que éste se detiene. Utilizado con los demonios getty
Wait Lanza el programa y espera la finalización del mismo
Once El proceso se lanza una vez, no espera su terminación. Es más, posteriores lecturas del /etc/inittab, ignorarán esta línea.
boot Se lanza el programa (sin esperar su terminación) sólo en el arranque y si su nivel de ejecución coincide con el especificado por initdefault.
bootwait Igual que boot, pero con esta línea se espera a la finalización del proceso.
off Para la ejecución del programa si está corriendo, en caso contrario la línea es ignorada. Un uso muy habitual es para inhibir líneas de ejecución conservando la definición en el fichero /etc/inittab.
sysinit Ejecuta el programa asociado antes de que init trate de acceder a la consola esperando el final de su ejecución.
ondemand El mismo uso que respawn pero sólo se aplica a los niveles a, b o c.

Proceso:indica el programa que se ejecutará. Debe venir indicado con el path completo y con los argumentos necesarios.

El fichero /etc/inittab se lee (por parte del proceso init) cada vez que ocurre una de estas circunstancias:

cuando muere uno de los procesos de /etc/inittab
cuando llega la señal SIGPWR
con una llamada explícita a init con un nivel de ejecución distinto al actual cuando se llama a init con el argumento q o Q (para que reexamine el fichero /etc/inittab)

El proceso de arranque finaliza con la ejecución de los scripts de inicialización (lanzando los asociados al nivel de ejecución indicado para arrancar) y la petición de "login" para la entrada al sistema de un usuario

Si se entra en modo monousuario, init simplemente proporciona un shell (bash) con privilegios de root y espera la finalización (mediante la secuencia de teclas [<ctrl>+D] o la ejecución del comando exit). El usuario puede ejecutar comandos, tiene montado sólo el raíz (y en algunos sistemas también el /usr), no dispone de la ejecución de los demonios (algunos necesitan procesos del servidor para su correcto funcionamiento). Cuando se entra en este modo, el usuario debe ejecutar manualmente el fsck.

 

Guiones de inicialización

Dependiendo de la distribución, se tiene que el sistema Linux seguirá las recomendaciones BSD o System V.

La distribución Linux Debian sigue fielmente el sistema de arranque de scripts de inicialización de system V. Dispone de un directorio /etc/init.d y otros /etc/rc-nivel-.d donde se sitúan enlaces a los scripts del directorio /etc/init.d. El nombre de los enlaces empieza por S para los guiones que se deben ejecutar con el argumento "start" o K para los que deben ejecutarse con el argumento "stop".

Algunos scripts que se encuentran en el directorio /etc/init.d de una máquina Debian son:

checkfs.sh Chequea los sistemas de ficheros
checkroot.sh Chequea el sistema de ficheros raíz
halt Para el sistema
kerneld Inicia kerneld (bajo demanda de carga de módulos)
modutils Carga los modulos apropiados en el arranque
mountall.sh Monta todos los sistemas de ficheros que indica /etc/fstab
mountnfs.sh Monta los sistemas de ficheros de red que se encuentren en el fichero /etc/fstab
netbase Inicia/para los demonios de red
netstd_nfs Inicia/Para los servicios de sistemas de ficheros remotos (nfsd y mountd)
network Configura las interfaces de red
umountfs Desactiva el swap y desmonta todos los sistemas de ficheros

Para la distribución de Linux Red Hat, se dispone de un sistema de arraque híbrido entre BSD y System V). INIT invoca el guión /etc/rc.d/rc pasándole como argumento el nivel de ejecución adecuado y éste es el que se encarga de ejecutar los guiones del nivel adecuado. Para gestionar los enlaces de los directorios de nivel de ejecución dispone del comando chkconfig. También incluye el guión rc.local que será el último guión a ejecutarse dentro del proceso de arranque.

La mayoría de los procesos de arranque tienen su información de configuración en el directorio /etc/sysconfig.

Apmd Lista los argumentos del demonio APM
Clock Especifica el tipo de reloj que dispone el sistema
Console Directorio que siempre está vacío
Hwconf Contiene la información del hardware del sistema.
INIT Configura la forma de los mensajes que imprimirán los guiones al arrancar.
Keyborad Tipo de teclado
Network Opciones globales de red (nombre del equipo, gateway, ...)
Network-scripts Directorio que contiene ficheros de configuración de la red. Por ejemplo, ifcfg-eth0 donde se guarda la información de configuración de la tarjeta de red

Parada del sistema

La llamada a /sbin/shutdown de un sistema linux tiene la siguiente sintaxis:

/sbin/shutdown [-t sec] [flags] time [msj de aviso]

  • -t sec indica a init el tiempo que debe esperar (en segundos) tras enviar el aviso y la señal de finalización a los procesos antes de cambiar de nivel
  • time es la hora a la que se va a ejecutar la acción prevista. El formato puede ser hh:mm o +m, donde el primero especifica la hora y minuto en la que se realiza el apagado y la segunda el número de minutos que deben transcurrir hasta que se ejecute (+0 se puede sustituir por now)
  • [msj de aviso] es el texto de aviso que se le manda a todos los usuarios
  • [flags] pueden ser:
    • -k sólo envía el mensaje de aviso a los usuarios
    • -r reinicia el sistema después de apagarlo
    • -h para después de apagarlo
    • -n No sincroniza los disco en el apagado
    • -f Rearranque rápido. Crea un fichero llamado /etc/fastboot. La secuencia de arranque buscará este archivo y no hará un fsck si lo encuentra
    • -F fuerza la ejecución de fsck en el arranque posterior (crea el fichero /etc/forcefsck que testea el sistema en el arranque para asegurar el chequeo del sistema de ficheros si existe)
    • -c Cancela un apagado en ejecución (no admite time)
    • -a usa /etc/shutdown.allow. Si se lanza con esta opción, lo que hace es comprobar que el fichero /etc/shutdown existe y que si uno de los usuarios conectados en una de las consolas virtuales (var/run/utmp) está en la lista indicada por el fichero o es root, se procede a la parada. Sino, se envía un mensaje a la consola indicando el error. El formato para el fichero /etc/shutdown es de un nombre de usuario por línea, permitiendo líneas en blanco y comentarios (#)

Enunciado de la práctica

La práctica se va a realizar con la distribución Knopppix de linux, basada en Debian y ejecutable desde CD.

Lo primero que debemos hacer es insertar el CD de la distribución en el lector del equipo y arrancar el sistema.

Tras ello, aparecerá la etiqueta "boot: " del gestor de arranque de Knoppix (Lilo) indicándonos que elijamos el tipo de arranque deseado. Si pulsamos F2, vemos los arranques disponibles:

  • knoppix <parámetros de configuración>.
  • expert

Con la primera opción arrancamos el sistema con la o las opciones deseadas. Con el segundo, el arranque es interactivo donde se pregunta al operador qué debe hacer en cada paso del arranque (drivers a instalar, ...)

Para la práctica, se debe iniciar el sistema con la opción "knoppix lang=es", para que reconozca el teclado con la configuración adecuada.

Tras elegir la opción de arranque, comienza el proceso de inicio del sistema con la carga del núcleo, la creación del ramdisk y los directorios y enlaces que deben existir en el disco RAM, el reconocimiento del hardware y la configuración de los dispositivos y, por último, la entrada en el nivel de arranque por defecto y la ejecución de los guiones previstos en este arranque.

Al igual que ocurre con cualquier otra distribución de Linux, podemos indicar, en el momento del inicio del sistema cuando el gestor de arranque pide las opciones de inicio, a qué nivel de ejecución queremos ir. Así, si en vez de introducir el texto indicado, se introdujera "knoppix lang=es single", entraríamos al nivel 1 (monousuario), con "knoppix lang=es 2" entraríamos al nivel 2 y, así, con cualquier otro nivel de arranque. Para ver cómo se puede controlar la entrada de argumentos en el arranque, consultar la documentación del gestor de arranque apropiado (Howto de lilo)

Entrad en modo nonousuario (knoppix lang=es single) y en modo multiusuario, con el nivel por defecto definido en el knoppix (knoppix lang=es) ¿Qué nucleo está se está ejecutando con estos arranques? ¿Qué hardware, tipo y función, reconoce el knoppix? ¿Cuál es el nivel por defecto en el que entramos con la segunda opción indicada?

Los distintos niveles de arranque en un sistema Linux, tienen asociado un directorio en el que se encuentran enlaces a los diferentes guiones que se deben ejecutar.

¿Qué guiones de inicialización se está ejecutando cuando se entra en el nivel 1 (single)? ¿Y en el nivel por defecto?

En una distribución de linux con el sistema de archivos escribible, en el fichero /var/log/dmesg se guarda toda la información de arranque que aparece en el terminal, no siendo el caso de knoppix en el que este fichero está vacío.

Para cambiar de un nivel de ejecución a otro, no hace falta reiniciar el PC e indicarle al gestor de arranque el nivel deseado, sino que se puede hacer uso del comando "telinit" o "init" para ello (ver "man telinit" o "man init" para obtener información sobre estos comandos)

La personalización del arranque según las necesidades de un administrador, se puede realizar de dos formas diferentes:

  • Actuando sobre el fichero /etc/inittab
  • Actuando sobre los directorios /etc/rc.N, con N el nivel de ejecución deseado

Modificad el fichero /etc/inittab para que ejecute el programa login, en modo respawn, sobre el terminal /dev/tty4 en el nivel 4 de arranque. Los baudios con los que se debe lanzar el programa /sbin/getty son 38400. ¿Qué ocurre si en vez de poner el modo respawn ponemos el modo "wait"?

Realizad las acciones necesarias para ejecutar el guión que inicia el servidor Apache cuando se entra en el nivel 4

Realizad las acciones necesarias para asegurarnos que el servidor Apache no está en ejecución cuando entramos en el nivel 2.

Para finalizar las prácticas y, apagar el PC, el equipo debe ir al estado 0. Existen diversos comandos que realizan esta labor (halt, shutdown, telinit 0, init 0). ¿Qué comando ejecutarías, y con qué argumentos, para apagar el PC dentro de 30 segundos e informar a los usuarios del mismo con el mensaje "Se va a proceder, en 30 segundos, al apagado del equipo. Le ruego finalice su sesión de trabajo" ?

¿Qué diferencias encuentras en la ejecución de los distintos comandos enumerados en el párrafo anterior?

 

Página mantenida por el Departamento de Tecnología Informática y Computación 
Última actualización: 14-Dic-2001 
página principal enviar correo