LFCS: Cómo configurar y solucionar problemas de Grand Unified Bootloader (GRUB) - Parte 13


Debido a los cambios recientes en los objetivos del examen de certificación LFCS a partir del 2 de febrero de 2016, también estamos agregando los temas necesarios a la serie LFCE.

En este artículo, le presentaremos GRUB y explicaremos por qué es necesario un cargador de arranque y cómo agrega versatilidad al sistema.

El proceso de arranque de Linux desde el momento en que presiona el botón de encendido de su computadora hasta que obtiene un sistema completamente funcional sigue esta secuencia de alto nivel:

  1. 1. Un proceso conocido como POST (Power-On Self Test) realiza una verificación general de los componentes de hardware de su computadora.
  2. 2. Cuando se completa POST, pasa el control al cargador de arranque, que a su vez carga el kernel de Linux en la memoria (junto con initramfs) y lo ejecuta. El cargador de arranque más utilizado en Linux es GRand Unified Boot loader, o GRUB para abreviar.
  3. 3. El kernel verifica y accede al hardware, y luego ejecuta el proceso inicial (conocido principalmente por su nombre genérico "init") que a su vez completa el arranque del sistema iniciando los servicios.

En la Parte 7 de esta serie (“Sistemas y herramientas de administración de servicios utilizados por las distribuciones modernas de Linux. Es posible que desee revisar ese artículo antes de continuar.

Presentamos GRUB Boot Loader

En los sistemas modernos se pueden encontrar dos versiones principales de GRUB (v1 a veces llamadas GRUB Legacy y v2), aunque la mayoría de las distribuciones usan v2 de forma predeterminada en sus últimas versiones. Solo Red Hat Enterprise Linux 6 y sus derivados todavía usan v1 en la actualidad.

Por lo tanto, nos centraremos principalmente en las características de v2 en esta guía.

Independientemente de la versión de GRUB, un cargador de arranque permite al usuario:

  1. 1). modificar la forma en que se comporta el sistema especificando diferentes núcleos para usar,
  2. 2). elegir entre sistemas operativos alternativos para arrancar, y
  3. 3). agregar o editar secciones de configuración para cambiar las opciones de arranque, entre otras cosas.

Hoy, GRUB es mantenido por el proyecto GNU y está bien documentado en su sitio web. Se le anima a utilizar la documentación oficial de GNU mientras lee esta guía.

Cuando se inicia el sistema, se le presenta la siguiente pantalla de GRUB en la consola principal. Inicialmente, se le pedirá que elija entre kernels alternativos (por defecto, el sistema arrancará usando el kernel más reciente) y se le permite ingresar una línea de comando GRUB (con c ) o editar las opciones de arranque (por presionando la tecla e ).

Una de las razones por las que consideraría arrancar con un kernel más antiguo es un dispositivo de hardware que solía funcionar correctamente y ha comenzado a "actuar" después de una actualización (consulte este enlace en los foros de AskUbuntu para ver un ejemplo).

La configuración de GRUB v2 se lee al arrancar desde /boot/grub/grub.cfg o /boot/grub2/grub.cfg , mientras que /boot/grub/grub.conf o /boot/grub/menu.lst se utilizan en v1. Estos archivos NO deben editarse a mano, sino que se modifican según el contenido de /etc/default/grub y los archivos que se encuentran dentro de /etc/grub.d .

En CentOS 7, aquí está el archivo de configuración que se crea cuando el sistema se instala por primera vez:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

Además de la documentación en línea, también puede encontrar el manual de GNU GRUB usando info de la siguiente manera:

# info grub

Si está interesado específicamente en las opciones disponibles para/etc/default/grub, puede invocar la sección de configuración directamente:

# info -f grub -n 'Simple configuration'

Usando el comando anterior, descubrirá que GRUB_TIMEOUT establece el tiempo entre el momento en que aparece la pantalla inicial y el inicio automático del sistema comienza a menos que el usuario lo interrumpa. Cuando esta variable se establece en -1 , el arranque no se iniciará hasta que el usuario haga una selección.

Cuando se instalan varios sistemas operativos o núcleos en la misma máquina, GRUB_DEFAULT requiere un valor entero que indique qué sistema operativo o entrada de kernel en la pantalla inicial de GRUB debe seleccionarse para arrancar de forma predeterminada. La lista de entradas se puede ver no solo en la pantalla de inicio que se muestra arriba, sino también usando el siguiente comando:

# awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg
# awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg

