Linux #02.07 Arranque y Servicios en Linux

Niveles de Arranque y Servicios
Fichero /Etc/Inittab
Comando Init
Arranque del Sistema con Diskete
Configuraci贸n del Gestor de Arranque LILO
Configuraci贸n del Gestor de Arranque GRUB

Niveles de Arranque y Servicios

Linux utiliza el arranque INIT de Sys; init es el primer proceso que se ejecuta en el sistema, del cual dependen los dem谩s. Es importante conocer el funcionamiento de los llamados niveles de ejecuci贸n(o runlevels), y en los servicios que se proporcionan en cada nivel.

Un servicio es una funcionalidad proporcionada por la m谩quina. Se activan y se paran a trav茅s de scripts. La configuraci贸n de los servicios se suele tener en el directorio /etc, los scripts est谩n en /etc/init.d/, aqu铆 podemos encontrar scripts con nombres parecidosa los servicios y suelen aceptar par谩metros de activaci贸n y parada.

/etc/init.d/servicio start arranque del servicio.

/etc/init.d/servicio stop parada del servicio.

/etc/init.d/servicio restart parada y posterior arranque del servicio.

Cuando arrancamos un sistema GNU/Linux se arranca el kernel y a continuaci贸n se arranca el proceso init, que es el encargado de ejecutar y activar el resto del sistema a trav茅s de unos niveles de ejecuci贸n.

Nota: Se llama nivel de ejecuci贸n a la configuraci贸n de programas y servicios que ser谩n ejecutados orientados a un determinado funcionamiento.

Runlevel Funci贸n Descripci贸n (Ver fotograf铆a)

Estos niveles suelen estar configurados en los sistemas GNU/Linux (y UNIX) por dos sistemas diferentes, el BSD, o el System V.

El modelo runlevel de System V, utiliza un fichero de configuraci贸n llamado /etc/inittab para decidir el runlevel del cual vamos a arrancar el sistema.

Seg煤n el runlevel escogido el sistema dispone de otros ficheros contenidos en /etc/rcn.d, donde n es el n煤mero de runlevel, en donde se encuentra la lista de servicios por activar o parar. Dentro de estos directorios se encuentran una serie de scripts o enlaces a scripts de los servicios.

Los scripts tienen un nombre relacionado con el servicio, una S o K inicial que indica si es el script para iniciar (S) o matar (K) elservicio, y un n煤mero que refleja el orden en que se ejecutar谩n los servicios.

Existen algunos comandos que sirven para manejar los niveles de ejecuci贸n.

  • Los scripts del directorio /etc/init.d/ nos permiten arrancar, parar o reiniciar servicios individuales.
  • telinit, permite cambiar el nivel de ejecuci贸n, 煤nicamente habr谩 que indicar el n煤mero. Por ejemplo si tuvi茅ramos que hacer una tarea como root, sin usuarios trabajando, har铆amos un telinit 1, y pasamos al modo monousuario. Para volver al modo multiusuario pondremos telinit 3. Tambi茅n puede utilizarse el comando init para la misma tarea.
  • shutdown, permite parar (鈥檋鈥 de halt) o reiniciar el sistema (鈥檙鈥 de reboot).
  • wall, permite enviar mensajes de advertencia a los usuarios del sistema.
  • pidof, permite averiguar el PID (process ID) asociado a un proceso.

Respecto a todo el modelo de arranque, las distribuciones presentan alg煤n peque帽o cambio:

  • Red Hat: el runlevel 4 no tiene un uso declarado. Los directorios son: /etc/rc.d/rcn.d. El runlevel por defecto es el 5 con arranque con X.

En el fichero /etc/sysconfig se encuentran los archivos que especifican valores por defecto de la configuraci贸n de dispositivos o servicios. El gui贸n /etc/rc.d/rc.sysinit es invocado cuando el sistema arranca; el gui贸n /etc/rc.d/rc.local se invoca cuando finaliza el proceso de carga y sirve para indicar configuraciones espec铆ficas de la m谩quina.

El arranque de los servicios se hace por medio de los scripts almacenados en /etc/rc.d/init.d. Red Hat proporciona unos scripts de utilidad para manejar servicios: /sbin/service para parar o iniciar un servicio por el nombre; y /sbin/chkconfig, para a帽adir enlaces a los ficheros S y K necesarios para un servicio.

  • Debian dispone de comandos de gesti贸n de los runlevels como updaterc.d, permite instalar o borrar servicios arranc谩ndolos o par谩ndolos en otros runlevels.

