4 cosas que no sabías sobre Grub

¡Hola! Hoy exponemos 4 cosas que no sabías sobre GRUB útiles que no sabías. Con estos cuatro puntos podrás solucionar algunos de problemas más comunes. Empecemos:

1. Se pueden añadir nuevas entradas de otros sistemas de tu disco duro

Cuando instalas Linux en una maquina con varios sistemas operativos, en ocasiones, estos otros sistemas no son detectados. Esto puede solucionarse añadiendo la entrada al menú de GRUB del sistema operativo que no aparece en el listado.

4 cosas que no sabías sobre Grub

En este caso hay una entrada para el sistema Windows debajo de las entradas de Linux.  Si queremos hacer esto solo tenemos que hacer una cosa, insertar lo siguiente en el fichero “/boot/grub/grub.cfg”:

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows 10 (en /dev/sdb1)' --class windows --class os $menuentry_id_option 'osprober-chain-7EA0E3B659836131' {
	insmod part_msdos
	insmod ntfs
	set root='hd1,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1  7EA0E3B659836131
	else
	  search --no-floppy --fs-uuid --set=root 7EA0E3B659836131
	fi
	parttool ${root} hidden-
	drivemap -s (hd0) ${root}
	chainloader +1
}

Donde se tiene que definir el disco (en este caso era /dev/sdb1) y se debe definir el UUID del disco ( sdb1 en este caso tiene 7EA0E3B659836131), tambien hay que definir el numero del disco y partición, por ejemplo “hd1,msdos1”, donde hd1 es el disco 2 (empieza desde hd0), y msdos1 es la partición 1 del disco.

2. Se puede navegar por el sistema operativo desde GRUB

Se puede navegar e interactuar con los ficheros del sistema desde grub, para ello hay que pulsar la tecla “e” en el menú de GRUB antes de que cargue el sistema en cuestión.

centos7 grub

Una vez pulsada la tecla “e” se pueden ver las entradas del menú de GRUB:

centos7 listado grub

Después pulsaremos “F2”:

centos7 cli grub

 

centos7 grub hd ls files

Se puede navegar por los ficheros del sistema (en este caso es LVM y por esos solo se ve /boot al hacer ls). Los comandos que nos permiten movernos por el sistema de ficheros desde el la consola de GRUB son:

  • ls: Nos permite listar el contenido de la misma forma que en un sistema unix/linux. También se puede utilizar “ls -al” o “ls -l”, si se utiliza sin indicar el directorio nos listará los discos disponibles y sus particiones por ejemplo: (hd0) (hd0,1) (hd0,2). Si se indica el disco o una partición seguido de “/”, por ejemplo “ls -l (hd0,1)/” nos listará el contenido como se puede ver en la imagen anterior.
  • cat fichero:   Nos permite leer un fichero igual que se haría en un sistema unix/linux

Por desgracia no se puede editar ficheros desde esta consola, pero si se puede arrancar el sistema eligiendo partición, kernel etc (aunque no esté en el menú) y editarlo una vez arrancado el sistema.

3. Se puede poner contraseña a GRUB

Para securizar el menú GRUB en RHEL/Centos 7 & 7.1 lo primero es generar el password cifrado con el comando  “grub2-mkpasswd-pbkdf2” como se puede ver en:

grub2-mkpasswd-pbkdf2

Para securizar el arranque debes introducir lo siguiente en el fichero:  “/etc/grub2/01_users”

set superusers=”usuario”
password_pbkdf2 john grub.pbkdf2.sha512.EL-HASH-DEL-RESULTADO-ANTERIOR

Esta vez configuraremos el usuario root con el hash anterior:

grub2-mkpasswd-pbkdf2 grub users

Tras hacer esto, ejecutamos “grub2-mkconfig –o /boot/grub2/grub.cfg”

grub2-mkconfig

Ahora reiniciamos y pulsamos la tecla “e” para entrar en la linea de comandos de GRUB, veremos que nos pide password:

grub password

En caso de que el sistema sea RHEL/Centos 7.2 el proceso cambia un poco,  primero,  corre los siguientes comandos como “root”:

  1.  “grub2-setpassword”: Introduce la password y copia el hash resultante
  2.  El Hash para la password creado se tiene que introducir en /boot/grub/user.cfg y el usuario ”root” está definido en /boot/grub2/grub.cfg.
  3. Ejecuta grub2-mkconfig –o /boot/grub2/grub.cfg
  4. Reinicia y comprueba que pide password

 

En caso de que el sistema sea RHEL/Centos 5 o 6 el proceso también cambia:

  1. “grub-md5-crypt”: Introduce la password y copia el hash resultante
  2. Abre “/boot/grub/grub.con” e introduce en la linea de arranque: password –md5 “HASH CREADO”
  3. Reinicia y comprueba que pide password

4. Muchos de los problemas de arranque se pueden solucionar desde GRUB

Algunas veces al hacer alguna actualización de sistema, instalación de software o algún cambio especifico, se puede “romper” el arranque de GRUB. Esto normalmente se puede solicionar haciendo pruebas de arranque desde el CLI de grub, antes de conseguir arrancar y modificar el menú desdeel sistema.

Como hemos dicho antes, desde el CLI de GRUB se pueden listar los discos y las particiones con el comando “ls “:

grub> ls
(hd0) (hd0,msdos2) (hd0,msdos1)

Y pasando el disco y partición seguidos de “/” como parametro al comando ls, se pueden listar los ficheros de la partición

grub> ls (hd0,1)/
lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/
lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/
srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old
initrd.img initrd.img.old

Podemos ver el fichero que nos indica el sistema operativo en un linux, esto nos sirve si tenemos varios sistemas linux al arranque, para identificar el sistema:

grub> cat (hd0,1)/etc/issue
Ubuntu 18.04 LTS \n \l

 

Arrancando desde GRUB CLI:

Lo primero es verificar que versiones kernel, vmlinux y initrd.img, para arrancar correctamente estos tres ficheros tienen que ser de la misma versión. Una vez elegida la versión, establecemos el root en el disco y partición correspondiente (set root=xxx). Después establecemos el kernel linux con “linux /boot/vmlinuzXXX root=/dev/YYY” donde XXX es la versión e YYY es el disco y partición que tendrá la raíz del sistema. También establecemos el initrd.img con “initrd /boot/initrd.imgXXX”. Ya solo nos queda arrancar con estos parametros utilizando el comando “boot”:

grub> set root=(hd0,1)
grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub> initrd /boot/initrd.img-3.13.0-29-generic
grub> boot

Para ver las versiones disponibles de los ficheros de kernel y  initrd solo debemos ejecutar ls -l en la raíz del sistema y en /boot:

$ ls -l (hd0,1)/
vmlinuz -> boot/vmlinuz-3.13.0-29-generic
initrd.img -> boot/initrd.img-3.13.0-29-generic

Para arrancar en modo rescate:

grub> set root=(hd0,1)
grub> linux /vmlinuz root=/dev/sda1
grub> initrd /initrd.img
grub> boot
Booting From grub-rescue>

Si estás en el GRUB de rescate los comandos son distintos, y tienes qe cargar los modulos normal.mod y linux.mod:

grub rescue> set prefix=(hd0,1)/boot/grub
grub rescue> set root=(hd0,1)
grub rescue> insmod normal
grub rescue> normal
grub rescue> insmod linux
grub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub rescue> initrd /boot/initrd.img-3.13.0-29-generic
grub rescue> boot

Y con esto ya podríamos acceder al sistema para corregir el arranque del GRUB y hacer que cargue las versiones adecuadas.

Esto ha sido todo por hoy.

Si te ha gustado comparte en tus redes sociales y/o deja un comentario.

¡Nos vemos pronto!

Deja una respuesta