Sunteți pe pagina 1din 11

Prof. Dr.

Jorge Domnguez Chvez

Entendiendo el inicio de operaciones de LINUX


Todos los das, miles de usuarios de LINUX encienden sus computadores, esperan pocos segundos (o minutos dependiendo la velocidad de su CPU) para ver a su sistema operativo favorito cargar, y obtener la pantalla de bienvenida !!! Les causa un inmenso placer hacer log en su sistema operativo favorito y trabajar. El Proceso de arranque en LINUX es el proceso de arranque de un sistema operativo que en muchos aspectos es similar a los procesos de arranque de BSD1 y otros sistemas UNIX2, de los cuales deriva. Cules son los objetivos de este trabajo? 1. Ofrecer una descripcin bsica del trabajo interno y de las operaciones del ncleo (kernel) de LINUX en favor de los lectores. 2. Todos los archivos mencionados en este trabajo se refieren al ncleo de LINUX 3.2. Aunque estos archivos son comunes a todo UX* y pueden ser encontrados en cualquier sistema Linux, el autor utiliza la versin Debian Wheezy.

Proceso tpico
En LINUX, el flujo de control durante el arranque es desde el BIOS, al gestor de inicio y al ncleo (KERNEL). El ncleo inicia el planificador (para multitarea) y ejecuta el primer espacio de usuario (es decir, fuera del espacio del ncleo) y el programa de arranque (que establece el entorno de usuario y permite la interaccin del usuario y el inicio de sesin), momento en el que el ncleo se inactiva hasta ser llamado externamente. La etapa del cargador de inicio no es totalmente necesaria. Determinados BIOS pueden cargar y pasar el control a LINUX sin hacer uso del cargador. Cada proceso de arranque ser diferente dependiendo de la arquitectura del procesador y el BIOS. 1. El BIOS realiza las tareas de inicio especficas del hardware. 2. Una vez que ste es reconocido y se inicia correctamente, el BIOS carga y ejecuta el cdigo de la particin de arranque del dispositivo de arranque designado, que contiene la fase 1 de un gestor de arranque LINUX. La fase 1 carga la fase 2 (la mayor parte del cdigo del gestor de arranque). Algunos cargadores pueden utilizar una fase intermedia (conocida como fase 1.5)
1 Berkeley Software Distribution o BSD (en castellano, distribucin de software Berkeley) es un sistema operativo derivado del sistema UNIX generado por los aportes realizados a ese sistema por la Universidad de California en Berkeley, USA. 2 Unix (registrado oficialmente como UNIX) es un sistema operativo portable, multitarea y multiusuario; desarrollado, en principio, en 1969, por los Laboratorios Bell de ATT.

3.

4.

5. 6.

para lograr esto, ya que los modernos discos de gran capacidad no pueden ser totalmente ledos sin cdigo adicional. El gestor de arranque, a menudo, presenta al usuario un men de opciones posibles de arranque. Luego, carga el sistema operativo, al que descomprime en la memoria y establece las funciones tanto del sistema como del hardware esencial y la paginacin de memoria, previo a llamar a la funcin start_kernel(). A continuacin, la funcin start_kernel()realiza la mayor parte de la configuracin del sistema (interrupciones, el resto de la gestin de memoria, la inicializacin del dispositivo, controladores, etc), antes de continuar, por separado el proceso, inactivo y planificador, as como el proceso de Init (que se ejecuta en el espacio de usuario). El planificador toma control efectivo de la gestin del sistema y el ncleo queda inactivo. El proceso Init ejecuta los comandos (scripts) necesarios para configurar todos los servicios y estructuras que no sean del sistema operativo, a fin de permitir que el entorno de usuario sea creado y pueda presentarse al usuario con una pantalla de inicio de sesin.

En el apagado, Init es llamado a cerrar las funcionalidades del espacio de usuario de una manera controlada, a travs de secuencias de comandos, tras lo cual termina y el ncleo ejecuta el apagado.

Espacio de usuario temprano