El runlevel por defecto en Debian es el 2, el X Window System no se gestiona desde /etc/inittab, existe el gestor como un servicio m谩s del runlevel 2.

Fichero /etc/inittab

Para Init es necesario un fichero de configuraci贸n que le indique lo que debe hacer, /etc/inittal. Este fichero contiene informaci贸n del nivel por defecto a ejecutar, previsi贸n ante determinadas situaciones, describe los procesos que se cargan en el inicio y arranque.

/etc/inittab tienen el siguiente formato:

Id:Niveles_Ejecuci贸n: Acci贸n:Proceso

  • id: Una secuencia 煤nica de 1 a 4 caracteres que identifican la entrada de inittab
  • niveles_ejecuci贸n: Lista de niveles de ejecuci贸n para los que se llevar谩n a cabo las acciones definidas a continuaci贸n en la l铆nea.
  • acci贸n: La acci贸n se llevar谩 a cabo.
  • proceso: El proceso a ejecutar.

Las acciones que podemos definir en el campo acci贸n son:

initdefault: Especifica el nivel de ejecuci贸n por defecto al arrancar el sistema.

Respawn: El proceso se reiniciar谩 cuando termine.

once: El proceso se ejecutar谩 una sola vez cuando se entre en el nivel de ejecuci贸n especificado.

wait: El proceso se iniciar谩 una vez cuando se entre en el nivel de ejecuci贸n e init esperar谩 a su terminaci贸n.

boot: El proceso se ejecutar谩 durante el arranque del sistema.

bootwait: El proceso se ejecutar谩 durante el arranque del sistema, mientras init espera su terminaci贸n.

sysinit: El proceso se ejecutar谩 durante el arranque del sistema, antes que cualquier entrada boot o bootwait. El campo niveles_ejecuci贸n se ignora.

powerwait: El proceso se ejecutar谩 si init recibe una se帽al SIGPWR, que indica alg煤n聽 problema con la alimentaci贸n el茅ctrica. Init esperar谩 que el proceso termine.

powerfail: Como powerwait, excepto que init no espera a que termine el proceso.

powerokwait: El proceso se ejecutar谩 si init recibe la se帽al SIGPWR, con la condici贸n de que haya un fichero llamado /etc/powerstatus que contenga la palabra OK. Esto significa que se ha restablecido la alimentaci贸n el茅ctrica.

ctrlaltdel: Especifica qu茅 proceso se ejecutar谩 al pulsar la combinaci贸n de teclas [Ctrl+Alt+Supr]. Normalmente, reiniciar la m谩quina.

Comando Init

Podemos ejecutar init desde l铆nea de comandos con alguno de los siguientes argumentos:

0, 1, 2, 3, 4, 5, 6: Para cambiar al nivel de ejecuci贸n especificado.

Q, q: Si queremos que init relea el fichero /etc/inittab.

S, s: Entra en modo monousuario.

U, u: Reejecuta init respetando el estado actual. No se relee el fichero /etc/inittab.

02.07

Arranque del Sistema con Disquete

Es posible arrancar Linux utilizando un 芦disquete de arranque禄 que contiene una copia del n煤cleo de Linux. Este n煤cleo tiene la partici贸n ra铆z de Linux codificada en 茅l, para que sepa donde buscar en el disco duro el sistema de ficheros ra铆z. (El comando rdev puede ser utilizado para poner la partici贸n ra铆z en la imagen del n煤cleo; ver m谩s adelante.) Por ejemplo, este es el tipo de disquete creado por Slackware durante la instalaci贸n.

Para crear su propio disquete de arranque, localice en primer lugar la imagen del n煤cleo en su disco duro. Debe estar en el fichero /Image o /etc/Image. Algunas instalaciones utilizan el fichero /vmlinux para el n煤cleo. En su lugar, puede que tenga un n煤cleo comprimido. Un n煤cleo comprimido se descomprime a si mismo en memoria en tiempo de arranque, y utiliza mucho menos espacio en el disco duro. Si se tiene un n煤cleo comprimido, puede encontrarse en el fichero /zImage o /etc/zImage. Algunas instalaciones utilizan el fichero /vmlinuz para el n煤cleo comprimido.

Una vez que se sabe donde est谩 el n煤cleo, hay que poner el nombre de la partici贸n ra铆z de un dispositivo ra铆z en la imagen del n煤cleo, utilizando el comando rdev. El formato de este comando es:

