jueves, 17 de julio de 2014

Preparando las maletas VII - Reinstalar Windows en un sistema híbrido (GRUB2)

Se puede tener Windows y Linux en un mismo ordenador. La única precaución para no complicarse la vida es instalar primero Windows, que creará su propio gestor de arranque, y luego Linux, que lo sustituirá por uno que permita elegir el sistema con el que queremos empezar. ¿El problema? Pues que si Windows nos hace de las suyas y queremos formatear, volverá a poner su gestor de arranque (que no reconoce a Linux)... y que quizá, una vez restaurado el arranque de Linux, no podamos montar la partición Windows en él. Veamos cómo solucionar esto.

Lo primero es lo primero: conocer los conceptos.
- El sector de arranque, o MBR, es un espacio fijo del disco duro en el que el ordenador va a buscar las primeras órdenes del sistema operativo (entre otras cosas). Aquí es donde se instala el sistema de arranque de cualquier sistema.
- El GRUB es el gestor de arranque que utilizan muchas distribuciones de Linux (que yo sepa, todas las basadas en Debian, como Ubuntu o Linux Mint). Entre éstas, hoy día se usa el GRUB 2, muy parecido pero con algunas diferencias. También hay distribuciones que usan LiLo, pero no las voy a comentar aquí puesto que no he trabajado con él, aunque el proceso debe ser similar.
- Normalmente, en Linux siempre trabajamos como un usuario común, con privilegios limitados. El root, administrador o superusuario es un usuario especial con privilegios ilimitados que debe usarse sólo para tareas más o menos delicadas (desde instalar un programa hasta editar archivos del sistema).
- En Linux los discos tienen una nomenclatura muy concreta. Los discos PATA (los antiguos IDE, para que nos entendamos) se llaman hd, mientras que los SATA (los actuales) se llaman sd. El primer disco tendrá la letra a, el segundo la b, etc... y las particiones terminan siempre con un número: la primera partición será la 1, la segunda la 2... A modo de ejemplo, el disco SATA maestro sería el sda, y su segunda partición, sda2.
- Un Live CD es un CD o DVD con una distribución que permita arrancar un sistema completo desde ahí, sin instalar nada. La enorme mayoría de distribuciones actuales vienen así por defecto. Un Live USB es exactamente lo mismo pero usando un disco extraíble USB en lugar de un CD o DVD; ya sea porque la distribución tenga una versión ya preparada así o porque hayamos copiado la versión CD en un disco USB con el programa UNetbootin.

 ¡No queremos perder el arranque de Linux!
Antes de tocar nada de Windows, conviene hacernos una copia de seguridad de nuestro GRUB actual. Para ello, abrimos una terminal y ejecutamos lo siguiente:
sudo su
Nos pedirá contraseña. Una vez ejecutado, nos permitirá actuar como administrador.
Más adelante necesitaremos saber qué particiones tenemos y cómo se llaman. Para eso usamos el siguiente comando:
fdisk -l
cat /etc/fstab
Esto nos mostrará todos discos y particiones del sistema. Nos hará falta para el siguiente paso.
dd if=/dev/disco of=/ruta_elegida/mbr.bin bs=512 count=1
dd if=/dev/disco of=/ruta_elegida/stage1_5.bin skip=1 bs=512 count=61
Estas dos líneas crearán sendos archivos que contienen el GRUB.
Aquí, disco será el disco físico en el que se encuentra el arranque (típicamente, sda1 o hda1) y ruta_elegida es la carpeta en la que queremos copiar el GRUB para restaurarlo más tarde (sugiero la ruta /home/nombre_de_tu_usuario, aunque yo lo he copiado directamente en la raíz).
Ahora podemos hacer lo que queramos con la partición Windows (formatear, reinstalar o lo que toque). Una vez terminemos, toca restaurar el GRUB. Arrancamos con nuestra distribución favorita en Live CD o Live USB y seguimos:
sudo su
dd if=/ruta_elegida/mbr.bin of=/dev/disco
dd if=/ruta_elegida/stage1_5.bin of=/dev/disco seek=1 bs=512
Es el mismo proceso de antes: la primera línea nos otorga permisos de administrador y las dos siguientes copian el contenido de los archivos que creamos antes en el sector de arranque del disco duro.

 ¡Ya lo he perdido!
Puede ocurrir que hayamos instalado Windows sin hacer antes una copia del GRUB. ¿Ahora qué? Pues ahora toca reinstalarlo, que tampoco pasa nada por eso.
Lo primero es preparar un Live CD o Live USB con cualquier distribución que use el miso tipo de GRUB que la nuestra (usualmente, GRUB2). Idealmente usaremos la misma distribución que tenemos instalada para asegurarnos.
Una vez arranca el Live CD, abrimos una consola y escribimos lo siguiente:
sudo fdisk -l
Este comando nos mostrará los discos y particiones del ordenador y qué sistema operativo hay en cada uno de ellos.
sudo mount /dev/partición /mnt
Este comando montará la partición para que podamos trabajar con ella. Partición será la partición en la que se encuentre nuestra instalación de Linux.
Ya sólo queda reinstalar GRUB, cosa que haremos con el siguiente comando:
sudo grub2-install --boot-directory=/mnt/boot/ --recheck /dev/disco sudo grub2-mkconfig -o /mnt/boot/grub2/grub.cfg
Aquí, disco será el disco físico en el que instalaremos el arranque (típicamente, sda1 o hda1).

NOTA: Este proceso puede necesitar de varios pasos más si hemos instalado el GRUB de formas especiales. En este enlace hay métodos alternativos y más información sobre el tema.

¡Ahora me da errores al montar la partición Windows!
Esto no es tan habitual, pero... a mí me ha pasado hace un rato.
El problema aparece de una forma bastante acongojante. El arranque de Linux se para sin avisar y nos muestra un error tal que así: The disk drive for partición_windows is not ready yet or not present.
Esto ocurre porque Linux, internamente, reconoce las particiones según un número, llamado UUID, que se genera durante la instalación del sistema. En su momento se generó un número para la partición de Windows, y era el que usaba el sistema para saber qué debía montar, pero al formatear dicha partición ha cambiado el número, por lo que el sistema se ve incapaz de montarla.
Lo que haremos será averiguar cuál es el número actual de la partición Windows y después editar el archivo en el que Linux almacena dicho número.
El primer paso será averiguar cuál es el UUID real de nuestra partición Windows:
sudo blkid /dev/partición_windows
El UUID es un número bastante largo, así que será mejor apuntarlo antes de editar el archivo en cuestión:
sudo gedit /etc/fstab
Debería abrirse el editor Gedit, que viene por defecto en Gnome. Si no es el caso, se puede sustituir ese comando por el de nuestro editor favorito (nautilus, Vim, Emacs... yo usé el Leafpad).
En el archivo que tenemos abierto buscamos una línea parecida a ésta:
# /mnt/windows was on /dev/sda1 during installation
UUID=2D6BD36E7AECF0E3 /mnt/windows    ntfs    defaults,umask=007,gid=46 0       0
He marcado en rojo el UUID, que es el que hay que sustituir por el que obtuvimos con el comando blkid.
Guardamos, reiniciamos y todo debería haber vuelto a la normalidad.

No hay comentarios:

Publicar un comentario