Búsqueda de sitios web

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 vigentes a partir del 2 de febrero de 2016, estamos agregando los temas necesarios a la serie LFCS publicada aquí. Para prepararse para este examen, le recomendamos encarecidamente que siga también la serie LFCE.

En este artículo le presentaremos GRUB y le explicaremos por qué es necesario un gestor de arranque y cómo añade versatilidad al sistema.

El proceso de inicio 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 (Autoprueba de encendido) 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 el 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 servicios.

En la Parte 7 de esta serie (“SysVinit, Upstart y Systemd”) presentamos los 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 el cargador de arranque GRUB

En los sistemas modernos se pueden encontrar dos versiones principales de GRUB (v1, a veces denominadas GRUB Legacy y v2), aunque la mayoría Las distribuciones utilizan v2 de forma predeterminada en sus últimas versiones. Sólo Red Hat Enterprise Linux 6 y sus derivados todavía usan la 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 gestor de arranque permite al usuario:

  1. 1). modificar la forma en que se comporta el sistema especificando diferentes núcleos para usar,
  2. 2). elija entre sistemas operativos alternativos para iniciar y
  3. 3). agregue o edite estrofas de configuración para cambiar las opciones de arranque, entre otras cosas.

Hoy en día, GRUB lo mantiene el proyecto GNU y está bien documentado en su sitio web. Le recomendamos que utilice la documentación oficial de GNU mientras lee esta guía.

Cuando el sistema arranca, se le presenta la siguiente pantalla GRUB en la consola principal. Inicialmente, se le pedirá que elija entre kernels alternativos (de forma predeterminada, el sistema arrancará usando el kernel más reciente) y se le permitirá ingresar una línea de comando GRUB (con c) o editar las opciones de arranque (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 “comportarse mal” después de una actualización (consulte este enlace en AskUbuntu). foros por 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 un CentOS 7, aquí está el archivo de configuración que se crea cuando se instala el sistema 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 con la siguiente información:

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, a menos que lo interrumpa el usuario. Cuando esta variable se establece en -1, el arranque no se iniciará hasta que el usuario realice una selección.

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

En CentOS y openSUSE:

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

En Ubuntu:

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

En el ejemplo que se muestra en la imagen siguiente, si deseamos arrancar con la versión del kernel 3.10.0-123.el7.x86_64 (cuarta entrada), debemos configurar GRUB_DEFAULT a 3 (las entradas están numeradas 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 archivo de parámetros del kernel y en man 7 bootparam.

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ías 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 quizás no pueda determinar por sí solo, o anular los valores que detectaría.

Esto me pasó no hace mucho 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, por lo 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. Puedes 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) después 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 de Linux

Si instala un segundo sistema operativo o si su archivo de configuración de GRUB se daña debido a un error humano, existen formas de recuperar su sistema y poder reiniciarlo.

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 inicio predeterminadas) y use la ayuda para mostrar 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 encuentre. En la imagen a continuación podemos ver que hay 4 discos duros (hd0 a hd3).

Sólo 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á iniciar Linux y utilizar 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), le indicaremos a GRUB dónde encontrar su archivo de configuración y luego le indicaremos 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 Enter para iniciar su uso. Una vez que el sistema se haya iniciado, puede ejecutar el comando grub2-install /dev/sdX (cambie sdX con el dispositivo en el que desea instalar GRUB). Luego se actualizará la información de inicio y se restaurarán todos los archivos relacionados.

grub2-install /dev/sdX

Otros escenarios más complejos están documentados, junto con las soluciones sugeridas, en la guía de solución de problemas de Ubuntu GRUB2. Los conceptos allí explicados 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 dejó de iniciarse correctamente debido a un problema relacionado con el gestor 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 utilizando el formulario de comentarios a continuación. ¡Esperamos con interés escuchar de usted!