Mostrando entradas con la etiqueta grub. Mostrar todas las entradas
Mostrando entradas con la etiqueta grub. Mostrar todas las entradas
Grub 2 - descansa en paz menu.lst...
Ayer me tope con algo muy molesto... como siempre tengo mi debian en una partición y tenía mint en otra, donde lo instalé para probarlo hace un par de años y ahí quedó. El tema es que con el grub del mint reemplacé al de debian en su momento... hasta acá todo bien. Pero ayer necesitaba espacio (ya contaré la anécdota) y borré el mint, así que instalé grub en debian nuevamente. Reinicio y me topo con muchas opciones para elegir, y la configuración no era la del grub que tenía en debian... Una vez iniciado debian, reviso el menu.lst y estaba todo como lo había dejado, entonces, de donde mierd* estaba tomando la configuración nueva???

Después de pelear un rato y buscar algún otro menu.lst, me decidí a buscar un poco en google sobre la versión de grub que tenía instalada. En algún upgrade parece que se instaló Grub 2 (1.97 beta), y como no lo usaba, no me había dado cuenta... hasta ayer.

Para mi gran sorpresa, Grub 2 no utiliza más el viejo (y ya querido, al menos por mi) menu.lst para la configuración. Aquel archivo, al que ya estaba muy acostumbrado, dejó su lugar para que lo tome uno nuevo, el grub.cfg. El problema es que este grub.cfg no es para nada intuitivo como lo era el anterior, sino que toma el formato de script y no de archivo de configuración. Incluso no está pensado para que lo modifiquen a mano, sino que toma su configuración a partir de otros scripts ubicados en /etc/grub.d: 00_header, 10_linux, 30_os-prober, etc

La idea es que el usuario simplemente ejecute:
# update-grub (o en versiones más actuales grub-mkconfig)
Este comando ejecuta los scripts que están en /etc/grub.d/ en el orden indicado por el número con el que inician sus nombres (osea, primero 00_header, después 10_linux, luego 30_os-prober, etc), también toma valores de /etc/default/grub. La idea es que, en lugar de tocar grub.cfg, toquemos los scripts de /etc/grub.d y el tal /etc/default/grub... el problema es que estos scripts no son intuitivos como el viejo menu.lst. Antes, una persona sin idea de scripting o programación, podía tocar el menu.lst y aprender a usarlo, ahora con estos scripts lo veo más difícil, e incluso intimidante para alguien que no maneja estas cosas.

Es verdad que existen programas como startupmanager, que nos permiten configurar algunas opciones de grub, pero no es para nada flexible en cuanto a las opciones que permite. En mi caso particular, quería borrar todas las entradas con kernels viejos, para que no me liste 15 kernels que no uso... pero esto no lo puedo hacer con startupmanager, es más, tendría que reescribir bastante la funcionalidad de 10_linux para que no los liste... en realidad no hay forma. 10_linux revisa el directorio /boot/ y lista todos los kernels que encuentra... para algunos está perfecto, pero yo no quiero eso. Así que no me quedó otra que borrar a mano del grub.cfg los kernels viejos. Pero resulta que cualquier actualización de grub, o cualquier cosa que quiera tocar, hará que los scripts me sobreescriban el grub.cfg, volviendo a colocar los kernels viejos...

Si bien me parece perfecto que se hagan cambios pensando en funcionalidad, creo que en este caso le pifiaron, o al menos deberían dar la opción de elegir si seguir con el viejo menu.lst o usar el formato nuevo con scripts. Es verdad que puedo volver a instalar Grub 1, pero estaría bueno avanzar...

En fin, la idea del post es advertirles/informarles acerca del funcionamiento de Grub 2, porque yo la verdad no conocía los cambios que habían incorporado, ni como funcionaba.

