Linux Avanzado - Amazon Web Services

Anuncio
Linux Avanzado
Tema 6: Arranque
Creación de discos de recuperación
Antes de recuperar
Cuando, en el transcurso de eventos del sistema, una instalación de Linux se echa a perder a tal
punto que no puede arrancar normalmente, una buena estrategia es intentar “arrancar en modo de
usuario único” para solucionar el problema. El modo de usuario único (nivel de ejecución 1) le
permite acceder y modificar muchos problemas sin tener que preocuparse por cuestiones de
permisos o de archivos bloqueados por otros usuarios y procesos. Además, el modo de usuario
único se ejecuta con un mínimo de servicios, daemons y tareas que podrían confundirse con – o
incluso ser la causa de – el problema subyacente.
Sin embargo, en algunos casos, aun algunos archivos necesarios para el modo de usuario único
como /etc/passwd, /etc/fstab, /etc/inittab, /sbin/init y /dev/console pueden corromperse y hacer que
el sistema no arranque, ni siquiera en modo de usuario único. En estas ocasiones, un disco de
recuperación (un disco de arranque que contiene lo imprescindible para reparar una partición rota,
a veces llamado disco de reparación) puede usarse para lograr que el sistema se recupere.
Los CD de recuperación
Hoy en día, las distribuciones independientes en CD (o en DVD) tales como Knoppix pueden
usarse como el “Cadillac” de los discos de recuperación, ya que ostentan una gran variedad de
drivers, herramientas de depuración, e incluso un navegador Web. Incluso si usted tiene
necesidades especiales como drivers fuera de lo común (como los módulos kernel) o un software
de recuperación, por lo general le resultará más conveniente descargar un LiveCD de Linux como
Knoppix y personalizar los contenidos de la imagen ISO antes de grabar un disco de recuperación.
Consulte el tutorial del Tema 203 para obtener información sobre cómo montar en bucle una
imagen ISO.
Discos flexibles de recuperación
En el caso de sistemas muy antiguos con CD-ROM de arranque, usted deberá usar para la
recuperación sólo discos flexibles que contengan lo estrictamente esencial. Algunas exquisiteces
como emacs y vim suelen ser demasiado voluminosas para entrar en un único disco flexible de
recuperación, razón por la cual un administrador experimentado del sistema debería estar
preparado para usar un editor reducido a lo esencial como ed a la hora de arreglar archivos de
configuración corrompidos.
A la hora de crear discos flexibles de arranque personalizados, el usuario debería leer el “LinuxBootdisk HOWTO” del Linux Documentation Project. No obstante, en muchos casos, las
distribuciones Linux le ofrecerán la opción de crear disquetes de recuperación durante la
instalación o más tarde, usando las herramientas incluidas. ¡Asegúrese de crear y almacenar los
discos de recuperación antes de necesitarlos!
Identificación de las etapas de arranque
Acerca del arranque
El tutorial del Tema 202 contiene información mucho más exhaustiva sobre las secuencias de
arranque de Linux. En este tutorial, examinaremos resumidamente estas etapas.
La primera etapa del arranque no ha cambiado demasiado desde que se introdujeron las ® PC
compatibles con IBM que incluían disco duro. El BIOS lee el primer sector del disco de arranque en
la memoria y lo ejecuta. Este MBR (registro de arranque maestro) de 512 bytes, que también
almacena la etiqueta fdisk, carga el cargador del sistema operativo (ya sea GRUB o LILO) desde la
partición “activa”.
1
Arranque del kernel
Una vez que el BIOS de un sistema x86 (otras arquitecturas varían ligeramente) ejecuta el MBR,
ocurre una serie de pasos hasta que se carga el kernel de Linux. Si el arranque no es exitoso, el
primer paso será determinar la ubicación de la falla de manera de saber qué es necesario arreglar.
• Carga del cargador de arranque (LILO/Grub).
• El cargador de arranque comienza a ejecutarse y transfiere el control al kernel.
• Kernel: Carga el kernel base y otros módulos del kernel fundamentales.
• Inicialización y configuración del hardware:
o Comienza a ejecutarse el kernel.
o Se inicializa la infraestructura del kernel (VM, planificador, etc.).
o Sondeo y agregado de drivers de dispositivos.
o Montaje del sistema de archivos raíz.
Arranque del entorno de usuario
En el caso de que el kernel base, los módulos kernel y el sistema de archivo raíz comiencen a
ejecutarse con éxito (o por lo menos con el éxito suficiente como para no inmovilizarse por
completo), comienza el proceso de inicialización:
• Inicialización y configuración de daemon
o /sbin/init comenzado como proceso 1
o /sbin/init lee /etc/inittab
o scripts /etc/rc<n>.d/S* son ejecutados por /etc/init.d/rc
o Discos fsck'ed
o Interfaces de red configuradas
o Daemons iniciados
o getty(s) iniciados sobre puertos seriales y de consola
Solución de problemas de LILO y GRUB
Buscando el cargador de arranque
Cuando GRUB se inicia, hace destellar en la pantalla el mensaje “Cargando GRUB, por favor,
espere...”, para luego pasar a su menú de arranque. LILO generalmente exhibe un prompt LILO:,
aunque algunas versiones pasan directamente a un menú. Si usted no accede a una pantalla de
LILO o GRUB, tal vez sea el momento de utilizar un disco de recuperación independiente. Por lo
general, usted sabrá que tiene este problema a través de alguna clase de mensaje BIOS que le
indique que no se encuentra un sector de arranque o incluso que no se encuentra un disco duro.
Si su sistema no puede localizar un sector de arranque utilizable, es posible que su instalación
LILO o GRUB se haya corrompido. A veces, otros sistemas operativos pisan sectores de arranque
(o lo hacen algunos “programas de protección contra virus” excesivamente celosos que se ejecutan
sobre Windows®) y ocasionalmente surgen otros problemas. Un disco de recuperación le permitirá
reinstalar LILO o GRUB. Por lo general, usted deberá ejecutar un comando chroot a su antiguo
sistema de archivos raíz para utilizar sus archivos de configuración LILO o GRUB anteriores.
En el caso de que no se encuentre un disco duro, es probable que haya ocurrido una falla de
hardware (y usted deseará haber hecho una copia de seguridad); a menudo también será el caso
cuando no se encuentre el sector de arranque. Consulte el tutorial del Tema 202 para obtener más
información sobre LILO y GRUB.
Configuración de LILO y GRUB
LILO se configura con el archivo /etc/lilo.conf o por medio de otro archivo de configuración
especificado en la línea de comando. Para reinstalar LILO, asegúrese primero de que su archivo
lilo.conf concuerde con la configuración actual de su sistema (especialmente con la partición y la
información del número de disco; esta configuración se puede alterar si usted intercambia el disco
duro y/o cambia particiones). Una vez que usted ha verificado su configuración, simplemente
ejecute /sbin/lilo como raíz (o en modo de usuario único).
Configurar y reinstalar GRUB implica esencialmente el mismo proceso que para LILO. El archivo
de configuración de GRUB es /boot/grub/menu.lst, pero es leído cada vez que el sistema arranca.
2
De igual modo, el shell de GRUB reside en /boot/grub/, pero usted puede elegir en qué disco duro
reside el MBR básico de GRUB con la opción groot= en /boot/grub/menu.lst. Para instalar GRUB
en un MBR, ejecute un comando como grub-install /dev/hda, que verificará el /boot/ actualmente
montado en cuanto a su configuración.
Solución de problemas generales
Estructura del sistema de archivos Linux
Las distribuciones de Linux varían un poquito en cuanto a dónde colocan los archivos. El Linux
Filesystem Hierarchy Standard está haciendo avances en cuando a promover la estandarización
en este sentido. Algunos directorios ya están estandarizados y son particularmente importantes a
la hora de examinar problemas de inicio y de tiempo de ejecución:
• /proc/ es el sistema de archivos virtual que contiene información sobre el estado de los
procesos y del sistema. En cierto modo, residen aquí las entrañas de un sistema en
ejecución. Ver el Tema 201 para obtener mayor información.
• /var/log/ es donde residen los archivos de registro. Si algo no marcha bien, es bueno saber
que aquí tenemos información útil en algún archivo de registro.
• / suele ser la raíz del sistema de archivos bajo Linux que contiene simplemente otros
directorios anidados. En algunos sistemas, ciertos archivos de inicio como vmlinuz y
initrd.img podrían estar aquí en lugar de hallarse en /boot/.
• /boot/ almacena archivos que se usan directamente en el proceso de arranque del kernel.
• /lib/modules/ es donde residen los módulos kernel, anidados bajo este directorio en
subdirectorios nombrados para la versión actual del kernel (si usted arranca versiones
múltiples del kernel, deberían existir múltiples directorios). Por ejemplo:
% ls /lib/modules/2.6.10-5-386/kernel/
arch crypto drivers fs lib net security sound
Encontrar mensajes de arranque
Durante el arranque propiamente dicho del sistema, los mensajes pueden desplazarse
rápidamente y es probable que usted no tenga tiempo de identificar problemas o actividades de
inicialización inesperadas. Si bien es probable que se registre en el syslog alguna información de
interés, el kernel básico y los mensajes del módulo del kernel podrán examinarse con la
herramienta dmesg.
Herramientas de identificación del hardware/sistema
Por lo general, usted deberá tener en cuenta las siguientes herramientas del sistema:
• lspci: muestra una lista de todos los dispositivos PCI.
• lsmod: muestra una lista de los módulos del kernel cargados.
• lsusb: muestra una lista de los dispositivos USB.
• lspnp: muestra una lista de los dispositivos Plug-and-Play.
• lshw: muestra una lista del hardware.
Ligeramente alejadas del hardware, pero igualmente útiles:
• lsof: muestra una lista de los archivos abiertos.
• insmod: carga los módulos del kernel.
• rmmod: elimina los módulos del kernel.
• modprobe: contenedor insmod/rmmod/lsmod de nivel superior.
• uname: imprime la información del sistema (versión del kernel, etc.).
• strace: rastrea llamados del sistema.
Cuando usted esté desesperado intentando usar binarios, ya sean bibliotecas o aplicaciones, la
herramienta strings podrá realmente salvarlo (pero espere un proceso laborioso). Cierta
información crucial, como rutas codificadas de forma rígida, puede permanecer escondida bajo los
binarios y, con una buena dosis de prueba y error, usted podrá encontrarla buscando las cadenas
dentro de los binarios.
3
Solución de problemas de recursos del sistema y de configuraciones del
entorno
La inicialización
Como figura en mayor detalle en el Tema 202, el arranque de Linux después de la carga del kernel
es controlado por el proceso init. La principal configuración de control para init es /etc/inittab. El
archivo /etc/inittab contiene información sobre qué pasos se han de llevar a cabo en cada nivel de
ejecución. Pero tal vez su función más crucial sea configurar el nivel de ejecución para acciones
posteriores. Si su sistema tiene dificultades para arrancar, configurar un nivel de ejecución
diferente puede ayudar al proceso. La línea de clave será algo así como:
# The default runlevel. (in /etc/inittab)
id:2:initdefault:
Scripts de recursos
Los scripts rc se ejecutan en tiempo de arranque, en tiempo de apagado, y cada vez que el
sistema cambie sus niveles de ejecución, y son responsables de iniciar y detener la mayor parte de
los daemons del sistema. En la mayor parte de las distribuciones Linux (léase,las distribuciones
modernas), los scripts rc residen en el directorio /etc/init.d/ y están vinculados a los directorios
/etc/rc<N>.d/ (paraN=runlevel) ya sea que tengan el nombre “S*” para scripts de inicio y “K*” para
scripts de apagado. El sistema nunca ejecuta los scripts a partir de /etc/init.d directamente, sino
que los busca en /etc/rc<N>.d/[SK]*.
El shell del sistema
Si bien no es habitual, es posible que un administrador del sistema desee cambiar el script de inicio
del shell de todo el sistema /etc/profile. Tal cambio afectará cada shell interactivo (a excepción de
los usuarios /bin/tcsh u otros shells no compatibles con -/bin/sh). Corromper este archivo puede
llevar fácilmente a que nadie pueda iniciar sesión y sea necesario un disco de recuperación para
normalizar la situación. El método normal para cambiar el comportamiento del shell a nivel
individual es modificar /home/$USER/.bash_profile y /home/$USER/.bashrc.
Configuración de parámetros del kernel
El sistema sysctl(ver sysctl en la página man) se tomó de BSD UNIX® y se ha de usar para ajustar
algunos recursos del sistema. Ejecute sysctl -a para ver qué variables pueden ser controladas por
sysctl y para qué están configuradas. La utilidad sysctl es útil sobre todo para ajustar parámetros
de redes, así como algunos parámetros kernel. Use el archivo /etc/sysctl.conf para configurar los
parámetros del sysctl al momento del arranque.
Bibliotecas dinámicas
En la mayor parte de los sistemas, las bibliotecas dinámicas se agregan, actualizan, reemplazan y
eliminan permanentemente. Dado que casi todos los programas que se ejecutan sobre el sistema
necesitan encontrar y cargar bibliotecas dinámicas, los nombres, números de versión y ubicaciones
de
la
mayor
parte
de
las
bibliotecas
dinámicas
son
cacheados
por
el
programaldconfig Normalmente, sólo las bibliotecas dinámicas de los directorios del sistema /lib/
and /usr/lib/ están cacheadas. Para agregar más directorios a la ruta de búsqueda predeterminada
para todo el sistema, agregue los nombres de directorio (tales como /usr/X11R6/lib) al
/etc/ld.so.conf y ejecute ldconfig como raíz.
Registro del sistema
El Tema 211 discute el syslog en detalle. El archivo clave que usted debe tener en mente si tiene
problemas (y sobre todo si desea asegurarse de que podrá analizarlo más tarde) es
/etc/syslog.conf. Al cambiar el contenido de esta configuración, usted tiene control granular sobre
qué eventos están registrados y dónde están registrados –incluyendo el uso potencial de correo
electrónico o de equipos remotos–. Si se presentan problemas, asegúrese de que los subsistemas
4
en que usted cree que se presentan dichos problemas registren la información de manera que se
la pueda examinar fácilmente de manera forense.
Eventos periódicos
En prácticamente todos los sistemas Linux se ejecuta el daemon cron. Ver el Tema 213 para
obtener más información sobre cron y crontab. En general, una fuente de problemas potenciales
que se ha de tener en cuenta son los scripts que se ejecutan de manera intermitente. Es posible
que lo que usted cree que es un problema del kernel o de la aplicación sea consecuencia de
scripts no relacionados que son ejecutados en segundo plano por cron.
Una medida extrema es eliminar el cron por completo. Usted puede encontrar su número de
proceso por medio de ps ax | grep cron, y la ejecución de kill puede ponerle fin. Una medida menos
drástica es editar /etc/crontab para ejecutar un conjunto más conservador de tareas; asegúrese
también de restringir las tareas de usuarios que estén programadas editando /etc/cron.allow y
/etc/cron.deny. Si bien los usuarios por lo general no deberían tener los permisos suficientes para
causar problemas en todo el sistema, un buen primer paso es deshabilitar temporalmente las
configuraciones crontab de usuarios y ver si de esa manera se resuelve el problema.
Recursos
Aprender
• "Common threads: Advanced filesystem implementor's guide, Parts 1 – 13 [Subprocesos
Comunes: Guía avanzada para el implementador del sistema de archivos, Partes 1 – 13]"
(developerWorks, a partir de junio de 2001) es una serie excelente sobre sistemas de
archivos Linux.
•
"Understanding Linux configuration files" [Entendiendo los archivos de configuración de
Linux] (developerWorks, diciembre de 2001) le detalla los archivos de configuración de un
sistema Linux que controlan permisos de usuarios, aplicaciones de sistemas, daemons,
servicios y otras tareas administrativas en un entorno multiusuario y multitareas.
•
"System recovery with Knoppix" [Recuperación del sistema con Knoppix] (developerWorks,
octubre de 2003) le muestra cómo acceder a un sistema Linux que no arranca con un CD
de Knoppix.
•
"Assess system security using a Linux LiveCD" [Evaluar la seguridad del sistema usando
un LiveCD de Linux] (developerWorks, julio de 2005) le presenta cuatro propuestas de
LiveCD especializadas en reforzar las vulnerabilidades.
•
Lea el recurso del Proyecto de Documentación Linux Linux-Bootdisk HOWTO.
•
Encuentre más recursos para desarrolladores Linux en la zona developerWorksLinux.
Autor:
David Mertz es Turing completo, pero probablemente no apruebe la Prueba de Turing. Para
conocer más acerca de su vida, consulte su página Web personal. David escribe las columnas
5
developerWorks Charming Python y XML Matters desde el año 2000. Consulte su libroText
Processing in Python [Procesamiento de texto en Python].
Compilación y edición:
Ing. Sergio Aguilera. Facultad de Tecnología Informática. Universidad de Belgrano.
[email protected]
Todos los Derechos Reservados a IBM Corp. – Marzo 2012.
6
Descargar