03 enero 2010

Ocultar una partición Windows en Grub2


Al instalar Ubuntu (o cualquier Linux moderno) en algún portátil que mantenga el sistema operativo Windows original se nos puede dar el caso de que aparezcan un par de entradas con Windows y que si ejecutamos una de ellas en lugar de acceder a Windows accedemos a la partición de recuperación del sistema que suele acompañar a estos portátiles.

Esto me ha pasado, por ejemplo, con un Sony Vaio FZ18 y con un Asus EEPC 1101HA, pero pasa en la mayoría de los portátiles "de marca", por decirlo de algún modo.

Para evitar el acceso a estas particiones de recuperación desde el menú de Grub bastaba con eliminar la línea adecuada en el archivo /boot/grub/menu.lst

Ahora bien, en Grub 2 esto se vuelve algo más complicado, ya que el archivo que contiene las particiones que se pueden arrancar (/boot/grub/grub.cfg) no se edita directamente, sino que se genera mediante el comando

update-grub

a partir de lo que se le indica del contenido de la carpeta /etc/grub.d

En concreto las particiones de Windows se detectan mediante el archivo 30_os-prober.

La solución

En este foro de Ubuntu Leppie apunta la solución. Si al ejecutar desde una consola update-grub nos aparece algo así

Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.31-16-generic
Found initrd image: /boot/initrd.img-2.6.31-16-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows Vista (loader) on /dev/sda1
Found Windows Vista (loader) on /dev/sda2

Y sabemos que nuestro Windows se encuentra en la partición sda2, lo que buscaremos será ocultar de la vista la partición sda1.

Ojo: Si lo hacemos al revés no podremos acceder temporalmente al sistema Windows, aunque la solución sería volver a repetir estos pasos.

Ahora editaremos el archivo 30_os-prober y buscaremos una parte que contiene este texto:

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`"

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

 Justo debajo añadiremos el siguiente bloque:

# Added to remove Windows Recovery
if [ "$LONGNAME" = "Windows Vista (loader)" ] && [ "${DEVICE}" = "/dev/sda1" ] ; then
continue
fi
# End Added

 Es decir, que cuando encuentre /dev/sda1, se la salte.

Ahora ejecutaremos de nuevo update-grub y veremos algo así:

Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.31-16-generic
Found initrd image: /boot/initrd.img-2.6.31-16-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows Vista (loader) on /dev/sda2

Así ya solo tendremos acceso a la partición que contiene el sistema Windows "de verdad" y evitaremos que alguien, accidentalmente pueda restaurar el sistema eliminando todo su contenido.

Advertencia

Con estas cosa, como siempre, hay que andar con cuidado, que si nos descuidamos podemos montar algún pequeño lío que otro.

4 comentarios:

Anónimo dijo...

muchisimas gracias de verdad hermano me has salvado de una en especial porque en las acer si se entra en la particion del recovery por lo gral estropea el grub en fin, antes solo comentaba esa particion pero con el grub2 si me habia dado una lata encontrar esto. saludos

Antonio dijo...

Me alegro de que te haya servido. Nos tenemos que ir acostumbrando a estos pequeños cambios. :-)

Un saludo.

Anónimo dijo...

Gracias por el "tip", saludos desde Guadalajara, Jalisco

Unknown dijo...

Gracias, capo, era lo que andaba buscando. Saludos.