En el ejemplo que se muestra en la imagen de abajo, si deseamos arrancar con la versión del kernel 3.10.0-123.el7.x86_64 (cuarta entrada), necesitamos establecer GRUB_DEFAULT en 3 (las entradas se numeran internamente comenzando con cero) de la siguiente manera:

GRUB_DEFAULT=3

Una última variable de configuración de GRUB que es de especial interés es GRUB_CMDLINE_LINUX , que se utiliza para pasar opciones al kernel. Las opciones que se pueden pasar a través de GRUB al kernel están bien documentadas en el bootparam man 7.

Las opciones actuales en mi servidor CentOS 7 son:

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"

¿Por qué querría modificar los parámetros predeterminados del kernel o pasar opciones adicionales? En términos simples, puede haber ocasiones en las que necesite decirle al kernel ciertos parámetros de hardware que tal vez no pueda determinar por sí solo, o anular los valores que detectaría.

Esto me sucedió no hace mucho tiempo cuando probé Vector Linux, un derivado de Slackware, en mi computadora portátil de 10 años. Después de la instalación, no detectó la configuración correcta para mi tarjeta de video, así que tuve que modificar las opciones del kernel pasadas a través de GRUB para que funcionara.

Otro ejemplo es cuando necesita llevar el sistema al modo de usuario único para realizar tareas de mantenimiento. Puede hacer esto agregando la palabra single a GRUB_CMDLINE_LINUX y reiniciando:

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"

Después de editar /etc/defalt/grub , deberá ejecutar update-grub (Ubuntu) o grub2-mkconfig -o/boot/grub2/grub. cfg (CentOS y openSUSE) luego para actualizar grub.cfg (de lo contrario, los cambios se perderán al arrancar).

Este comando procesará los archivos de configuración de arranque mencionados anteriormente para actualizar grub.cfg . Este método garantiza que los cambios sean permanentes, mientras que las opciones pasadas a través de GRUB en el momento del arranque solo durarán durante la sesión actual.

Solucionar problemas de GRUB en Linux

Si instala un segundo sistema operativo o si su archivo de configuración de GRUB se corrompe debido a un error humano, hay formas en que puede volver a poner su sistema en funcionamiento y poder arrancar de nuevo.

En la pantalla inicial, presione c para obtener una línea de comando de GRUB (recuerde que también puede presionar e para editar las opciones de arranque predeterminadas), y use la ayuda para traer las opciones disponibles comandos en el indicador de GRUB:

Nos centraremos en ls, que enumerará los dispositivos y sistemas de archivos instalados, y examinaremos lo que encuentra. En la imagen de abajo podemos ver que hay 4 discos duros ( hd0 a hd3 ).

Solo hd0 parece haber sido particionado (como lo demuestran msdos1 y msdos2, donde 1 y 2 son los números de partición y msdos es el esquema de partición).

Examinemos ahora la primera partición en hd0 (msdos1) para ver si podemos encontrar GRUB allí. Este enfoque nos permitirá arrancar Linux y usar otras herramientas de alto nivel para reparar el archivo de configuración o reinstalar GRUB por completo si es necesario:

# ls (hd0,msdos1)/

Como podemos ver en el área resaltada, encontramos el directorio grub2 en esta partición:

Una vez que estemos seguros de que GRUB reside en (hd0, msdos1), digamos a GRUB dónde encontrar su archivo de configuración y luego indiquémosle que intente iniciar su menú:

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal

Luego, en el menú de GRUB, elija una entrada y presione Entrar para iniciar usándola. Una vez que el sistema se haya iniciado, puede ejecutar el comando grub2-install/dev/sdX (cambie sdX por el dispositivo en el que desea instalar GRUB). A continuación, se actualizará la información de arranque y se restaurarán todos los archivos relacionados.

# grub2-install /dev/sdX

Otros escenarios más complejos están documentados, junto con sus correcciones sugeridas, en la guía de solución de problemas de Ubuntu GRUB2. Los conceptos explicados allí también son válidos para otras distribuciones.

Resumen

En este artículo, le presentamos GRUB, le indicamos dónde puede encontrar documentación tanto en línea como fuera de línea, y le explicamos cómo abordar un escenario en el que un sistema ha dejado de arrancar correctamente debido a un problema relacionado con el cargador de arranque.

Afortunadamente, GRUB es una de las herramientas mejor documentadas y puede encontrar ayuda fácilmente en los documentos instalados o en línea utilizando los recursos que hemos compartido en este artículo.

¿Tienes preguntas o comentarios? No dude en hacérnoslo saber mediante el formulario de comentarios a continuación. ¡Esperamos con interés escuchar de usted!