En las páginas: Instalar Grub2 en Debian y Grub 2 (1.97~beta4-1ubuntu4) pueden encontrar información sobre instalación y configuración de Grub 2. Una de las buenas es que podemos usar como fondo imágenes .png, eso sí, para cambiar el la imagen deberán meter mano a un archivo similar a /etc/grub.d/05_debian_theme...
Grub: configurando el gestor de arranque
Post dedicado al colo que hoy me preguntó cómo recuperar grub una vez instalado el maleducado de Windows que sobreescribe el MBR sin preguntar >=(
El artículo lo escribí hace un par de años y ya que estoy le adhiero algunas cosas de configuración de Grub, todo esto lo publiqué hace un año en el foro linuxespanol aquí. Que lo disfruten.

----------------------------------------------------------------------------------------
Instale Windows y ahora no puedo iniciar Linux! Cómo recupero el grub???
La indignación que esto produce es muy grande, pero por suerte tiene una solución muy sencilla.
Lo que hace windows al instalarse es sobre-escribir el MBR (Master Boot Record) con su propio gestor de arranque sin siquiera preguntar al usuario para saber si lo debe hacer o no >=(
Hay varias formas de recuperar grub, siendo quizas la más sencilla usando SuperGrub (http://www.supergrubdisk.org/)
Otra forma bastante simple (suponiendo que la partición donde esta instalado grub esta mapeado a /dev/sda1) es la siguiente:
1 iniciar el sistema con algun live-cd (knoppix, ubuntu, etc)
2 crear un directorio para montar la partición donde se encuentra instalado grub:
mkdir /media/linux
3 montar la partición donde se encuentra instalado grub
mount /dev/sda1 /media/linux
4 hacer un bind del /dev del live cd, al /dev de la particion recien montada
mount --bind /dev /media/linux/dev
5 cambiar el origne del directorio raíz
chroot /media/linux
6 instalar grub en el MBR del disco de arranque
grub-install /dev/sda


Cómo modificar la configuración de grub?

Como casi todo en linux, para editar algún programa, debemos editar un archivo, en este caso, el archivo en cuestión es /boot/grub/menu.lst
Este archivo es muy fácil de editar dado q en él vienen ejemplos de como hacerlo, las lineas que vienen como comentarios son aquellas precedidas por un #. Toda linea que pongamos de esta forma, no sera tomada en cuenta a la hora de ejecutarse.
Ahora bien, voy a describir:

Como cambiar el formato predefinido de arranque
Como agregar una entrada al grub
Como agregar una imagen al grub

Cómo cambiar el formato predefinido de arranque?
El grub al instalarse, definirá un sistema operativo como predeterminado, que sera el que se cargara en el caso de q el usuario no elija una opción después de un cierto tiempo.
Nosotros podemos cambiar tanto el sistema operativo predeterminado, como el tiempo que deberá esperar grub antes de arrancar el sistema predeterminado.
Para cambiar el sistema que se cargara predeterminadamente, debemos cambiar el valor de la linea que lleva el parámetro default.
Predeterminadamente, el grub suele tener estas líneas así:
## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.
# WARNING: If you are using dmraid do not change this entry to 'saved' or your
# array will desync and will not let you boot your system.
default 0
El numero que debemos poner, es el numero que tiene el sistema operativo en la lista de sistemas. Si por ejemplo tenemos:
title Debian GNU/Linux, kernel 2.6.17.6
root (hd0,2)
kernel /boot/vmlinuz-2.6.17.6 root=/dev/sda3 ro
initrd /boot/initrd.img-2.6.17.6
savedefault
boot

title Debian GNU/Linux, kernel 2.6.8-2-386
root (hd0,2)
kernel /boot/vmlinuz-2.6.8-2-386 root=/dev/sda3 ro
initrd /boot/initrd.img-2.6.8-2-386
savedefault
boot

title Knoppix, kernel 2.6.11 Default
root (hd0,3)
kernel /boot/vmlinuz root=/dev/sda4 ro ramdisk_size=100000 lang=es apm=power-off nomce vga=791
initrd /boot/initrd.img
savedefault
boot

# This entry automatically added by the Debian installer for a non-linux OS
# on /dev/sda1
title Microsoft Windows XP Professional
root (hd0,0)
savedefault
makeactive
chainloader +1
Cada entrada tiene un numero asociado, la primera es la 0, la segunda es la 1, y así sucesivamente.
Si en este caso, quisiera que mi sistema arranque con Knoppix, kernel 2.6.11 Default, en el parámetro default, debería poner:
default 2
Si quisiera que arranque con windows, debería poner:
default 3
Se entiende?

Ahora, para cambiar el tiempo que queremos que grub espere antes de arrancar con la opción predeterminada, debemos cambiar el parámetro timeout, con este parámetro se indican los segundos que se deben esperar. Poniendo por ejemplo, timeout 10, va a esperar 10 segundos, poniendo timeout 15, va a esperar 15.
Un ejemplo es:
## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout 10

Cómo agregar una entrada al grub?
Para agregar una entrada al grub, debemos agregar en /boot/grub/menu.lst una entrada de la forma:
title Debian GNU/Linux, kernel 2.6.17.6
root (hd0,2)
kernel /boot/vmlinuz-2.6.17.6 root=/dev/sda3 ro
initrd /boot/initrd.img-2.6.17.6
savedefault
boot
Donde lo que nos interesa saber es, que:
- tittle es el titulo que aparecerá en el menu de selección al encender la maquina
- root indica cual es la partición donde esta el sistema
- kernel indica donde está la imagen del kernel y donde está el directorio raíz.
- initrd indica donde esta el initrd.
Hay q aclarar que para indicar una dirección en una partición, se hace a través del mapeo (hd*,nro), donde hd* indica en qué disco tenemos ese sistema, si el sistema lo tenemos en el disco 0, entonces el formato será (hd0, nro). Si el sistema esta en el disco 1, el formato será (hd1,nro). El nro es el número de nuestro dispositivo menos uno, es decir, si por ejemplo, el dispositivo asociado a nuestra partición es sda3 (donde sda suele ser el disco 0, sdb el disco 1, etc), la dirección de la partición será de la forma (hd0,2) como en nuestro ejemplo.

Para agregar una entrada para bootera algún windows, el formato es distinto, dado que no indicamos donde esta el kernel o el initrd.
El formato de una entrada para un windows que está instalado en la particion sda3 (aunque puede tener alguna opción más o alguna opción menos) es:
# This entry automatically added by the Debian installer for a non-linux OS
# on /dev/sda3
title Microsoft Windows XP Professional
root (hd0,2)
savedefault
makeactive
chainloader +1

Como agregar una imagen al grub?
Para agregar una imagen a nuestro grub, lo hacemos agregando el parametro splashimage, con este parametro y la direccion de una imagen, logramos q nuestro grub tenga de fondo una imagen, y asi queda muy cool =)
Algo para tener en cuenta es q la imagen debe ser de 640x480, de 16 colores y debe tener la extencion .xpm.gz, es decir, debe ser de formato xpm, y debe estar comprimido con gzip.
Ahora si, un ejemplo de como debemos escribir la linea con el parametro splashimage es:
splashimage=(hd0,2)/boot/grub/tux.xpm.gz
Donde al igual q antes (hd0,2) indica q la imagen se encuentra en el dispositivo sda3, en la direccion /boot/grub/tux.xpm.gz