Tabla de Contenidos

GRUB (GRand Unifier Bootloader) es un gestor de arranque: es lo primero que se carga cuando se inicia la computadora. Permite tener diferentes sistemas operativos, y diferentes versiones de ellos, en el mismo disco duro. Por ejemplo podemos tener Windows y GNU/Linux en la misma computadora, GRUB se cargará antes que cualquiera de éstos permitiéndonos elegir cuál iniciar.

El gestor de arranque GRUB viene preinstalado en la mayoría de las distribuciones de GNU/Linux modernas, entre ellas Debian, Ubuntu y sus derivadas. Anteriormente, el gestor de arranque más usado era LILO.

Grub 2

Grub 2.0 es el gestor de arranque predeterminado de algunas de las últimas versiones de Linux.1)

Modificaciones en el menú de arranque

Para modificar el tiempo de espera, sistema operativo por defecto, el nombre de los sistemas operativos y toda la información del arranque de cada uno de ellos (igual que se hacía antes en /boot/grub/menu.lst) se puede hacer mediante el archivo /boot/grub/grub.cfg No es recomendable hacerlo de este modo, ya que este archivo es un archivo creado automáticamente por el sistema utilizando otros archivos que son los que se deben modificar para cambiar los ajustes de Grub2. El archivo grub.cfg tambien se genera escribiendo en terminal:

   sudo update-grub2

Los principales archivos para modificar las opciones de grub2 son:

Los contenidos en la carpeta /etc/grub.d/

   /etc/grub.d/10_linux 

Este archivo contiene comandos y scripts que se encargan del kernel de linux en la particion principal.

   /etc/grub.d/30_os-prober 

Este archivo contiene comandos y scripts que se encargan de otros sistemas operativos. El archivo tiene 4 secciones. Los cambios que realicemos en una sección no afectarán al resto de las secciones. Las cuatros secciones son Windows, otras particiones Linux, OSX y Hurd.

El archivo /etc/default/grub: Una breve explicación de las líneas de este archivo:

   GRUB_DEFAULT= 0/saved

Con la opción 0 hacemos que se seleccione por defecto la primera entrada, con la opción 1, la segunda, y así succesivamente. Con la opción saved, hacemos que siempre seleccione la última entrada que se ejecutó.

   GRUB_TIMEOUT=10

Le ponemos el tiempo de espera hasta ejecutar la entrada que tenemos puesta como default.

   GRUB_HIDDEN_TIMEOUT=0 