rdev<nombre-de-n脷cleo><dispositivo-ra脥z></dispositivo-ra脥z></nombre-de-n脷cleo>

<nombre-del-n脷cleo>es el nombre de la imagen del n煤cleo</nombre-del-n脷cleo>

<dispositivora脥z>es el nombre de la partici贸n ra铆z de Linux</dispositivora脥z>

Ejemplo: para hacer que el dispositivo ra铆z en el n煤cleo /etc/Image sea /dev/hda2:

# rdev /etc/Image /dev/hda2

rdev tambi茅n puede poner otras opciones en el n煤cleo, como puede ser el modo SVGA por defecto a utilizar en tiempode arranque. Tan s贸lo utilice 芦rdev -h禄 para obtener un mensaje de ayuda.

Una vez puesto el dispositivo ra铆z, tan s贸lo hay que copiar la imagen del n煤cleo al disquete. Siempre que se copia datos a un disquete, es una buena idea formatear previamente el disquete en MS-DOS. Esto establece la informaci贸n de pista y sector en el disquete con la que puede detectarse como de alta o baja densidad.

Ejemplo: copiar el n煤cleo en el fichero /etc/Image al disquete en /dev/fd0

# cp /etc/Image /dev/fd0

Este disquete debe arrancar ahora Linux.

Configuraci贸n del Gestor de Arranque Lilo

Otro m茅todo de arranque es utilizar LILO, un programa que reside en el sector de arranque del disco duro. Este programa se ejecuta cuando el sistema se inicia desde el disco duro, y puede arrancar autom谩ticamente Linux desde una imagen de n煤cleo almacenada en el propio disco duro.

LILO puede utilizarse tambi茅n como una primera etapa de carga de varios sistemas. Cuando se arranca utilizando LILO, se inicia el sistema operativo por defecto, a menos que pulse |_ctrl_|, |_alt_|, o |_shift_|durante lel arranque.

En caso que pulse cualquiera de dichas teclas se presentar谩 un indicador de arranque, donde debe teclear el nombre del sistema operativo a arrancar (como puede ser 芦linux禄 o 芦msdos禄). Si se pulsa la tecla |_tab_|en el indicador de聽 arranque, se le presentar谩 una lista de los sistemas operativos disponibles.

La forma m谩s simple de instalar LILO es editar el fichero de configuraci贸n, /etc/lilo.conf, y ejecutar el comando # /sbin/lilo

El fichero de configuraci贸n de LILO contiene un p谩rrafo para cada sistema operativo que se pueda querer arrancar.

Ejemplo: Fichero /etc/lilo.conf

# File generated by DrakX/drakboot

# WARNING: do not forget to run lilo after modifying this file
default=禄linux禄 # Sistema operativo que salta por defecto

# Opciones del arranque

boot=/dev/hda

map=/boot/map

keytable=/boot/es-latin1.klt

prompt

nowarn

timeout=100

message=/boot/message

menu-scheme=wb:bw:wb:bw

#Mandrake 10.1

image=/boot/vmlinuz

label=禄linux禄

root=/dev/hda6

initrd=/boot/initrd.img

append=禄acpi=ht resume=/dev/hda5 splash=silent禄

vga=788

read-only

#Linux-nonfb

image=/boot/vmlinuz

label=禄linux-nonfb禄

root=/dev/hda6

initrd=/boot/initrd.img

append=禄acpi=ht resume=/dev/hda5″

read-only

image=/boot/vmlinuz-2.4.27-0.pre2.1mdk

label=禄2427-0pre21″

root=/dev/hda6

initrd=/boot/initrd-2.4.27-0.pre2.1mdk.img

append=禄devfs=nomount acpi=ht resume=/dev/hda5

plash=silent禄

vga=788

read-only

image=/boot/vmlinuz

label=禄failsafe禄

root=/dev/hda6

initrd=/boot/initrd.img

append=禄failsafe acpi=ht resume=/dev/hda5″

read-only

#Windows

other=/dev/hda1

label=禄windows禄

table=/dev/hda

Configuraci贸n del Gestor de Arranque Grub

GNU GRUB es un gestor de arranque muy potente, capaz de arrancar un amplio abanico de sistemas operativos libres y otros.

Una de las facetas importantes de GRUB es su flexibilidad; GRUB entiende sistemas de ficheros y formatos ejecutables del n煤cleo, por lo que permite arrancar cualquier sistema operativo.

NOMENCLATURA

