
Captulo 8. Encendido y apagado.

Startmeup
Ah...you'vegotto...you'vegotto
Never,neverneverstop
Startitup
Ah...startitup,never,never,never
Youmakeagrownmancry,
youmakeagrownmancry
(RollingStones)

En esta seccin se explica lo que sucede en un sistema Linux al momento de encender o apagar la computadora, y de cmo debe hacerse apropiadamente. Si no se sigue el procedimiento adecuado, los archivos se pueden daar o perder.


8.1. Una introduccin al proceso de inicio y finalizacin del sistema

Al acto de encender un computador y cargar su sistema operativo se le llama en Ingls booting. El nombre viene de la idea del computador inicindose a s mismo sin ayuda. 

Durante el inicio, o bootstrapping, lo primero que el computador carga en memoria y ejecuta es un pequeo programa llamado cargador o bootstrap loader, el cual a su vez carga el sistema operativo en memoria e inicia su ejecucin. El cargador o bootstrap loader, se encuentra almacenado en una direccin fija dentro de un disco duro o en un floppy. La razn de que existan dos etapas en este proceso se debe a que el sistema operativo es grande y complicado, pero la primera pieza de cdigo que el computador carga debe ser muy pequea (unos cuantos cientos de bytes), para evitar que el firmware (su almacenamiento) sea innecesariamente complicado.

Diferentes tipo de computadoras realizan la primera etapa de inicio (bootstrapping) de manera distinta. Las computadoras de tipo PC'S (arquitectura x86) cuentan con un programa (BIOS: Basic Input Output System) que lee el cargador de arranque almacenado en el primer sector de un disco duro o un floppy (sector de arranque o boot sector). El cargador, al ejecutarse, carga el sistema operativo almacenado en otro lugar del disco (o ubicado en otro lugar).


El kernel Linux luego de que ha sido cargado en memoria y comienza a ejecutarse, inicializa el hardware y los controladores de los dispositivos. Por ltimo ejecuta el programa INIT. INIT a su vez inicia otros procesos que permite a los usuarios iniciar sesiones (log in) y trabajar dentro del sistema. Los detalles de esta parte del inicio del sistema sern descritos con mayor detalle en otro captulo.

Al finalizar un sistema Linux (shutdown), se le ordena a cada proceso terminar. Esto causa que los archivos sean cerrados y que se realicen otras tareas que sirven para mantener el sistema en orden. A continuacin se desmontan los sistemas de archivos y las reas de swap. Finalmente, se muestra un mensaje en la consola indicando que el equipo puede apagarse. Si no se sigue el procedimiento anterior pueden y sucedern cosas terribles. Lo mas problemtico que puede pasar, es que el buffer cach del sistema de archivos no sea escrito a disco (o a su medio de almacenamiento correspondiente), lo que significa que los datos contenidos en l se pierdan y que por lo tanto la informacin contenida en el sistema de archivos del disco sea inconsistente y posiblemente inutilizable.


8.2. Una mirada ms cercana al proceso de inicio

Puede iniciar su sistema Linux desde un disco duro o disquete. La seccin de instalacin de la Gua GNU/Linux: Instalacin y Primeros Pasos, se explica cmo instalar el sistema operativo para arrancar de un modo u otro.


