====== Defenderse en la consola de comandos de GRUB2 ======
**Manual oficial de GRUB2**: https://www.gnu.org/software/grub/manual/grub/grub.html
Cuando se arranca el sistema GNU/Linux y se detiene en el prompt "grub>", se encuentra en la shell de comandos del cargador de arranque GRUB 2. Eso significa que GRUB 2 arrancó normalmente y cargó el módulo normal.mod (junto con otros módulos que se encuentran en /boot/grub/XXX/), pero posiblemente no encontró su archivo grub.cfg. Este prompt tiene muchas más funcionalidades que la de rescate como se verá posteriormente.
Si por el contrario el prompt que se muestra es "grub rescue>" significa que no pudo encontrar el fichero "normal.mod", que suele significar que no pudo encontrar ninguno de los archivos de arranque necesarios. Esto puede ocurrir por algunas razones, por ejemplo cuando han cambiado las asignaciones de las unidades, ya sea por un nuevo kernel, edición de la tabla de particiones, mover discos de sitio de manera física, instalación de otros sistemas operativos, etc. En estos escenarios los ficheros de arranque todavía están ahí, pero GRUB2 no puede encontrarlos. Mediante la terminal de rescate de GRUB2 habría que buscar dichos ficheros de arranque, identificar sus sus ubicaciones y posteriormente arrancar el sistema y arreglar su configuración de GRUB una vez dentro más cómodamente. Este prompt está más limitado en comandos que cuando no se está en modo rescate, por ejemplo no se disfrutaría de autocompletado o historial.
Tampoco es necesario dedicar mucho tiempo a intentar arrancar un Linux mal instalado a través de GRUB2. A veces es más simple y socorrido arrancar una distribución live, montar el sistema de ficheros y mediante chroot volver a instalar y configurar grub2. Algunas distros traen comandos chroot más avanzados que hacen un montaje de dev, proc, o incluso de haber sido configurada la red en la distro Live, integran el fichero resolv.conf en el entorno enjaulado, etc. A grandes rasgos, estos serían los comandos básicos compatibles con cualquier distribución.
mount /dev/sda1 /mnt
## Opcional pero aconsejables ##
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
mount -t devpts pts /mnt/dev/pts
################################
chroot /mnt
# Si el fichero resolv.conf de la distro GNU/Linux a recuperar no existe o no esta bien configurado, siempre puede copiarse a mano el usado en la distro Live antes de ejecutar el chroot.
# De no existir un fichero initrd o initramfs en /boot se puede ejecutar el comando "mkinitcpio" para generarla. Atención a posibles errores en la salida del comando.
# mkinitcpio -p linux
# Instalar Grub.
grub-install --target=i386-pc /dev/sdX
grub-mkconfig -o /boot/grub/grub.cfg
Las terminales de GRUB2 pueden usarse para descubrir imágenes de arranque, kernels y sistemas de archivos raíz. El acceso es completo a todos los sistemas de archivos de la computadora, sin importar los permisos.
En instancias de GRUB2 funcionales, para ingresar en la consola se puede pulsar la tecla "C". La distribución de teclado es la de [[https://upload.wikimedia.org/wikipedia/commons/5/51/KB_United_States-NoAltGr.svg\|USA]], por lo que puede ser de ayuda tener una imagen de la distribución de teclas en teclados americanos.
{{ :kbusa.png?nolink&700 |}}
Los siguientes comandos funcionan en ambos tipos de terminales de GRUB2.
**Inspeccionar el sistema**
# El primer comando que debes ejecutar invoca el paginador, recomendado para paginar salidas de comandos largos.
grub> set pager=1
# Se listan los discos y particiones. Discos con MBR se mostrarán particiones "msdos". En el ejemplo se muestran dos discos con dos particiones.
grub> ls
(hd0) (hd0,msdos2) (hd0,msdos1)
(hd1) (hd1,gpt1) (hd1,gpt2)
(hd2) (hd2,msdos5) (hd2,msdos1)
# Obtener información sobre el tamaño de disco, partición y tipo de sistema de ficheros y UUID.
grub> ls (hd0) # Muestra información sobre el disco hd0
grub> ls (hd1,1)/ # Muestra información sobre la partición primaria del disco hd1.
# Se lista el contenido de una partición concreta. El objetivo es encontrar la partición con el sistema de ficheros que tienen /boot.
grub> ls (hd1,gpt1)/
grub> ls (hd1,1)/ # Esta sintaxis también está permitida.
bin/ dev/ home/ lib64/ opt/ root/ sbin/ sys/ usr/ boot/ etc/ lib/ mnt/ proc/ run/ srv/ tmp/ var/
NOTA: Para salir del prompt de GRUB2 y volver al menú normal suele usarse la tecla "Esc".
**Arrancar un sistema a través de GRUB2 con el prompt normal**
En sistemas sin problemas en Grub, algunos sistemas no muestran el menú GRUB2 por defecto y pasan directamente al arranque del sistema. En estos casos se debe usar la tecla Esc (BIOS) o bien Shift (EFI/Vbox VMs, etc). Lo primero para arrancar un sistema operativo desde GRUB2 sería localizar la partición donde el directorio /boot, aunque en algunos sistemas se pueden encontrar enlaces en "/" que pueden usarse en vez de la ruta real. La segunda línea le dice a GRUB la ubicación del kernel que quiere usar. Recordar que este tipo de prompt soporta el autocompletado mediante tabulador, lo cual es muy de agradecer.
# La primera línea establece la partición en la que se encuentra el sistema de archivos raíz.
grub> set root=(hd0,5)
# Ubicación del kernel deseado y la partición usando la sintaxis habitual de Linux (ej, /dev/sde2 == (hd4,msdos2)).
grub> linux /boot/vmlinuz-linux root=/dev/sda5
# Línea establece el archivo initrd (normalmente initramfs o initrd), que debe tener el mismo número de versión que el kernel (depende de la distro puede no mostrase versión si solo hay uno).
grub> initrd /boot/initramfs-linux.img
# Arrancar el sistema.
grub> boot
**Arrancar un sistema a través de GRUB2 con el prompt de rescate**
Los comandos son muy similares a los usados en el prompt normal, pero deben cargarse los módulos "normal.mod" y "linux.mod" primeramente. Estos y otros módulos suelen estar en /boot/grub/i386-pc/, por lo que puede usarse ls para buscar la partición correcta. Si por algún casual el módulo está en otra partición, esta puede ser especificada en el comando insmod.
grub rescue> set root=(hd0,5)
grub rescue> set prefix=(hd0,5)/boot/grub
grub rescue> insmod normal
# insmod (hd0,msdos5)/root/normal.mod # Puede indicarse la ruta si eso fuera necesario.
grub rescue> normal
Si los pasos anteriores no arrancan el sistema, por ejemplo porque el modulo normal no se encuentre (lo instala grub-install) mostrando el mensaje "error: file ‘/grub/i386-pc/normal.mod’ not found", se puede intentar lo siguiente.
grub rescue> set root=(hd0,5) # Si se siguieron los pasos anteriores para usar el módulo normal, esto no es necesario.
grub rescue> set prefix=(hd0,5)/boot/grub # Si se siguieron los pasos anteriores para usar el módulo normal, esto no es necesario.
grub rescue> insmod linux
grub rescue> linux /boot/vmlinuz root=/dev/sda5
grub rescue> initrd /boot/initramfs-linux.img
grub rescue> boot
Una vez arrancado el equipo, ya se puede de manera más cómoda arreglar el GRUB2 y que los cambios sean permanentes.
**Otros comandos útiles de GRUB2**
# Leer archivos del sistema de ficheros, por ejemplo "/etc/issue" (http://www.escomposlinux.org/lfs-es/blfs-es-1.0/postlfs/logon.html).
grub> cat (hd1,gpt1)/etc/issue
grub> configfile (hd0,5)/boot/grub/grub.cfg
Arch Linux \r (\l inicializada el \d a las \t)
# Comparar dos archivos.
grub> cmp (hd0,5)/etc/profile (hd0,5)/etc/profile_backup
# Cambiar el color o imagen de fondo.
grub> background red
grub> background_image (hd0,5)/ruta/a/imagen.jpg
# Cambiar el color de letra y fondo.
grub> set color_normal=white/black
# Carga una configuración grub especificando la ruta. Útil si el nombre se confundió en la instalación y GRUB2 no lo encuentra, por ejemplo "grub.conf" (El nombre correcto es grub.cfg).
configfile (hd0,5)/boot/grub/grub.conf
# Equivale a F10 or CTRL-x, simplemente arranca el sistema si todo está correcto.
grub> boot
# Montar un fichero imagen, por ejemplo iso.
grub> loopback loop (hd0,5)/usr/lib/memtest86+/memtest86.iso
grub> ls (loop)/
# Reiniciar.
reboot
# Apagar.
halt
**Enlaces de interés**:
* [[grub2_en_centos_6.x|Instalar GRUB2 en Centos 6.x]]
* [[backup_disco_rescate_de_grub2|Backup / Disco de rescate para el cargador de arranque GRUB2]]
* [[rootear_sistemas_gnu_linux_desde_grub|Conseguir root en sistemas GNU/Linux con GRUB sin tener la password (rootear)]]
* [[https://wiki.archlinux.org/title/GRUB/Tips_and_tricks#Play_a_tune|GRUB2 Tips and tricks]]