El espacio de usuario temprano se utiliza en versiones recientes del ncleo de LINUX para sustituir tantas funciones como sea posible, funciones que originalmente se cargaran en el ncleo durante el proceso de inicio. Los usos tpicos del espacio de usuario temprano son para detectar los controladores de dispositivos (Drivers) necesarios para cargar el sistema de archivos del espacio de usuario principal y cargarlos desde un sistema de archivos temporal. Este espacio, el cual es externo al ncleo se refiere a un espacio de aplicacin, tpicamente UNIX o en sistemas operativos UX*. Algunas veces, la expresin espacio de usuario puede referirse a una aplicacin que lleva a cabo sus propias llamadas al sistema o su propia entrada y salida (E/S). Por lo comn, como parte de una aplicacin, har llamadas al sistema y a otras actividades del sistema desde el ncleo. En el sentido jerrquico del sistema de archivos, el espacio de usuario se refiere a cualquier espacio de almacenamiento en disco del sistema que no es parte de su almacenamiento crtico, es decir, el espacio de almacenamiento de los usuarios, como sus documentos personales y otros datos no crticos. En los sistemas Unix reside en los directorios /home, /export/home o /usr/home.

Proceso en detalle
Como primer punto revisamos el proceso de carga o boot process del Sistema Operativo LINUX. Vemos que LINUX pasa por diferentes etapas de carga. Comprender como LINUX carga es muy importante en trminos de manejo efectivo de los errores en caso de que el proceso falle. Averiguar lo que ha pasado y pasa en las etapas de la secuencia de arranque es de suma importancia para un buen funcionamiento de su computador y de su sistema operativo LINUX. En LINUX hay 6 etapas de carga, vea la figura 1. Luego se discuten esas etapas en detalle.

Figura 1: Proceso de inicio de carga en LINUX

BIOS (Sistema Bsico de Entrada Salida)


1. Encendido del pc, el hardware transfiere el control a BIOS. 2. BIOS es el primer programa en ejecutarse y es independiente del Sistema Operativo. 3. BIOS reside en la ROM (Memoria slo Lectura). 4. El primer paso de BIOS es Potenciar Autoprueba (POST) el cual recorre la informacin del hardware y verifica el inicio de carga (bootloader). 5. Recorre los dispositivos de almacenamiento de datos (Floppy, CD y/o DVD, y USB). Durante el perodo de recorrido, el usuario puede presionar las teclas (F2, F12 esto dependen de su computadora) para cambiar la secuencia de carga de su sistema. 6. BIOS lee el primer sector del disco duro, al que se denomina sector de carga y donde reside el proceso de inicio de carga (bootloader). Una vez que ste es detectado, carga la BIOS y pasa el control al bootloader, luego se inicia el siguiente nivel en la secuencia de carga.

MBR (Registro Maestro de Carga)


1. Un registro de inicio principal, tambin conocido como registro maestro de inicio o master boot record (abreviado MBR) es el primer sector ("sector cero") de un dispositivo de almacenamiento de datos, como un disco duro, cd, dvd, usb. A veces, MBR se emplea para el inicio del sistema operativo con bootstrap, otras veces es usado para almacenar una tabla de particiones y, en ocasiones, se usa slo para identificar un dispositivo de disco individual, aunque en algunas mquinas esto ltimo no se usa y es ignorado. 2. En la prctica, el MBR casi siempre se refiere al sector de inicio de 512 bytes, o el sector de particin de una particin para computadores compatibles con IBM PC. Debido a la amplia implementacin de computadores PC clones, este tipo de MBR se usa mucho, hasta el punto de ser incorporado en otros tipos de computador y en nuevos estndares multiplataforma para el particionado y el inicio. Ver siguiente tabla.

Almacenamiento de un master boot record estndar Direccin 0x0000 0x01B8 0x01BC 0x01BE 0x01FE Descripcin rea de cdigo 4 bytes; firma del disco (opcional) 2 bytes; normalmente 0x0000 Tabla de particiones3 primarias, cada entrada es de 16 bytes (esquema estndar de la tabla de particiones del MBR) 2 bytes; firma del MBR (0x55AA)

3. MBR tiene un tamao de 512 bytes, divididos en tres componentes: 1. Los primeros 446 bytes son el iniciador de carga primario (slo cdigo ejecutable). 2. Los siguientes 64 bytes son informacin de la tabla de particiones. 3. Los ltimos 2 bytes son usados como nmero mgico (validacin verificacin de MBR). Primer sector fsico del disco (pista cero) 446 bytes 64 bytes 2 bytes Cdigo mquina (gestor de inicio) Tabla de particiones (4 registros que definen cada una de las particiones primarias) Firma de unidad de inicio ("55h AAh" en hexadecimal) Registro de la tabla de particiones - 16 bytes Offset 0x00 0x01 0x04 0x05 Descripcin Binario codificado en decimal Ms binario, Cabezal, Sector (CHS) del primer sector en la particin. Tipo de particin Cilindro, Cabezal, Sector (CHS) del ltimo sector de la particin.