La sintaxis de dispositivos usada en GRUB es algo diferente a las que se puedan haber visto.

Ejemplos:

(fd0) :Requiere que se encierre el nombre del dispositivo entre par茅ntesis’. 鈥渇d鈥 significa es que se trata de un disquete (floppy disk). El numero 鈥0鈥 es el n煤mero de la unidad, empezando a contar desde cero. La expresi贸n significa que GRUBusar谩 todo el disquete.

(hd0,1): 鈥渉d鈥 indica un disco duro (hard disk). 鈥0鈥 n煤mero de la unidad, es decir, que se trata del primer disco duro, el 鈥1鈥 indica el n煤mero de la partici贸n. Los n煤meros de partici贸n se cuentan desde cero y no desde uno. La expresi贸n representala segunda partici贸n de la primera unidad de disco duro. En este caso, GRUB usa una partici贸n del disco y no el disco entero.

(hd0,4): Esto indica la primera partici贸n l贸gica de la primera unidad de disco.

Para poder acceder a discos o particiones, necesitas especificar el dispositivo mediante una instrucci贸n, como `root (fd0)’ o `unhide (hd0,2)’. Para ayudarte a averiguar qu茅 n煤mero es una partici贸n que quieres, las opciones de la l铆nea de 贸rdenes auto-completan los argumentos.

Advierte que GRUB no distingue entre IDE y SCSI – simplemente cuenta las unidades desde cero sin que importe su tipo. Por lo general, el n煤mero de una unidad IDE es menor que el de una SCSI, aunque esto no se cumplir铆a si cambias la secuencia de arranque intercambiando las unidades IDE y SCSI en la BIOS.

Vamos a ver como se especifica esto en un archivo a partir del fichero.

Ejemplo:

(hd0,0)/vmLinuz: Esto especifica un archivo llamado `vmlinuz’ en la primera partici贸n del primer disco duro. N贸ta que tambi茅n se pueden auto completar los nombres de archivo.

INSTALACI脫N

Necesitamos instalar GRUB debes instalarlo en tu disco. Existen dos formas de conseguirlo – usando la aplicaci贸n grub-install en un SO tipo UNIX, o mediante una Etapa 2 nativa. Ambas son bastante similares, sin embargo, es posible que la aplicaci贸n escoja una unidad equivocada de la BIOS as铆 que conviene ser precavido.

Asimismo, si instalas GRUB en un SO tipo UNIX, aseg煤rate de tener un disco de arranque de emergencia a mano, para poder rescatar el ordenador en caso de que, por alg煤n motivo, el disco duro quedara inservible (no pudiera arrancarse).

GRUB viene con im谩genes de arranque, que se instalan en el directorio `/src/share/grub/i386-pc’. Es necesario copiar los archivos `stage1′, `stage2′ y `*stage1_5′ al directorio `/boot/grub’. Se llama directorio de im谩genes y directorio de arranque al directorio donde se instalan las im谩genes de GRUB y al directorio que GRUB usa para encontrarlas.

Crear un Diskete de Arranque Grub

Se necesita tomar los archivos `stage1′ y `stage2′ del directorio de im谩genes, y escribirlos en el primer y segundo bloque de un disquete.

Precauci贸n: Este m茅todo destruye cualquier dato que est茅 guardado en el disquete.

En UNIX esto se puede hacer con las 贸rdenes siguientes:

# cd /usr/share/grub/i386-pc

# dd if=stage1 of=/dev/fd0 bs=512 count=1 1+0 records in 1+0 records out

# dd if=stage2 of=/dev/fd0 bs=512 seek=1 153+1 records in 153+1records out

Instalar Grub Nativamente

Precauci贸n: Instalar la Etapa 1 de GRUB de esta manera borrar谩 el sector de arranque normal de un SO.