Al encender una PC, el BIOS efecta varias pruebas al hardware para asegurarse que todo est bien [31], y luego empieza realmente el proceso de inicio del sistema operativo. El Bios selecciona una unidad de disco y lee su primer sector. Tpicamente, la unidad de disco seleccionada es la unidad de disquetes (y funciona si existe un disquete insertado booteable), de no ser as selecciona el primer disco duro, si existe un disco en la computadora (de todas maneras el orden de seleccin de unidad de discos es configurable en la mayora de las PC's). Al primer sector de un disco se le llama sector de arranque, en ingls boot sector o master boot sector (MBR o sector de arranque maestro). Si el disco contiene varias particiones, cada una de ellas tiene su propio sector de arranque (primer sector de cada particin).

El sector de arranque (boot sector) contiene un pequeo programa lo suficientemente pequeo para que quepa en un nico sector, cuya responsabilidad es leer el sistema operativo desde el disco, cargarlo en memoria y ponerlo en ejecucin. Cuando se inicia Linux desde un disquete, el sector de arranque contiene un cdigo que solamente lee los primeros cientos de bloques (dependiendo del tamao del kernel por supuesto) y los coloca en una ubicacin predeterminada en la memoria. En un disquete de inicio de Linux no existe un sistema de archivos, el kernel est simplemente almacenado en sectores consecutivos, lo que simplifica el proceso de arranque. Sin embargo es posible tambien arrancar desde un disquete con un sistema de archivos utilizando LILO, el cargador de Linux.

Al arrancar desde un disco duro, el cdigo contenido en el sector de arranque maestro (MBR o Master Boot Record), examina la tabla de particiones del disco duro (esta tabla tambin se almacena en el MBR), identifica la particin activa (aquella particin que ha sido designada como de inicio), lee el cargador contenido en el sector de arranque (boot sector) a una localizacin en memoria y lo ejecuta.

El cdigo almacenado en el sector de arranque de la particin del disco duro hace lo mismo que el contenido en el sector de arranque del diskette: lee el kernel desde la particin del disco duro, lo coloca en memoria e inicia su ejecucin. Sin embargo, existen diferencias. No es muy til mantener una particin exclusiva para almacenar la imagen del kernel, por lo tanto el cargador no se limita a leer de manera secuencial los sectores del disco, como lo hace en el caso de un floppy, sino que en el caso de un disco duro debe encontrar en qu lugar del sistema de archivos ha sido almacenado el kernel. Existen varias maneras de resolver este problema, pero la ms comn es utilizando LILO (consulte la documentacin de LILO si desea conocer mayores detalles de cmo LILO realiza esta tarea).


LILO normalmente lee, coloca en memoria y comienza la ejecucin del kernel Linux predeterminado. Es posible configurar LILo para que sea capaz de iniciar una de varias imgenes del kernel diferentes, o de otros sistemas operativos. De esta manera, tambin es posible que el usuario seleccione con cul de ellos trabajar al momento de iniciar el sistema.
Se puede configurar LILO, para que no inicie la carga del kernel predeterminado de manera inmediata y consulte cul kernel o sistema operativo debe iniciarse (esta configuracin necesita que se mantengan presionadas la teclas de alt, shift o ctrl cuando LILO comienza su ejecucin). Otra opcin consiste en configurarlo de manera que siempre consulte desde qu imagen o sistema se va a iniciar, y que transcurrido cierto tiempo de no recibir ninguna indicacin, arranque desde el kernel predeterminado.

Con LILO es posible "pasarle" al kernel informacin a travs de argumentos en la lnea de comandos (kernel command line argument), tecleando los argumentos despus del nombre del kernel o del sistema operativo que se desea utilizar.

Iniciar el sistema desde un disquete o desde un disco duro tienen ventajas diferentes, aunque generalmente iniciar desde el disco duro es mas agradable, ya que evita la incomodidad de lidiar con diskettes. Tambin es ms rpido. Sin embargo, en un principio puede ser complejo para algunos usuarios instalar el sistema para que arranque desde un disco duro. Por lo que, a veces se instala de manera que inicie desde un disquete y despus cuando el sistema est instalado de manera adecuada y todo funciona correctamente se instala el LILO para arrancar desde el disco duro.

Despus de que el kernel ha sido leido del disco, cargado en la memoria y puesto en ejecucin, pasa lo siguiente:

Se descomprime el kernel, ya que ste se almacena comprimido, al principio de la imagen del kernel, se encuentra un pequeo programa que se encarga de esta tarea.

Si la mquina cuenta con una tarjeta super VGA que Linux reconoce y soporta modos especiales de texto (tales como 100 columnas por 40 renglones), Linux pregunta cul es el modo que se desea usar. Al compilar de principio el kernel se puede determinar de antemano que modo de video usar, de manera que Linux nunca pregunte. Tambin se puede determinar mediante la configuracin de LILO o por el comando rdev.

Una vez realizado lo anterior, el kernel verifica qu otro hardware existe dentro de la mquina (discos duros, unidades de diskettes, tarjetas de red, adaptadores, etc...), y configura sus controladores de manera apropiada. Conforme lo va haciendo, enva mensajes a la consola acerca de lo que se va encontrando. Por ejemplo, al iniciar una computadora puede verse lo siguiente:

LILO boot:
Loading linux.
Console: colour EGA+ 80x25, 8 virtual consoles
Serial driver version 3.94 with no serial options enabled
tty00 at 0x03f8 (irq = 4) is a 16450
tty01 at 0x02f8 (irq = 3) is a 16450
lp_init: lp1 exists (0), using polling driver
Memory: 7332k/8192k available (300k kernel code, 384k reserved, 176k 
data)
Floppy drive(s): fd0 is 1.44M, fd1 is 1.2M
Loopback device init
Warning WD8013 board not found at i/o = 280.
Math coprocessor using irq13 error reporting.
Partition check:
  hda: hda1 hda2 hda3
VFS: Mounted root (ext filesystem).
Linux version 0.99.pl9-1 (root@haven) 05/01/93 14:12:20



El idioma y la forma exacta del texto es diferente en cada sistema, en funcin del hardware instalado, la versin de Linux que se est utilizando y como se ha establecido la configuracin del sistema.

A continuacin el kernel trata de montar el sistema de archivos raz (root filesystem, "/"). El punto de montaje se puede determinar al momento de compilar el kernel o despus mediante el uso de LILO o del comando rdev. El tipo del sistema de archivos se detecta automticamente. Si la accin de montar el sistema de archivos raz falla, por ejemplo debido a que no record incluir el controlador del sistema de archivos correspondiente dentro del kernel, el kernel entra en pnico y detiene la actividad del sistema operativo (de todas maneras, no puede hacer ms).

El sistema de archivos raz se monta en modo de slo lectura, lo anterior se determina al momento de compilar el kernel, lo que permite verificar el estado del sistema de archivos (filesystem check) al momento de ser montado. No es una buena idea verificar la integridad de un sistema de archivos que es montado en modo de lectura/escritura. 

El paso siguiente consiste en iniciar la  ejecucin del programa init (almacenado en /sbin/init) en segundo plano (background). El programa INIT siempre ser el proceso con ID 1. INIT realiza varias tareas relacionadas con el inicio del sistema. La manera exacta en que las realiza depende en cmo sea configurado. Puede leer el captulo 9 para obtener mayor informacin al respecto. Al menos, INIT iniciar algunos demonios en segundo plano esenciales.

Acto seguido, init cambia a modo multiusuario y ejecuta un getty (get tty) para las consolas virtuales y la lneas seriales. Getty es el programa  que permite a las personas iniciar sesiones (log in) a travs de las consolas virtuales y terminales conectadas via puertos seriales. INIT puede tambin ejecutar otros programas dependiendo del modo en que est configurado.

Despus de todas las etapas anteriores, el inicio de Linux est completo y el sistema se encuentra activo de manera normal.

8.3. Ms acerca de shutdowns

Es sumamente importante comprender y seguir los pasos correctos al momento de finalizar un sistema Linux. Si no realiza este procedimiento, sus sistemas de archivos se vern probablemente perjudicados y los archivos pueden quedar desordenados. Esto sucede porque Linux tiene un cache de disco que no escribe a disco cada vez que se le solicita, sino que solamente lo hace a intervalos. Esta manera de proceder mejora de manera significativa el desempeo del sistema, pero al mismo tiempo significa que si se apaga el equipo de imprevisto puede perder informacin que debera estar en sus sistemas de archivos (y obviamente en sus discos). Esto ltimo sucede porque la cache puede contener una gran cantidad de datos que se pierden con el apagado, y lo que est en el disco puede no ser un sistema de archivos totalmente funcional (debido a que solamente parte de la informacin ha sido transcrita de la cache al disco duro).

Una razn adicional para no desconectar directamente el sistema de la energa (presionando por ej. el botn de apagado) es que en un ambiente multitarea existen diversos procesos que se estn ejecutando en segundo plano, y desconectar la computadora en este momento puede ser desastroso. Utilizando el procedimiento correcto para el apagado del equipo garantiza que todos los procesos en segundo plano puedan guardar sus datos.
El comando para finalizar correctamente un sistema Linux es shutdown. Se utiliza generalmente de una de dos maneras diferentes:

Si Ud es el nico usuario del sistema, debe finalizar todos los programas que estn en ejecucin, finalizar todas las sesiones (log out) de todas las consolas virtuales, e iniciar una sesin como usuario root (o mantener la sesin si ya existe una, pero debe cambiar de directorio de trabajo al directorio HOME de root, para evitar problemas al desmontarse los sistemas de archivos). Finalmente ejecute el comando shutdown -h now. Si desea postergar durante algn lapso el comando shutdown, reemplace now con un signo + y un numero que indica minutos de espera.

Alternativamente, si el sistema est siendo utilizado por muchos usuarios, utilice el comando shutdown -h +time mensaje, donde time es el numero de minutos en que se posterga la detencin del sistema, y el mensaje es una explicacin breve de el porqu se est apagando el sistema.
# shutdown -h +10 'We will install a new 
disk.  System should
> be back on-line in three hours.'
#
El ejemplo advierte a todos los usuarios que el sistema se apagar en diez minutos, y que sera mejor que se desconectaran o se arriesgan a perder la informacin con la que estn trabajando. La advertencia se muestra en cada terminal donde existe un usuario conectado, incluyendo las xterms (emuladores de terminales para el sistema X Window).

Broadcast message from root (ttyp0) Wed Aug  2 01:03:25 1995...

We will install a new disk.  System should
be back on-line in three hours.
The system is going DOWN for system halt in 10 minutes !!

The warning is automatically repeated a few times before the boot, with shorter and shorter intervals as the time runs out.

Y se repite automticamente varias veces antes de pagar la mquina con intevalos cada vez ms frecuentes.

Despus del tiempo de postergacin, cuando el proceso de apagado real empieza, se desmontan todos los sistemas de archivos (excepto el sistema de archivos raz /), se finalizan (kill) los procesos de los usuarios (si existen an usuarios dentro del sistema), los demonios y finalmente se desmonta el sistema de archivos raz. Cuando todo este proceso finaliza, INIT muestra un mensaje indicando que se puede apagar la mquina. Es entonces y slo entonces que es posible bajar el switch (o interruptor de suministro elctrico).

Algunas veces, aunque es raro en un buen sistema, es imposible concluir el sistema de forma adecuada. Por ejemplo, si ocurre un error fatal con el kernel, puede ser imposible ejecutar cualquier comando nuevo, haciendo la finalizacin normal del sistema inviable. Todo lo que se puede hacer en este caso es esperar que ningn dao severo ocurra y entonces desconectar la mquina. Si los problemas son menos serios (digamos, alguien quebr su teclado con un hacha!), y el kernel y el programa update se encuentran en ejecucin normal, es aconsejable aguardar algunos minutos para que update tenga la chance de actualizar los discos con la informacin contenida en el buffer cach, y solamente despus desconectar el equipo.

A algunas personas les gusta apagar el equipo tecleando el comando sync tres veces, dando tiempo a que finalice la entrada y la salida del disco duro y entonces apagar el equipo. Si no hay programas en ejecucin, este mtodo es similar a utilizar el comando shutdown. Sin embargo, este procedimiento no desmonta los sistemas de archivos y puede acarrear problemas con la marca de "limpio" que algunos sistemas de archivos utilizan (filesystem clean flag), como por ejemplo ext2. El mtodo del triple sysnc no es recomendable.

Por pura curiosidad: la razn del triple sync viene de los das en que UNIX era joven, cuando los comandos fueron tipeados separadamente, y eso daba usualmente tiempo suficiente para que la entrada/salida a disco finalizara.


8.4 Reinicio (Rebooting)

Rebooting significa iniciar el sistema nuevamente. Se puede realizar finalizando el sistema, apagando la mquina y entonces encendiendo de vuelta. Un mtodo ms prctico para tener el mismo efecto consiste en indicarle al comando shutdown que reinicie el sistema, en vez de que lo detenga. La opcin -r del comando shutdown puede realizar la accin anterior, y puede utilizarse inmediatamente, por ejemplo: shutdown -r now.

La mayora de los sistemas Linux ejecutan el comando shutdown -r now cuando se oprime la combinacin de teclas ctrl-alt-del (y reinician el equipo). La manera de operar de ctrl-alt-del se puede configurar y es una buena idea postergar la accin durante algn tiempo antes de reiniciar una mquina multiusuario. Los sistemas en los que cualquier persona puede acceder fsicamente es conveniente configurar ctrl-alt-del para que no haga nada.
En algunos Linux tambin logramos el mismo efecto con el comando reboot.


8.5 Modo usuario individual (single user mode)

El comando shutdown tambin se puede utilizar para cambiar el nivel de ejecucin del sistema al nivel de modo de usuario individual (single user), en el cual nadie puede inciar una sesin de usuario, pero root puede utilizar la consola. Es til para efectuar tareas de administracin del sistema que no se pueden realizar cuando el sistema se ejecuta normalmente.


8.6 Disquetes de arranque para emergencias
No siempre es posible iniciar el sistema desde el disco duro. Por ejemplo, un error en la configuracin de LILO, puede ocasionar que sea imposible iniciar el sistema. En esas situaciones, es necesario tener una manera alternativa de iniciar el sistema que funcione siempre (si es que no es el hardware la causa del problema de inicializacin). Para las computadoras de tipo PC, esta alternativa es iniciar el sistema desde la unidad de disquete.

La mayora de las distribuciones de Linux permiten la creacin de un disco de arranque de emergencia (emergency boot floppy) al momento de efectuar la instalacin del sistema. Es conveniente aprovechar esta opcin. Sin embargo, se debe tener en cuenta que algunos de estos disquetes de arranque solo contienen el kernel y presuponen que emplear los programas que vienen en los discos de instalacin para resolver el problema.

Algunas veces eso puede no ser suficiente, por ejemplo si necesita recuperar archivos desde copias de seguridad realizadas con programas que no vienen en los discos de instalacin.

En estos casos es necesario crear uno o varios disquetes con un sistema de archivo raz personalizado (y que contenga todas las utilidades necesarias para casos de emergencia). El HOWTO Bootdisk de Graham Chapman contiene instrucciones de como hacerlos. Es importante tambin, recordar que los disquetes de arranque generados para casos de emergencias deben estar siempre actualizados.

No se puede utilizar la unidad de discos flexibles para para montar el disquete con el sistema de archivos raz (root filesystem root /) si esa misma unidad es la que utiliza para iniciar el sistema. Esto es un problema cuando slo contamos con una sola unidad de disquete. Sin embargo, si se tiene suficiente memoria, es posible configurar el diskette de arranque para que se cargue en un disco virtual en memoria (ramdisk). Cuando el diquete de arranque ha sido cargado en el disco virtual, la unidad de diskette es liberada y puede ser utilizada para montar otros disquetes.