3 Una particin de un disco duro es una divisin lgica en una unidad de almacenamiento (por ejemplo un disco duro o unidad flash), en la cual se alojan y organizan los archivos mediante un sistema de archivos. Existen distintos esquemas de particiones para la distribucin de particiones en un disco. Los ms conocidos y difundidos son MBR (Master Boot Record) y GPT (GUID Partition Table). Las particiones, para contener datos tienen que poseer un sistema de archivos. El espacio no asignado en un disco no es una particin, por lo tanto no puede tener un sistema de archivos. Existen mltiples sistemas de archivos, con diferentes caractersticas, como FAT, NTFS, FAT32, EXT2, EXT3, EXT4, Btrfs, FedFS, Reise, Reiser4 y otros. Los discos pticos (DVD, CD) utilizan otro tipo de particiones llamada Formato de Disco Universal ( UDF o Universal Disc Format), el cual agrega archivos y carpetas y es por ello que es usado por la mayora de software de escritura por paquetes, conocidos como programas de grabacin de unidades pticas. Este sistema de archivos es obligatorio en unidades de (DVD) pero tambin se admiten en algunos (CD)

0x08 0x0C

(4 bytes) Logical block address del primer sector de la particin (4 bytes) Longitud de la particin, en sectores

4. Bootloader puede residir en el MBR o en cualquier otra localidad. 5. MBR contiene informacin de GRUB/LILO y ejecuta su carga.

GRUB (GRand Unified Bootloader)


1. GRUB se carga y se ejecuta en 4 etapas: 1. La primera etapa del cargador la lee el BIOS desde el MBR. 2. La primera etapa carga el resto del gestor de arranque (segunda etapa). Si la segunda etapa est en una unidad grande, en ocasiones se carga una fase intermedia 1.5, que contiene cdigo adicional para permitir que los cilindros por encima de 1024, o unidades tipo LBA, puedan leerse. El gestor de arranque 1.5 es almacenado (si es necesario) en el MBR o en la particin de arranque. 3. La segunda etapa del gestor de arranque ejecuta y muestra el men de inicio de GRUB que permite al usuario elegir un sistema operativo y examinar y modificar los parmetros de inicio. 4. Despus de elegir un sistema operativo, se carga y se le pasa el control. GRUB soporta mtodos de arranque directo, arranque chain-loading, LBA, ext2, ext3, ext4 y hasta "un pre-sistema operativo en mquinas x86 totalmente basado en comandos". Contiene tres interfaces: un men de seleccin, un editor de configuracin y una consola de lnea de comandos. 2. GRUB tiene su propio men e interface y tiene la capacidad de navegar por el sistema de archivos. 3. Muestra una lista de los ncleos (kernel) disponibles definidos en /etc/grub.conf. Provee las opciones para elegir uno de ellos s una imagen mltiple de ncleos est instalada. Configuracin El archivo de configuracin GRUB es /boot/grub/menu.lst. Algunas veces ver referencias a /etc/grub.conf, pero el archivo no existe en Debian (al menos en mi laptop) Debe contener, al menos, las siguientes lineas: default=0 timeout=30 # To boot the default kernel title Debian LINUX root (hd0,1) kernel /boot/vmlinuz root=LABEL=/ initrd /boot/initrd.img

Revisin rpida de comandos default: SO por defecto a cargar, si no presiona las teclas (F2, F12) para cambiar la secuencia de carga de su sistema. Note que es la primera linea contiene un 0. timeout: tiempo en segundos de espera antes que el sistema operativo por defecto sea cargado. Title: Texto que es mostrado en el men. Inicia una seccin de SO hasta que otra linea Title es encontrada. Root: La particin donde el directorio /boot est. Todos los caminos sern relativos a la particin, as que no es necesario especificarla para cada archivo. Kernel: es la imagen del ncleo de LINUX a ser cargada con sus opciones. Initrd: es la imagen initrd para cargar el ncleo. Notar que el comando root no est relacionado con el parmetro root para el ncleo de LINUX. Root especifica que particin tiene los caminos relativos. S tiene una particin /boot en (hd0,0) entonces: root (hd0,0) kernel ''vmlinuz root=LABEL='' es la misma que: kernel (hd0,0)/vmlinuz GRUB nombres de dispositivos y particiones Grub usa nmeros para nombrar discos duros y particiones, empezando con 0. esto confunde un poco al usuario LINUX para llamar hda1 al primer disco primera particin. Vea la siguiente tabla. LINUX grub First IDE bus, master First IDE bus, master, first primary partition First IDE bus, slave, first extended partition hda hda1 hdb5 hd0 hd0,0 hd1,4

