Debido a los cambios recientes en los objetivos del examen de certificación LFCS efectivos a partir del 2 de febrero de 2016, estamos agregando los temas necesarios a la serie LFCS publicada aquí. Para prepararse para este examen, se recomienda encarecidamente seguir 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 añade versatilidad al sistema.
El proceso de arranque de Linux desde el momento en que presiona el botón de encendido de su ordenador hasta que obtiene un sistema plenamente funcional sigue esta secuencia a alto nivel:
- 1. Un proceso conocido como POST (Power-On Self Test) realiza una comprobación general de los componentes de hardware de su ordenador.
- 2. Cuando POST termina, cede el control al cargador de arranque, que a su vez carga el núcleo 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 en resumen.
- 3. El núcleo verifica y accede al hardware, y luego ejecuta el proceso inicial (conocido mayormente por su nombre genérico “init“) que a su vez completa el arranque del sistema iniciando servicios.
En Parte 7 de esta serie (“SysVinit, Upstart y Systemd“) presentamos los sistemas y herramientas de gestión de servicios utilizados por las distribuciones modernas de Linux. Puede ser útil revisar ese artículo antes de continuar.
Introducción al Cargador de Arranque GRUB
Dos versiones principales de GRUB (a veces llamadas GRUB Legacy la v1 y la v2) se encuentran en los sistemas modernos, aunque la mayoría de las distribuciones utilizan la v2 de forma predeterminada en sus últimas versiones. Solo Red Hat Enterprise Linux 6 y sus derivados siguen utilizando la v1 en la actualidad.
Por lo tanto, nos centraremos principalmente en las características de la v2 en esta guía.
Independientemente de la versión de GRUB, un cargador de arranque permite al usuario:
- 1). modificar la forma en que se comporta el sistema especificando diferentes núcleos a utilizar,
- 2). elegir entre sistemas operativos alternativos para arrancar, y
- 3). añadir o editar estrofas de configuración para cambiar opciones de arranque, entre otras cosas.
Hoy en día, GRUB es mantenido por el proyecto GNU y está bien documentado en su sitio web. Se recomienda utilizar la documentación oficial de GNU al seguir esta guía.
Cuando el sistema arranca, se muestra la siguiente pantalla de GRUB en la consola principal. Inicialmente, se te pide que elijas entre diferentes núcleos (por defecto, el sistema arrancará utilizando el núcleo más reciente) y se te permite ingresar a una línea de comandos de GRUB (con c
) o editar las opciones de arranque (presionando la tecla e
).

Una de las razones por las que considerarías arrancar con un núcleo más antiguo es un dispositivo de hardware que solía funcionar correctamente y ha comenzado a “comportarse de forma extraña” después de una actualización (consulta este enlace en los foros de AskUbuntu como 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 manualmente, sino que se modifican en función del contenido de /etc/default/grub
y los archivos encontrados 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 puedes encontrar el manual de GNU GRUB utilizando la información de la siguiente manera:
# info grub
Si estás interesado específicamente en las opciones disponibles para /etc/default/grub, puedes invocar la sección de configuración directamente:
# info -f grub -n 'Simple configuration'
Usando el comando anterior descubrirás que GRUB_TIMEOUT
establece el tiempo entre el momento en que aparece la pantalla inicial y comienza el arranque automático del sistema a menos que sea interrumpido por el usuario. 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 kernels en la misma máquina, GRUB_DEFAULT
requiere un valor entero que indique qué entrada de SO o 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 mostrada anteriormente, sino también utilizando 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 mostrado en la imagen a continuación, si deseamos arrancar con la versión del kernel 3.10.0-123.el7.x86_64 (4ta entrada), necesitamos establecer GRUB_DEFAULT
en 3
(las entradas se numeran internamente comenzando por 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 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 del kernel por defecto o pasar opciones adicionales? En términos simples, puede haber momentos en los que necesites decirle al kernel ciertos parámetros de hardware que no pueda determinar por sí mismo, o anular los valores que detectaría.
Esto me sucedió no hace mucho tiempo cuando probé Vector Linux, un derivado de Slackware, en mi 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 hacer que funcionara.
Otro ejemplo es cuando necesitas 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
, necesitarás ejecutar update-grub
(Ubuntu) o grub2-mkconfig -o /boot/grub2/grub.cfg
(CentOS y openSUSE) posteriormente para actualizar grub.cfg
(de lo contrario, los cambios se perderán al reiniciar).
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 al inicio solo durarán durante la sesión actual.
Corrección de Problemas de GRUB en Linux
Si instalas un segundo sistema operativo o si tu archivo de configuración de GRUB se corrompe debido a un error humano, hay formas de hacer que tu sistema vuelva a funcionar y pueda arrancar nuevamente.
En la pantalla inicial, presiona c
para obtener una línea de comandos de GRUB (recuerda que también puedes presionar e
para editar las opciones de arranque predeterminadas), y usa help para ver los comandos disponibles en el prompt de GRUB:

Nos enfocaremos en ls, que listará los dispositivos instalados y los sistemas de archivos, y examinaremos lo que encuentre. En la imagen a continuación, podemos ver que hay 4 discos duros (hd0
a través de hd3
).
Solo hd0
parece haber sido particionado (como lo evidencian msdos1 y msdos2, donde 1 y 2 son los números de partición y msdos es el esquema de particionado).
Ahora examinemos la primera partición en hd0
(msdos1) para ver si podemos encontrar GRUB allí. Este enfoque nos permitirá arrancar Linux y luego 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), vamos a decirle a GRUB dónde encontrar su archivo de configuración y luego instruirlo para que intente lanzar su menú:
set prefix=(hd0,msdos1)/grub2 set root=(hd0,msdos1) insmod normal normal

Luego, en el menú de GRUB, elige una entrada y presiona Enter para arrancar con ella. Una vez que el sistema haya arrancado, puedes emitir el comando grub2-install /dev/sdX
(cambia sdX
por el dispositivo en el que quieras 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 están documentados, junto con sus soluciones sugeridas, en la Guía de solución de problemas de Ubuntu GRUB2. Los conceptos explicados allí son válidos también para otras distribuciones.
Resumen
En este artículo te hemos presentado a GRUB, indicado dónde puedes encontrar documentación tanto en línea como fuera de línea, y explicado 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 puedes encontrar fácilmente ayuda tanto en la documentación instalada como en línea utilizando los recursos que hemos compartido en este artículo.
¿Tienes preguntas o comentarios? ¡No dudes en hacérnoslo saber utilizando el formulario de comentarios a continuación! ¡Esperamos saber de ti!
Source:
https://www.tecmint.com/configure-and-troubleshoot-grub-boot-loader-linux/