Capítulo 5
A. Proceso de inicio 1. La BIOS a. Papel La BIOS (Basic Input Output System) es un software de interfaz entre el hardware y el software a un nivel muy básico. Proporciona el conjunto de las instrucciones básicas utilizadas por el sistema operativo. Provee el nivel de interfaz más bajo a los drivers y periféricos. La BIOS está presente en una memoria EEPROM (Electrical Erasable Programmable Read-Only Memory) del ordenador. Cuando se enciende el ordenador, o tras un reseteado, se manda una señal llamada powergood al microprocesador. Éste activa entonces la ejecución de la BIOS. La BIOS efectúa un autochequeo del encendido (POST), luego busca los periféricos, en particular los utilizados para iniciar el sistema. A continuación se almacena la información relativa al hardware de manera permanente en una pequeña memoria CMOS alimentada por una batería. Al final de proceso, se selecciona el periférico de inicio. La BIOS lee y ejecuta el primer sector físico del soporte físico de inicio. Suele tratarse de los 512 primeros bytes del primer disco duro (el MBR) o de la partición activa (la PBR), como se describió en el capítulo Los discos y el sistema de ficheros.
b. Ajustes básicos Cada BIOS es diferente según los fabricantes de tarjetas madre y los editores (AMIBios, Phoenix, Award, etc.). Sin embargo, muchos de los ajustes son idénticos o, en todo caso, se parecen mucho. La detección de los discos duros y la elección del soporte de inicio se efectúan desde la BIOS. Linux soporta discos IDE, SATA y SCSI. No obstante, es posible que su juego de chips no reconozca el disco SATA. En este caso, la mayoría de las BIOS tienen como opción emular un IDE modificando el controlador de la SATA. Linux los reconocerá como tales. Es recomendable, sin embargo, probar una primera instalación con el soporte nativo de los discos SATA activado. En principio, Linux gestiona correctamente el soporte de los chipsets SATA compatibles AHCI (Advanded Host Controller Interface), un estándar para las especificaciones públicas. Active esta opción en la BIOS siempre que pueda. En ocasiones aparece con este nombre y, en otras, en modo nativo. Si nada funciona, intente el modo combined, y luego legacy IDE. Encontrará ayuda relativa al SATA en el sitio siguiente: http://linux-ata.org/faq.html Para ejecutar la instalación de Linux desde un CD-Rom o un DVD-Rom, debe modificar el orden de ejecución de manera que arranque primero desde el lector de CD o DVD.
294
Linux - Domine la administración del sistema
Inicio de Linux, servicios, núcleo y periféricos Si su teclado es de tipo USB, o sin cable pero con un adaptador sin cable USB, debe activar el USB legacy support (a veces esta función se llama USB DOS function o USB keyboard enable). Permite activar en el momento del inicio el soporte de los teclados, pero también los soportes de almacenamiento (claves, discos duros, tarjeta de memoria). Esto no impide que el sistema se encargue del USB: una vez iniciado el OS, los drivers USB del núcleo y de los módulos se encargan del USB. En principio, no tiene por qué tocar la configuración. Evite jugar al aprendiz de hechicero modificando la configuración avanzada del chipset y de otros recursos cuya utilidad no entiende. Sin embargo, con el fin de de ahorrar recursos, puede desactivar los puertos de la placa base que no utiliza: puerto paralelo, puerto serie, etc.
© Editions ENI - All rights reserved
Pantalla de la BIOS Phoenix que modifica el orden de boot El overclocking necesita un hardware especial: procesador, placa base, memoria y alimentación deben ser de alta calidad y el PC debe estar bien aireado. El overclocking es fuente de inestabilidad y cuelgues, tanto en Windows como en Linux. En particular, pone a prueba la memoria. Es la principal causa de inestabilidad. Incluso sin overclocking, resulta útil invertir en componentes de calidad.
Linux - Domine la administración del sistema
295
Capítulo 5 2. El gestor de arranque La BIOS activa el gestor de arranque inicial (Initial Program Loader, IPL) a partir de los primeros 512 bytes del soporte de arranque. En Linux, el cargador está compuesto de dos partes. El cargador inicial de los 512 bytes no contiene bastante código para proponer menús y ejecutar el sistema operativo. Carga un segundo gestor basado en un fichero de configuración. Este segundo gestor está provisto de una interfaz para ejecutar un sistema operativo de entre una selección dada. Puede aprovechar este gestor para pasarles parámetros al núcleo Linux y al proceso init. La BIOS sólo interviene en el inicio de la máquina, durante la utilización del cargador de inicio y en las primeras etapas del carga del núcleo. Luego, no sirve para nada más. El núcleo dispone de sus propias funciones de detección, aunque se apoye en la configuración de la BIOS. En efecto, ésta, bajo la plataforma Intel, se ejecuta en modo real, y Linux, en modo protegido.
3. GRUB a. Configuración En la mayoría de las distribuciones Linux, el cargador por defecto se llama GRUB (Grand Unified Bootloader). Se puede configurar en gran medida, en particular la protección mediante contraseña encriptada. Cuenta con un intérprete de comandos y con una interfaz gráfica. GRUB guarda las configuraciones en un fichero de texto y no es necesario volver a instalar GRUB tras cada modificación. A continuación presentamos un ejemplo de configuración a partir del supuesto de que la primera partición del primer disco es /boot y que la segunda contiene una instalación de Windows. timeout=10 default=0 title Red Hat root (hd0,0) kernel /vmlinuz-2.6.12-15 ro root=LABEL=/ initrd /initrd-2.6.12-15.img title Windows XP rootnoverify (hd0,1) chainloader +1
Esta tabla le muestra la sintaxis general de un fichero GRUB: Parámetro GRUB timeout default n
296
Significado Número de segundos antes del arranque por defecto. Arranque por defecto (0=1º título, 1=2º título, etc.).
Linux - Domine la administración del sistema
Inicio de Linux, servicios, núcleo y periféricos Parámetro GRUB gfxmenu title xxxx root(hdx,y)
kernel
initrd
rootnoverify chainloader +1
Significado Ruta hacia un menú gráfico. Principio de una sección, entrada del menú de GRUB. Se especificarán todos los accesos más abajo a partir de esta partición (ver el significado más adelante). Aquí, hd0,0 representa la primera partición del primer disco detectado por la BIOS. Es la partición /boot. El nombre de la imagen del núcleo de Linux, seguido de sus parámetros. La / no indica la raíz del sistema de ficheros, sino la de (hd0,0), por lo tanto /boot/vmlinuz... Initial ramdisk. Imagen de disco en memoria que contiene la configuración y drivers iniciales y que el sistema sustituirá cuando cargue los discos definitivos. La raíz especificada. No debe montarse con GRUB (no soporta NTFS). Inicia el primer sector de la raíz especificado más arriba.
Damos el significado de los nombres de periféricos en GRUB.
- (fd0): primer lector de disquetes detectado por la BIOS (/dev/fd0 en Linux). - (hd0,0): primera partición en el disco duro detectado por la BIOS, ya sea IDE o SCSI (/dev/hda1 o /dev/sda1 según los casos).
- (hd1,4): quinta partición en el segundo disco duro detectado por la BIOS (/dev/hdb5 o /dev/sda5).
b. Instalación La configuración de GRUB reside en /etc/grub.conf o /boot/grub/menu.lst (el primero es un vínculo al otro). El binario GRUB puede estar instalado en el MBR (Master Boot Record, los primeros 512 bytes de un disco) o un PBR (Partition Boot Record, los primeros 512 bytes de una partición).
© Editions ENI - All rights reserved
Para instalar o desinstalar GRUB en caso de que MBR esté corrompido, por ejemplo en /dev/sda, utilice el comando grub-install: # /sbin/grub-install /dev/sda
c.
Arranque y edición
En el momento del inicio de GRUB, se visualiza un menú. Puede ser gráfico o textual, según la configuración. Tiene que elegir una imagen de inicio entre las propuestas con las flechas de dirección. Pulsando la tecla [Intro], ejecuta la imagen seleccionada. Puede editar los menús directamente para modificar por ejemplo los parámetros pasados al núcleo de Linux o init. En este caso, seleccione una entrada de menú y pulse la tecla e (edit). Aquí se visualizan todas las líneas de la sección. Puede pulsar:
- e: para editar la línea (completarla); Linux - Domine la administración del sistema
297
Capítulo 5 - d: para suprimir la línea; - o: para añadir una línea; - b: para iniciar la imagen (booter). Por ejemplo, para iniciar en modo emergencia (emergency):
k Vaya a la línea Linux o Red Hat y pulse e. k Vaya a la línea kernel y pulse e. k Al final de la línea añada 1 o Single y pulse [Intro]. k Teclee b.
Puede acceder también a un intérprete de comandos pulsando [Esc]. ¡Cuidado! Sólo se reconocen los comandos GRUB.
4. Inicialización del núcleo Durante la carga del núcleo, el monitor le mostrará una tonelada de información. El sistema no la registra en esta etapa, pero en la siguiente, la etapa del init, Linux comienza a escribir registros en el fichero /var/log/dmesg.
-
Se detecta e inicializa el hardware. initrd está cargado, los módulos presentes se han cargado si es preciso. El núcleo monta el sistema de ficheros raíz en modo de sólo lectura. Crea la primera consola. Se ha iniciado el primer proceso (en general init).
Esquema de la secuencia de inicio
298
Linux - Domine la administración del sistema
Inicio de Linux, servicios, núcleo y periféricos Existen otros cargadores, entre los cuales el más usado hasta ahora era LILO (Linux Loader). Sin embargo, estos últimos años, GRUB lo ha sustituido casi por completo como consecuencia de sus numerosas limitaciones.
B. init 1. Función de init El programa init es el primer proceso iniciado y el último que se para dentro del sistema, y tiene como misión ejecutar todas las demás tareas. El papel inicial de init consiste en iniciar y parar todos los servicios. init ejecutará las diferentes tareas iniciales necesarias para el buen funcionamiento de Linux mediante la ejecución de varios comandos y scripts. Una vez iniciado el sistema y ejecutados los servicios, init sigue activo para gestionar los cambios de estado de los procesos que controla y de los niveles de ejecución. El programa init puede cambiar de una distribución a otra. En la mayoría de las distribuciones profesionales o mayores (Mandriva, Red Hat/Fedora, openSUSE, Debian, etc.), el principio sigue siendo más o menos el mismo: init de tipo System V (basado en la noción de niveles de ejecución). La distribución Ubuntu utiliza Upstart, que gestiona las prioridades, los eventos y dependencias entre los servicios, pero respeta el mismo principio. La distribución Slackware utiliza otro mecanismo inspirado en BSD. El proceso init es el padre de todos los procesos. Siempre tiene el PID 1. Su configuración está en el fichero /etc/inittab. Si este fichero está corrompido o es inutilizable, habrá que arrancar el sistema en modo single (S, s, 1 Single) y arreglarlo, o a lo peor arrancar desde un soporte externo o un disco de emergencia. Es un fichero central del sistema operativo.
© Editions ENI - All rights reserved
2. Nivel de ejecución Un nivel de ejecución, o runlevel, corresponde al estado en el cual se encuentra Unix/Linux. Init controla este estado. Cada estado dispone de su propia configuración (o por inittab, o por scripts llamados initscripts). Por ejemplo, se puede utilizar un nivel de ejecución para arrancar Unix en modo monousuario, en multiusuarios, con o sin red, con o sin modo gráfico. El administrador puede personalizar todos los niveles. Por convención, en las distribuciones Red Hat/Fedora, Mandriva, openSUSE y asociadas, se suelen definir estos niveles como a continuación: Nivel 0 1 2 3 4
Efecto Halt: para el sistema operativo, apaga la máquina. Modo monousuario utilizado para el mantenimiento, modo consola. Multiusuario, sin red, consola. Multiusuario, con red, consola. ídem que el 3, a conveniencia del administrador.
Linux - Domine la administración del sistema
299