1. GRUB muestra una ventana de inicio y espera pocos segundos para intervenir, si no carga la imagen por defecto del ncleo. 2. GRUB Bootloader inicia el ncleo y carga la imagen initrd. Ncleo (Kernel) 1. Mount sistema de archivos root. 2. Ncleo inicia proceso INIT. primer proceso iniciado por el ncleo el cual cual tiene Process ID4 (PID) de 1. 3. Carga mdulo initrd. initrd (disco RAM inicial) es un sistema de archivos temporal root cargado en la RAM hasta que el sistema de archivos root sea montado.
4 PID es la abreviatura de Process ID es decir es el identificador de un proceso, un numero que identifica de manera inequvoca a un proceso.

INIT
1. INIT (padre de todos los procesos). 2. INIT (abreviatura para inicializacin) demonio5 (deamon) que genera los otros procesos. 3. INIT lee el archivo /etc/inittab pro instrucciones para proceder. 4. Aqu el inittab de Debian Wheezy. # /etc/inittab: init(8) configuration. # $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $ # The default runlevel. id:2:initdefault: # Boot-time system configuration/initialization script. # This is run first except when booting in emergency (-b) mode. si::sysinit:/etc/init.d/rcS # What to do in single-user mode. ~~:S:wait:/sbin/sulogin # /etc/init.d executes the S and K scripts upon change # of runlevel. # # Runlevel 0 is halt. # Runlevel 1 is single-user. # Runlevels 2-5 are multi-user. # Runlevel 6 is reboot. l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 l4:4:wait:/etc/init.d/rc 4
5 La palabra demonio viene de DAEMON (Disk And Execution Monitor) que es un tipo especial de proceso informtico que se ejecuta en segundo plano en lugar de ser controlado directamente por el usuario (es un proceso no interactivo). Los programadores de Unix adoptaron este nombre para referirse a estos procesos y como son afectos a las siglas y a los acronimos recursivos extendieron su uso.

l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6 # Normally not reached, but fallthrough in case of emergency. z6:6:respawn:/sbin/sulogin # What to do when CTRL-ALT-DEL is pressed. ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now # Action on special keypress (ALT-UpArrow). #kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work." # What to do when the power fails/returns. pf::powerwait:/etc/init.d/powerfail start pn::powerfailnow:/etc/init.d/powerfail now po::powerokwait:/etc/init.d/powerfail stop # /sbin/getty invocations for the runlevels. # # The "id" field MUST be the same as the last # characters of the device (after "tty"). # # Format: # <id>:<runlevels>:<action>:<process> # # Note that on most Debian systems tty7 is used by the X Window System, # so if you want to add more getty's go ahead but skip tty7 if you run X. # 1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3 4:23:respawn:/sbin/getty 38400 tty4 5:23:respawn:/sbin/getty 38400 tty5 6:23:respawn:/sbin/getty 38400 tty6

# Example how to put a getty on a serial line (for a terminal) # #T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 #T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100 # Example how to put a getty on a modem line. # #T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3 1. Runs scripts /etc/rc.d/*

Programas Runlevel
Existen 7 runlevel, numerados del 0 al 6, aunque es posible crear ms, cada uno tiene su propio significado en LINUX. Los diferentes niveles son los siguientes: 1. Run Level 0 Halt (detener) 2. Run Level 1 Single user mode (modo nico usuario) 3. Run Level 2 Multiuser but without NFS (multiusuario sin NFS) 4. Run Level 3 Full multiuser mode (Modo multiusuario completo) 5. Run Level 4 unused / User-definable (no usado/ definible por el usuario) 6. Run Level 5 X11 (ambiente grfico) 7. Run Level 6 reboot (recargar) De acuerdo con la configuracin del nivel de ejecucin por defecto, el sistema lee y ejecuta los programas de los siguientes directorios. 1. Run Level 0 /etc/rc.d/rc0.d/ 2. Run Level 1 /etc/rc.d/rc1.d/ 3. Run Level 2 /etc/rc.d/rc2.d/ 4. Run Level 3 /etc/rc.d/rc3.d/ 5. Run Level 4 /etc/rc.d/rc4.d/ 6. Run Level 5 /etc/rc.d/rc5.d/ 7. Run Level 6 /etc/rc.d/rc6.d/ /etc/rc0.d/ es enlazado al directorio /etc/rc.d/rc0.d/. Dentro el directorio /etc/rc.d/rc0.d/ puede ver programas cuyo nombre empieza con S y K lo que significa startup y kill respectivamente. Tambin, hay un nmero secuencial a S y K. Estos nmeros son la secuencia programas de inicio a travs de started o killed durante la carga. El runlevel 0 es la condicin de apagado del sistema. La mayora de computadores actuales se apagan al llegar a este nivel. El 1 es conocido como de mono-usuario o usuario nico. Suele llamarse modo de rescate (rescue mode

o trouble-shooting). En este nivel no ejecuta ningn servicio o demonio. Normalmente es posible iniciar el sistema en modo rescate desde el GRUB, o aadiendo la palabra single al final de la lnea de comandos del kernel. Del runlevel 2 al 5 son modos multiusuario, y el modo usado por defecto. Si 0 es la condicin de apagado, 6 es reinicio del sistema. Exactamente igual que el runlevel 0 salvo que reinicia al terminar la secuencia en lugar de apagar. Dnde residen los Run Level? Estn definidos mediante archivos, como en todo sistema LINUX, se encuentran en el directorio /etc: /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d ls /etc/rc2.d/ README S01motd S13rpcbind S14nfs-common S18acpid S18acpi-support S18anacron S18atd S18postgresql S18rsync S18ssh S20gdm3 S20pulseaudio S21bootlogs S22laptop-mode S22minissdpd S22rmnologin S22rc.local S22teamviewerd Run level 0 Run level 1 Run level 2 Run level 3 Run level 4 Run level 5 Run level 6

