La Secuencia de Arranque en LINUX La secuencia de arranque en Unix/Linux Lic. Sonia Rabelo Padua INTRODUCCIÓN Desde hace varios años, el Sistema GNU/Linux ha incursionado en los Sistemas Operativos de los grandes servidores de la red de redes. Cuba no está ajena al cambio necesario hacia la migración de este Sistema Operativo en las computadoras que conforman las Intranets de los Institutos Superiores Pedagógicos; en particular del ISPETP “Héctor A. Pineda Zaldívar” Dentro de la estrategia concebida para que los estudiantes de la carrera Licenciatura en Educación en la Especialidad Informática tengan bibliografía relacionada con el tema de software libre, GNU/Linux, los protocolos de trabajo entre otros, que favorecen el Proceso de Enseñanza-Aprendizaje en el Instituto, está la creación de artículos sobre estos temas.. La experiencia de la autora en al instalación del sistema operativo, así como el tiempo de explotación que llevan los servidores DNS con este sistema en el Instituto, le da la posibilidad de poder plasmar en este trabajo de forma clara y con los elementos necesarios para su comprensión, el proceso de arranque de la computadora en el sistema operativo Unix/Linux, una vez que es encendida la misma, existe la posibilidad de hacer entrar al sistema en diferentes estados, es decir, el sistema puede adoptar varios modos de operación conocidos como estados init. En Linux existen varias versiones de init, y cada una hace las cosas a su manera, una de las que pueden suceder cuando init arranca entre otros es el control de integridad del sistema de archivos. El proceso init obtiene sus instrucciones del fichero /etc/inittab (tabla de init). El contenido de este fichero controla todos los estados init y también determina que procesos deben ser regenerados cuando mueran. El fichero inittab es una base de datos típica de Unix. Cuando init comienza lee las líneas de fichero inittab por orden y toma una acción dependiendo del contenido de cada línea. DESARROLLO La Secuencia de Arranque en Unix/Linux Al encender la computadora sigue un proceso de arranque. Esta secuencia de arranque(boot) puede tardar varios minutos en dependencia del hardware y software instalado en la máquina y no hay modo de hacer que vaya más rápidamente. El proceso de arranque incluye varios chequeos de sanidad y con frecuencia trata de reparar cualquier daño, especialmente daño en los ficheros de disco rígido. La mayoría de las máquinas Unix tienen procedimientos internos para minimizar esta verificación de errores si la desconexión anterior se completó correctamente. Por tanto la secuencia de arranque después de una caída de potencia o de alguna otra desconexión inadvertida será probablemente más completa y compleja que un arranque después de una desconexión normal. En cualquier caso la secuencia de arranque suele ayudar a reparar los problemas del sistema. En el procedimiento de arranque, en primer lugar se ejecuta el cargador ROM, cuya responsabilidad es cargar las primeras partes del sistema operativo del disco, de echo, el cargador ROM carga otro programa cuyo trabajo es cargar el propio sistema Unix. Este software adicional cargador esta almacenado en el disco sistema, de modo que debe ser cargado por módulos hardware y ROM que existen permanentemente. Después que el cargador software es traído a memoria, la ROM cede el control y este comienza a ejecutarse. En este punto la máquina está obligada a ejecutar el sistema Unix, ya que el cargador software solo puede tratar con su propio sistema operativo. Cuando el cargador file:///C|/xampp/htdocs/Revista1520/Numeros/Vol%2005%20No%204/sonia.htm[05/10/2013 3:32:36] La Secuencia de Arranque en LINUX software comienza muestra el mensaje: Booting the UNIX System... Y carga entonces el núcleo(kernel) del sistema operativo, que es normalmente /unix. Como parte de la secuencia de inicialización, el núcleo puede visualizar cuanta memoria total real hay instalada en el sistema, si esta cantidad difiere de la cantidad de memoria física, si hay problema de hardware que debe ser reparado. El núcleo solamente se ocupa de administrar los otros programas, entonces cuando está satisfecho con que todo anda bien debe arrancar otro programa para que haga los trabajos útiles. El procedimiento de arranque en Unix se complica por la posibilidad de hacer entrar al sistema en diferentes estados, es decir, el sistema puede adoptar varios modos de operación conocidos como estados init, o como runlevel que son: ESTADO FUNCIÖN 0 Apagar la máquina 1 Modo de usuario único 2 Ficheros sin NTFS 3 Modo Texto 4 No usado 5 Modo Gráfico 6 Desconexión y arranque El estado más comúnmente utilizado es el modo multiusuario, este es el estado del sistema utilizado para casi todas las interacciones y el único que permite más de un usuario. Otro estado históricamente utilizado pero de raro uso hoy, es el modo de usuario único, puede ser utilizado para una actualización del kernel (núcleo) rápida. Para cada uno de los runlevel existen una determinada cantidad de servicios. Por omisión shutdown lleva la máquina al estado 0, preparando así la desactivación de la potencia del sistema. Sin embargo el argumento –i permite establecer explícitamente el estado init a uno de los estados disponibles. La mayoría de las versiones de shutdown solo soportan los estados init 0, 5 y 6. La orden telinit sirve para cambiar entre los estados. Por ejemplo la siguiente orden activará la comunicación por la red desde el estado 2 al 3, ej: # telinit 3 Tras la terminación de la inicialización interna, el sistema arranca el demonio /etc/init, el cual asume el control de arranque. El proceso init permanece activo durante todo el tiempo que el sistema este corriendo. Sirven varias funciones, la más importante es asegurarse que otros demonios del sistema estén en ejecución cuando deban. Una vez que el núcleo arranca init, no lanza ningún otro programa. El núcleo se transforma así en un administrador y proveedor, no en un programa activo. Por lo tanto, para saber que es lo que hace la computadora luego que el núcleo arranca, deberemos examinar init. La complicada secuencia de arranque por la que atraviesa init no es idéntica en todas las computadoras. Para Linux existen varias versiones de init, y cada una hace las cosas a su manera. Además también incluye si su maquina esta en red, e incluso cual distribución utilizó para instalar Linux. Algunas de las cosas que pueden suceder cuando init arranca son: · El control de integridad del sistema de archivos Un sistema de archivos es la disposición de los archivos en el disco rígido. Además permite que Unix sepa cuales partes del disco rígido están ocupadas y cuales no. Desafortunadamente, los cortes en el suministro de energía hacen que la información que el sistema de archivos tiene sobre la disposición en el disco de los archivos no coincida con la disposición real. Como el sistema Unix depende tanto de la sanidad del sistema de ficheros, existe una herramienta especial para verificarlo y repararlo. Se trata de la orden /bin/fsck (file system check), que esta reservada al super usuario. La orden fsck también puede ser ejecutada en la consola del super usuario, con el nombre del sistema de ficheros a verificar como argumento y especificarse el tipo de ficheros a verificar con la opción –f. La orden fsck ejecuta cinco fases diferentes que son: 1. Comprueba las tablas internas de tamaño real de los ficheros. file:///C|/xampp/htdocs/Revista1520/Numeros/Vol%2005%20No%204/sonia.htm[05/10/2013 3:32:36] La Secuencia de Arranque en LINUX 2. Verifica la sanidad de los nombres de camino de los directorios y de los ficheros. 3. Comprueba conectividad correcta entre ficheros y directorio padre. 4. Verifica la cuenta de enlace entre ficheros y sus nombres para asegurarse que los ficheros sean correctamente diferenciados. 5. Asegura que todos los bloques no referenciados estén correctamente introducidos en la lista de libres del sistema de ficheros. Cuando fsck encuentra un fichero o parte de un fichero que no está correctamente vinculado en el sistema de ficheros, lo revincula al sistema en un lugar especial, este lugar son los directorios /lost+found y /usr/lost+found si la máquina tiene dos sistemas de ficheros. El directorio /lost+found también aparecerá en discos flexibles que contengan el sistema de ficheros. Cuando init arranca además: · Se lanzan programas especiales de encaminamiento para las redes. Estos programas informan a su computadora cómo se supone que puede comunicarse con las otras. · Se borran los archivos temporales que crean ciertos programas. · Se actualiza correctamente el reloj del sistema. Esto es más complicado de lo que puede parecer, pues Unix de manera predeterminada, necesita la hora en UCT (Universal Coordinated Time), también conocido como hora de Greenwich, y el reloj de la CMOS, que es alimentado por una batería dentro de la computadora, muy probablemente estará configurado con la hora local. Esto significa que debe tener algún programa que lea la hora del reloj de la CMOS y la corrija transformándola en hora UCT. Después que init termina con sus actividades de arranque, comienza con sus tareas planificadas. Init se convierte así en el padre de todos los procesos del sistema Unix. Un proceso es simplemente un programa que está corriendo; como cualquier programa puede correr más de una vez, entonces puede haber más de un proceso para un programa dado en particular. En Unix, los procesos instancias de un programa, se crean mediante una llamada al sistema que es un servicio provisto por el núcleo denominada fork (bifurcación) pues un proceso se bifurca en dos independientes, init forkea (bifurca) unos cuantos procesos, los que a su vez forkean otros. En su sistema Linux con toda seguridad init corre varias instancias de un programa llamado getty, programa que le permitirá iniciar el ingreso al usuario, y que a continuación lanzará el programa login. A lo largo del proceso de arranque, Linux controla distintas partes del hardware y nos muestra mensajes indicativos de las mismas, como por ejemplo: This processor honours the WP bit even when in supervisor mode. Good. El proceso init obtiene sus instrucciones del fichero /etc/inittab (tabla de init). El contenido de este fichero controla todos los estados init y también determina que procesos deben ser regenerados cuando mueran. El fichero inittab es una base de datos típica de Unix, por líneas formadas por varios campos separadas entre sí por dos puntos “:”. Cuando init comienza lee las líneas de fichero inittab por orden toma una acción dependiendo del contenido de cada línea. La estructura inittab es la siguiente: · El primer campo de cada línea es un identificador que designa a cada línea y que debería ser único. · El segundo campo define los estados init para los cuales la línea está activa. Puede contener más de un estado, como en 23, que define la línea activa para los estados 2 y 3. Si no tiene contenido, esta línea estará activa en todos los estados init. · El tercer campo describe la acción que init tomará cuando se encuentre en uno de los estados indicados en el segundo campo. Estas acciones pueden ser: file:///C|/xampp/htdocs/Revista1520/Numeros/Vol%2005%20No%204/sonia.htm[05/10/2013 3:32:36] La Secuencia de Arranque en LINUX off ------------------ Eliminar la orden designada si existe Once --------------- Ejecutar el proceso cuando entre al estado designado sin esperar a que se complete. Wait --------------- Ejecutar el proceso cuando entre al estado designado esperando a que se complete. Boot ---------------- Ejecutar el proceso únicamente cuando init lee inittab en el tiempo de arranque, no esperando a que se complete el proceso. respawn ------------ Iniciar el proceso cuando entre a los estados designados y lo regrese cada vez que detecte que init ya no está ejecutándose. Existen algunas líneas en la tabla inittab que especifican guiones que se ejecutan cuando se solicitan estados específicos. Todos ellos son guiones shell y pueden ser inspeccionados si se desean, generalmente se ejecutará el /etc/rc2 (“run control” para el estado 2) ó ej. 10:0:wait:/etc/rc.d/rc=0 El rc.d es el directorio que tiene a su vez un conjunto de directorios donde tiene guardado para cada runlever los servicios que tiene que hacer. Ahí aparecen una serie de ficheros con su estado start ó kill y un número que indica la prioridad de ese servicio. La tabla inittab solo puede ser modificada por el super usuario, quien puede por ejemplo cambiar la acción respawn por off par desactivar un proceso, o hacer el cambio inverso para reactivarlo. En muchos sistemas los cambios efectuados en inittab no sobrevivirán a la adición de nuevo hardware, por lo que deberá actualizarse, con los cambios que se quieran, después de una instalación de hardware. El programa init lee el fichero inittab una sola vez, cuando se inicia. Si se modifica inittab, estos cambios no tienen efecto hasta que se informe a init que el fichero a cambiado. Esto se hace utilizando el programa telnit: # telnit q CONCLUSIONES 1. La secuencia de arranque de la computadora en UNIX/Linux; da la posibilidad a través del programa init de establecer diferentes estados, es decir los sistemas de operación de acuerdo a lo que necesita trabajar. 2. El programa init al arrancar da la posibilidad de: · Informar como se pueden comunicar las computadoras entre sí. · Borrar archivos temporales que crean ciertos programas. · Actualizar correctamente el reloj del sistema. BIBLIOGRAFIA · http://www.cybercursos.net/AdministracionUnix visitada en el 2006 · G.L.U.P. Guía de Linux Para el Usuario Copyright c 1993, 1994, 1996 Larry Green_eld file:///C|/xampp/htdocs/Revista1520/Numeros/Vol%2005%20No%204/sonia.htm[05/10/2013 3:32:36]