GRUB puede arrancar directamente GNU Mach, Linux, FreeBSD, NetBSD y OpenBSD, por lo que usarlo no deber铆a dar problemas. Aunque es buena idea hacer una copia de seguridad del primer sector de la partici贸n en la que vayas a instalar la etapa 1 de GRUB. Si instalas GRUB en el primer sector del disco duro no es tan importante tomar precauciones, ya que es f谩cil restaurarlo (por ejemplo, usando `FDISK /MBR’ desde DOS).

Instalar GRUB de manera nativa en el sistema es recomendable. Se necesita hacer un disquete de arranque de GRUB y arrancar el ordenador con 茅l.

Lo primero es fijar el directorio de arranque como dispositivo ra铆z de GRUB:

grub> root (hd0,0)

Si no est谩s seguro de cual es la partici贸n que contiene los archivos, puedes usar la orden find de la manera siguiente:

grub> find /boot/grub/stage1

Esto busca el archivo `/boot/grub/stage1′ y lista los dispositivos que lo contienen.

Una vez que has fijado correctamente el directorio ra铆z, utiliza la orden setup:

grub> setup (hd0)

Esta orden instala GRUB en el MBR de la primera unidad. Si lo que quieres es instalar GRUB en el sector de arranque de una partici贸n en vez de en el MBR, especifica la partici贸n en la que quieres instalar GRUB:

grub> setup (hd0,0)

Si instalas GRUB en una partici贸n o en una unidad que no sea la primera, tendr谩s que arrancar en cadena a GRUB desde otro gestor de arranque.

Los ficheros que intervienen en la configuraci贸n del GRUB son dos:

/boot/grub/menu.lst: Le indicamos donde est谩n las im谩genes.

/etc/fstab: Para montar nuestra particion en el arranque.

Ejemplo:

Fichero /boot/grub/menu.lst

# menu.lst GRUB

timeout 10

default 0

#Windows

title Windows

root (hd0,0)

chainloader +1

#Mandrake 10.1

title Linux

kernel (hd0,5)/boot/vmlinuz root=/dev/hda6 acpi=ht resume=/dev/hda5 splash=verbose vga=788

initrd (hd0,5)/boot/initrd.img

#Knoopix

title Knoppix

kernel (hd0,6)/boot/vmlinuz root=/dev/hda7

initrd (hd0,6)/boot/initrd.img

title linux-nonfb

kernel (hd0,5)/boot/vmlinuz root=/dev/hda6 acpi=ht resume=/dev/hda5

initrd (hd0,5)/boot/initrd.img

title 2427-0pre21

kernel (hd0,5)/boot/vmlinuz-2.4.27-0.pre2.1mdk root=/dev/hda6 devfs=nomount acpi=ht resume=/dev/hda5 splash=silent vga=788

initrd (hd0,5)/boot/initrd-2.4.27-0.pre2.1mdk.img

title failsafe

kernel (hd0,5)/boot/vmlinuz root=/dev/hda6 failsafe acpi=ht resume=/dev/hda5

initrd (hd0,5)/boot/initrd.img

Fichero /etc/fstab

/dev/hda6 / reiserfs notail 1 1 #Mandrake 10.1

/dev/hdb /mnt/cdrom auto umask=0,user,iocharset=iso8859-15,codepage=850,noauto,ro,exec,users 0 0

/dev/hdc /mnt/cdrom2 auto umask=0,user,iocharset=iso8859-15,codepage=850,noauto,ro,exec,users 0 0

none /mnt/floppy supermount dev=/dev/fd0,fs=ext2:vfat,–,umask=0,iocharset=iso8859-15,sync,codepage=850 0 0

/dev/hda1 /mnt/win_c ntfs umask=0,nls=iso8859-15,ro 0 0 #Windows

/dev/hda8 /mnt/win_d vfat umask=0,iocharset=iso8859-15,codepage=850 0 0 none /proc proc defaults 0 0

/dev/hda5 swap swap defaults 0 0

Ahora ya puedes arrancar GRUB sin usar un disquete.

Nota: Algunas distribuciones GNU/Linux, poseen herramientas gr谩ficas para la configuraci贸n del gestor de arranque, que facilitan la tarea.

Resumen

  • Linux utiliza el proceso de arranque init de Sys V.
  • Un servicio es una funcionalidad proporcionada por la m谩quina. La activaci贸n o parada de servicios se realiza mediante la utilizaci贸n de scripts.
  • La mayor铆a de los servicios est谩ndar, los cuales suelen tener su configuraci贸n en el directorio /etc, suelen controlarse mediante los scripts presentes en /etc/init.d/.
  • Un nivel de ejecuci贸n es sencillamente una configuraci贸n de programas y servicios que se ejecutar谩n orientados a un determinado funcionamiento.
  • Los niveles de ejecuci贸n son 7, numerados del 0-6.
  • El comando init se puede utilizar desde l铆nea de comandos para cambiar de nivel de ejecuci贸n.
  • Los gestores de arranque para un sistema GNU/Linux, son LILO y GRUB.
  • El fichero de configuraci贸n del gestor de arranque LILO es /etc/lilo.conf.