Observe el contenido del runlevel 2:

S18speech-dispatcher S20saned

S16acpi-fakekey S18battery-stats S19avahi-daemon S16binfmt-support S18clamav-freshclam S19bluetooth S16rsyslog S16sudo S17apache2 S18cron S18dbus S18mysql S19exim4 S20cups

S19network-manager

Cada archivo es un enlace simblico a su respectivo script residente en /etc/init.d. Estos scripts controlan la detencin o inicio de un servicio. El nombre de los enlaces de estos directorios puede ser poco intuitivos al principio, pero vea su significado, la sintaxis es: [K | S] + nn + [string] Es decir, la primera letra del nombre es una K o una S, seguidas de un nmero de dos dgitos, del 01 al 99 y por ltimo una cadena de texto. La K significa que el servicio ser detenido al entrar al runlevel (Kill), la S para iniciarlo (Start). El nmero indica la prioridad del servicio dentro del runlevel, por ejemplo, S02apache y S01php inicia primero php y luego apache. Si dos servicios tienen el mismo orden de prioridad numrico, se procede en orden alfabtico.

Cmo determinar en qu runlevel se encuentra el sistema? El comando runlevel muestra el ltimo runlevel que fue ejecutado, y el actual: runlevel N2 N significa Nada, informando que no ha habido cambio de runlevel desde que inici el sistema, 2 es el runlevel actual. Para ir de un runlevel a otro ejecute el comando telinit seguido del nmero del runlevel deseado. Aunque sea correcto, se recomienda no apagar o reiniciar el sistema cambiando a los runlevel 0 o 6. Cmo agregar un servicio a un runlevel? Si desea agregar un servicio a un runlevel deberemos usar el comando update-rc.d. S requiere que nginx o Apache se ejecuten en cada inicio del sistema, basta con agregarlos a los runlevel 2-5, correspondientes al modo multiusuario: # update-rc.d nginx start 90 2 3 4 5 . stop 01 0 1 6 . El 90 es el nmero de prioridad para el inicio (S90nginx) aplicado a los runlevles 2-5, 01 para la prioridad de detencin (K01nginx) en los runlevel 0 1 y 6. Lo ms sencillo es aplicar los valores por defecto con # update-rc.d nginx defaults

Referencias
1. Ohloh Analysis Summary - GNU GRU. 2. Sitio oficial de GNU GRUB (en ingls) 3. GRUB Manual - 1.2 Grub History (en ingls) 4. Pgina del Proyecto PUPA (en ingls) 5. GRUB 2 en Ubuntu 9.10 Karmic Koala

Enlaces externos
Configuracin de GRUB, una gua bsica (para GRUB Legacy) GAG, Gestor de Arranque Grfico GNU GRUB Manual 1.99 (en ingls) GRUB - Gua Ubuntu GrubWiki Command List (Comandos para ambas versiones de GRUB, en ingls) Grub from the Ground Up (en ingls) Recuperar GRUB - Gua Ubuntu GRUBack: utilidad para recuperar GRUB sin salir de Windows

LILO homepage (en ingls). LILO mini-HOWTO (en ingls). LILO error messages (en ingls).

S-ar putea să vă placă și