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


Debido a los cambios recientes en los objetivos del examen de certificación LFCS efectivos desde 2 de febrero de 2016 , estamos agregando los temas necesarios a la serie LFCS publicada aquí. Para prepararse para este examen, le recomendamos que siga también 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. A process known as POST (Power-On Self Test) performs an overall check on the hardware components of your computer.
  2. 2. When POST completes, it passes the control over to the boot loader, which in turn loads the Linux kernel in memory (along with initramfs) and executes it. The most used boot loader in Linux is the GRand Unified Boot loader, or GRUB for short.
  3. 3. The kernel checks and accesses the hardware, and then runs the initial process (mostly known by its generic name “init”) which in turn completes the system boot by starting services.

En la Parte 7 de esta serie ("SysVinit, Upstart y Systemd"), presentamos los sistemas de gestión de servicios y las herramientas utilizadas por las modernas distribuciones de Linux. Es posible que desee revisar ese artículo antes de continuar.

Presentamos GRUB Boot Loader

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

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

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

  1. 1). modify the way the system behaves by specifying different kernels to use,
  2. 2). choose between alternate operating systems to boot, and
  3. 3). add or edit configuration stanzas to change boot options, among other things.

Hoy en día, GRUB es mantenido por 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 se inicia el sistema, aparece la siguiente pantalla GRUB en la consola principal. Inicialmente, se le pedirá que elija entre kernels alternativos (de manera predeterminada, el sistema arrancará usando el kernel más reciente) y se le permite ingresar una línea de comando GRUB (con c ) o edite las opciones de inicio (presionando la tecla e ).

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

La configuración de GRUB v2 se lee al iniciar desde /boot/grub/grub.cfg o /boot/grub2/grub.cfg , mientras que < el código> /boot/grub/grub.conf o /boot/grub/menu.lst se utilizan en v1 . Estos archivos NO se deben editar manualmente, sino que se modifican en función del 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 utilizando 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'

Al usar el comando anterior, descubrirá que GRUB_TIMEOUT establece el tiempo entre el momento en que aparece la pantalla inicial y comienza el inicio automático del sistema, a menos que el usuario lo interrumpa. Cuando esta variable se establece en -1 , el inicio 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 indique 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 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 iniciar con la versión del kernel 3.10.0-123.el7.x86_64 (cuarta entrada), debemos configurar GRUB_DEFAULT a 3 (las entradas se numeran internamente comenzando con cero) de la siguiente manera:

GRUB_DEFAULT=3

Una variable de configuración final 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 CentOS 7 servidor 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í mismo o anular los valores que detectaría.

Esto me sucedió hace poco 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 que se pasaron a través de GRUB para que funcionara.

Otro ejemplo es cuando necesita llevar el sistema al modo de un solo usuario para realizar tareas de mantenimiento. Puedes hacerlo 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 ) para actualizar grub.cfg (de lo contrario, los cambios se perderán durante el arranque).

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 inicio solo durarán durante la sesión actual.

Solucionar problemas de Linux GRUB

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 pie y poder reiniciarlo nuevamente.

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 la comandos en el indicador de GRUB:

Nos centraremos en ls , que incluirá una lista de los dispositivos y sistemas de archivos instalados, y examinaremos lo que encuentre. En la imagen de abajo podemos ver que hay 4 discos duros ( hd0 a través de hd3 )

Solo parece que hd0 se particionó (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).

Ahora examinemos 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 ), digamos a GRUB dónde encontrar su archivo de configuración y luego le indicamos 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 el 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). La información de arranque se actualizará y todos los archivos relacionados se restaurarán.

# grub2-install /dev/sdX

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

Resumen

En este artículo, le presentamos GRUB, 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 iniciarse 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 utilizando el formulario de comentarios a continuación. ¡Esperamos con interés escuchar de usted!

Todos los derechos reservados © Linux-Console.net • 2019-2021