Esconde el menú de entradas del grub, si le ponemos un tiempo mas alto lo que hace es esconder el menú, pero esperarse un tiempo hasta continuar. Para hacerlo visible tenemos que comentar (escribir # al principio) la linea y que queda de la siguiente manera

   #GRUB_HIDDEN_TIMEOUT=0
   GRUB_HIDDEN_MENU_QUIET=true/false

Si está “true” oculta la cuenta atrás, mientras que si está a “false” muestra la cuenta atrás.

   GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian 

Determina el nombre de la entrada del menú.

   GRUB_CMDLINE_LINUX="opciones"

Similar al altoptions del antiguo grub.

   GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" quiet 

Sirve para agrupar las entradas iguales, mientras que splash sirve para que nos muestre la imagen de carga en vez de los mensajes del kernel

   #GRUB_GFXMODE=640x480 

Al descomentar la línea activa el grub gráfico. Mediante el comando vbeinfo escrito en la línea de comandos del grub vemos las posibilidades. Por ejemplo:

   GRUB_GFXMODE=1024x768

Si además deseamos que se mantenga dicha resolución para trabajar desde la consola, podemos agregar la siguiente línea a continuación:

   GRUB_GFXPAYLOAD_LINUX=keep

Esta línea también permitiría especificar otra configuración diferente, si así se desea. Por ejemplo:

   GRUB_GFXPAYLOAD_LINUX=800x600

Para que no aparezca la opción de recuperación en el menú, descomentar esta línea:

   #GRUB_DISABLE_LINUX_RECOVERY="true" 

Los de la carpeta /usr/sbin/ (solamente los que llevan grub*, son los comandos que se ejecutan en terminal)

Los errores en las modificaciones de GRUB pueden llevar a problemas con el arranque. Por esto es recomendable hacer una copia de seguridad de los archivos que modifiquemos antes de realizar algún cambio

Cambiar el nombre de un sistema operativo en el menú

Con este comando podemos ver los nombres de todos los sitemas operativos (los nombres no cambian hasta que ejecutamos sudo update-grub2)

     sudo cat /boot/grub/grub.cfg | grep "menuentry" | cut -d '"' -f 2

Cambiar el nombre de Ubuntu

Para cambiar el nombre de Ubuntu, modificamos el archivo /etc/grub.d/10_linux:

    sudo gedit /etc/grub.d/10_linux

Podemos, por ejemplo, hacer que el nombre de Ubuntu sea del tipo “Ubuntu, Karmic 2.6.31-15-generic”, añadimos la línea:

    codename="`lsb_release -cs`"

al final de:

   while [ "x$list" != "x" ] ; do
    linux=`version_find_latest $list`
    echo "Found linux image: $linux" >&2
    basename=`basename $linux`
    dirname=`dirname $linux`
    rel_dirname=`make_system_path_relative_to_its_root $dirname`
    version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
    alt_version=`echo $version | sed -e "s,\.old$,,g"`
    linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"

De esta forma añadimos una nueva variable con el nombre de la distro al archivo, que podremos usar despues en la siguiente Linea:

   linux_entry "${OS}, Linux ${version}" \
       "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}" \
     quiet

Acá Podemos modificar la primera línea a nuestro antojo:

 #de esta forma mostrará "Ubuntu, Karmic 2.6.31-15-generic"
 linux_entry "${OS}, ${codename} ${version}" \  
 # de esta forma mostrará "Ubuntu Karmic"
 linux_entry "${OS} ${codename}" \                     
 # de esta forma mostrará "Ubuntu Texto que quieras"
 linux_entry "${OS} Texto que quieras" \    
            

Guardamos el archivo y ejecutamos

  sudo update-grub2 
  

Cambiar el nombre otro sistema operativo

Para cambiar el nombre de otros SO, modificamos el archivo /etc/grub.d/30_os-prober:

   sudo gedit /etc/grub.d/30_os-prober

Vamos a la sección del archivo que corresponda (si es para cambiar Windows es la primera sección sobre la línea 80)

  for OS in ${OSPROBED} ; do
    DEVICE="`echo ${OS} | cut -d ':' -f 1`"
    LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
    LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
    BOOT="`echo ${OS} | cut -d ':' -f 4`"
    

Y cambiamos:

  if [ -z "${LONGNAME}" ] ; then
     LONGNAME="${LABEL}"
   fi
  

Por:

if [ “${LONGNAME}” = “Titulo literal que aparece en el menu grub” ] ; then

     LONGNAME="Nuevo título que quieres"
  elif [ -z "${LONGNAME}" ] ; then
     LONGNAME="${LABEL}"
   fi
  

Por ejemplo, si en el menú grub aparece “Windows 7 (loader) (on sda1)” y queremos q ponga “Seven (on sda1)”, entonces escribiremos:

  if [ "${LONGNAME}" = "Windows 7 (loader)" ] ; then
     LONGNAME="Seven"
  elif [ -z "${LONGNAME}" ] ; then
     LONGNAME="${LABEL}"
   fi
   

Guardamos el archivo y ejecutamos sudo update-grub2

Cambiar o eliminar (on /dev/sdxy)

Modificamos la parte del archivo que pone (cada línea que pone menumentry es de una sección del archivo):

  menuentry "${LONGNAME} (on ${DEVICE})" {
   #de esta forma, no muestra (on /dev/sdxy)
  menuentry "${LONGNAME} " {                  
   #de esta forma, muestra (en la particion /dev/sdxy)
  menuentry "${LONGNAME} (en la particion ${DEVICE})" {     
  

Guardamos el archivo y ejecutamos sudo update-grub2.

Agregar manualmente cualquier sistema operativo (Ejemplo: MacOS)

Esta es la solución si el grub no detecta la partición o si la detecta pero no la arranca correctamente. Es el equivalente a insertar una entrada manualmente en el antiguo menu.lst. En este ejemplo insertamos una particion de MacOS. Abrimos el archivo /etc/grub.d/40_custom:

   sudo gedit /etc/grub.d/40_custom
   

En la última línea del archivo pegamos las siguientes líneas (importante cambiar hd0,1 por la particion que corresponda):

   
   menuentry "MacOS X (en hd0,1)" {
             insmod hfsplus
             set root=(hd0,1)
             multiboot /boot
         }
         

Escribimos el comando:

   sudo update-grub2
   

Si en el menú del grub aparecen 2 entradas para mac (la que creamos manualmente nosotros y otra que aparece automáticamente) debemos abrir el archivo 30_os-prober, ir a la sección de mac y comentar las líneas dedicadas a ese sistema operativo (si no has modificado el archivo, desde la 158 hasta la 207, incluidas). Las líneas son las siguientes:

   #    macosx)
   #     OSXUUID="`grub-probe --target=fs_uuid --device ${DEVICE} 2> /dev/null`"
   #       cat << EOF
   . . .
   #              xnu_splash /Extra/splash.tga
   #           fi
   #        fi
   #}
   #EOF
   

Eliminar un sistema operativo del menú Grub

La información de los sistemas operativos se agrupa en distintos archivos de la carpeta /etc/grub.d/ Para eliminar un sistema operativo, simplemente eliminamos el archivo o le cambiamos el nombre (por ejemplo introduciendo un asterisco antes del nombre).

Eliminar memtest

Para que no aparezca memtest en el menú, le quitamos los permisos de ejecución con el siguiente comando:

   sudo chmod -x /etc/grub.d/20_memtest86+

Si escribimos +x en lugar de -x volvemos a darle permisos de ejecución y nos volverá a aparecer. Ejecutamos:

   sudo update-grub2

Eliminar el sistema de recuperación

Abrimos etc/default/grub

   sudo gedit /etc/default/grub

y cambiamos

   #GRUB_DISABLE_LINUX_RECOVERY="false"

por:

   GRUB_DISABLE_LINUX_RECOVERY="true"

También podemos hacer esto en un solo comando con:

   sudo sed s/'#GRUB_DISABLE_LINUX_RECOVERY="true"'/'GRUB_DISABLE_LINUX_RECOVERY="true"'/g -i /etc/default/grub
   

Despues actualizamos grub2:

   sudo update-grub2
   

Eliminar un kernel de Ubuntu

Para eliminar un kernel, podemos mover los archivos de ese kernel de la carpeta /boot a una carpeta creada por nosotros. Primero creamos la carpeta:

   sudo mkdir /boot/kernels
   

A continuación movemos la imagen del kernel (debemos cambiar 2.6.31-14 por el kernel que queramos eliminar del menú):

   sudo mv /boot/vmlinuz-2.6.31-14-generic-pae /boot/kernels/
   

Y tambien podemos mover la imagen de que se utiliza para entrar en el modo recuperación (debemos cambiar 2.6.31-14 por el kernel que queramos eliminar del menú):

   sudo mv /boot/initrd.img-2.6.31-14-generic-pae /boot/kernels/
   

Despues actualizamos grub.cfg:

   sudo update-grub2
   

Ahora podemos comprobar que podamos acceder al kernel que queramos viendo las entradas del grub con el siguiente comando: sudo cat /boot/grub/grub.cfg | grep “menuentry” | cut -d '“' -f 2 Nota: esto lo deberemos hacer cada vez que actualizamos a un nuevo kernel

Cambiar el tiempo de espera y sistema operativo por defecto

Estos parámetros se modifican en el archivo /etc/default/grub:

   $ sudo gedit /etc/default/grub

En la sección:

   GRUB_DEFAULT=0    
   

Sistema operativo por defecto, 0 es el primero, 1 el segundo, etc.

   GRUB_TIMEOUT="10"    
   

Tiempo de espera en segundos Despues de modificar el archivo, debemos actualizar grub.cfg con el comando:

   sudo update-grub2
   

Modificar el entorno

Modificar la imagen de fondo

La imagen de fondo debe estar en formato .png, o .tga, preferiblemente tga. Por ejemplo para utilizar una imagen cualquiera en JPG, la abrimos la imagen con Gimp, vamos al menú Imagen>Escalar imagen y le ponemos la resolución 640×480. Es preferible guardarla en el escritorio y copiarla en /usr/share/images/grub/ , donde vienen las imagenes por defecto de grub2, con una resolución de 640×480, En cierto Sistemas no se encuentra la carpeta grub por lo que hay que crearla con el comando:

    sudo mkdir /usr/share/images/grub
    

Copiarla con el comando (en el caso de usar una imagen .png cambiar tga por png):

    sudo cp /home/tu_nombre/Escritorio/tu_imagen.tga /usr/share/images/grub/tu_imagen.tga
    

Crearemos un link a la carpeta /boot/grub para no tener que editar el script theme (En caso de una imagen .png recordad cambiar tga por png).

    sudo ln -s /usr/share/images/grub/tu_imagen.tga /boot/grub/moreblue-orbit-grub.tga
    

Despues de modificar el archivo, debemos actualizar grub.cfg con el comando:

   sudo update-grub2

Modificar el color del texto

Antes de modificar los colores del texto debemos tener una imagen de fondo. Para modificar los colores del texto abrimos el archivo /etc/grub.d/05_debian_theme

   sudo gedit /etc/grub.d/05_debian_theme

En la sección:

   # set the background if possible
   if background_image `make_system_path_relative_to_its_root ${bg}` ; then
    set color_normal=black/black 
    set color_highlight=magenta/black
    

Donde en “set color_normal” el primer “black” es el color del texto sin seleccionar y en “set color_highlight”, “magenta” es el color del texto seleccionado y “black” es el color del fondo en la línea de texto seleccionado. Los colores que se pueden utilizar son:

Despues de modificar el archivo, debemos actualizar grub.cfg con el comando:

   sudo update-grub2

Proteger el menú

Puede que si nos preocupa la seguridad, deseemos proteger la configuración del menú.2) Para esto, debemos editar el archivo /etc/grub.d/00_header:

sudo gedit /etc/grub.d/00_header

Al final del archivo, debemos introducir un contenido como el siguiente:

cat << EOF
superusers="usuario"
password usuario clave
EOF

Donde usuario es un nombre de usuario cualquiera (aunque no exista en el sistema) y clave sería la contraseña que escojamos, en claro (Grub2 soporta la encripción de las contraseñas mediante el comando grub-mkpasswd-pbkdf2). Finalmente solo hay que actualizar el menú, y con esto los cambios se activarán:

sudo update-grub2
1)
Ojo, que la versión reportada por el paquete en realidad es 1.9x.
2)
Grub2 soporta la protección de entradas individuales, pero esto es bastante más complejo de configurar.