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. sergio.aguilera@ub.edu.ar Todos los Derechos Reservados a IBM Corp. – Marzo 2012. 6