Recuperar GRUB desde LiveCD (sesión viva)
Vamos a utilizar un LiveCD para recuperarlo. En este caso uso Ubuntu por ser la que más novatos usan, pero los comandos para montar la partición del disco rígido deben ser las mismas. Tengan en cuenta que es más seguro hacerlo desde la sesión viva del mismo sistema operativo que tienen instalado, i.e: si tienen instalado Ubuntu, usen un LiveCD de Ubuntu. Es posible hacerlo combinando distribuciones, pero no lo probé, así que no puedo estar seguro.Iniciar la sesión viva
Empezamos por tomar un LiveCD de Ubuntu, el mismo que utilizaste para instalar el sistema operativo. Puede ser en CD/DVD o en un pendrive USB. Hay que tener cuidado de que estemos arrancando el USB/CD y no el disco local. Cuando aparezca el diálogo de ubiquity, vamos a seleccionar "Español" y "Probar Ubuntu".Es recomendable hacer un backup de datos en este punto.
Identificar la partición de nuestro sistema
Ahora lo problemático: identificar en qué partición está el directorio/boot
.
Para eso abrimos la terminal
click sobre "Inicio" y empezar a escribir "terminal" (puede que aparezca con las primeras letras)
El dispositivo en donde se encuentra la partición /boot
depende de como se haya instalado el sistema. En éste caso se instaló sobre un disco que tenía Windows XP utilizando la opción "Instalar Ubuntu junto a Windows XP". Entonces, tenemos que identificar esa partición. Vamos a utilizar fdisk -l
como usuario root
para identificar las particiones del disco local.
$ sudo fdisk -l
Estas son las particiones de mi disco. La partición con "Sistema" Linux
es donde se instaló Ubuntu. Si eligieron alguna forma de particionado donde /boot
esté en una partición separada del resto del sistema tendrán que montarla más adelante junto con la partición del sistema. Como ven, la partición donde está el directorio /boot
es /dev/sda5
.
Montar la partición del sistema
Identificada la partición del sistema vamos a montarla en el directorio /mnt del árbol de directorios de nuestra sesión viva para que sea accesible. Para montar particiones se usa el comando mount como root:
$ sudo mount [opciones] <partición> <directorio>
En nuestro caso la partición es /dev/sda5
y el directorio /mnt
, no necesitamos ninguna opción para montar ésta partición. Ejecutamos el comando (recordar cambiar el nombre de la partición adecuada!)
$ sudo mount /dev/sda5 /mnt
Sólo si tenemos el directorio /boot
en una partición diferente la montamos en /mnt/boot
utilizando el mismo comando, por ejemplo:
$ sudo mount /dev/sdaX /mnt/boot
Montar los sistemas de directorios virtuales (virtual filesystems)
Es necesario para poder utilizar el sistema desde el disco local. Si alguna parte escapa a tu conocimiento, simplemente tomalo como "magia". La razón simple es que hace falta "mentirle" al sistema para poder utilizarlo desde el disco local, haciendole creer que la partición "root" (/
) está en el directorio /mnt
. Pero para lograrlo es necesario poder acceder al sistema que está corriendo realmente en nuestra sesión viva.Entonces, montamos los sistemas virtuales
/dev
(información sobre dispositivos en el sistema), /proc
(información de los procesos en ejecución del sistema) y /sys
(información sobre el sistema y controladores). Nuevamente usamos el comando mount
pero esta vez con la opción --bind
:
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys
Asegurar que ejecutamos comandos de la sesión viva
Para no llevarnos sorpresas con cambios de versiones entre la sesión viva y el sistema local.Hay que tomar nota que estamos usando la opción
--bind
para no sobrescribir los archivos en el disco local!
$ sudo mount --bind /usr /mount/usr
Cambiar de directorio raíz (root)
Ahora viene la parte divertida (o no), cambiar el directorio root del sistema a nuestro disco local. Para esto usamos el comandochroot
:
$ sudo chroot /mnt
A partir de este momento el directorio /
(root) está en el disco local, ejecutamos comandos de la sesión viva y tenemos toda la información de procesos, dispositivos y controladores de la sesión viva, sorprendente, no?También hay que notar que estamos registrados como usuario
root
. No es necesario anteponer sudo
a cada comando que necesite privilegios.
Generando un archivo de configuración para GRUB
En Ubuntu, la creación del archivo de configuración de GRUB está a cargo de un comando (update-grub
), en otras distribuciones tienen nombres diferentes, incluso algunas (como ArchLinux) no tienen ningún comando específico sino que usan las utilidades proporcionadas por GRUB (grub-mkconfig
). es recomendable leer los manuales de cada una. En Ubuntu ejecutamos
# update-grub
Reinstalar GRUB en el disco
El comandogrub-install
instala el cargador de arranque en el MBR (Registro de Arranque Principal) del disco local. Es importante notar que es necesario especificar el disco en el que queremos instalar el cargador de arranque, no la partición. Esto es, si la partición donde está instalado nuestro sistema es /dev/sda5
, entonces el disco es /dev/sda
(sin el número de partición)
# grub-install /dev/sda
Verificar la instalación
Usando el mismo comando podemos checkear que todo esté bien, para no tener que volver a rehacer todo. Siempre es bueno gastar unos segundos para luego no tener problemas que cuesten horas.
# grub-install --recheck /dev/sda
Salir de chroot
Si todo salió bien salimos de chroot
. Para eso presionamos CTRL+D o alternativamente escribimos:
# exit
Desmontar los sistemas de archivos
Ahora desmontamos todos los sistemas de archivos que montamos para "engañar" a nuestra sesión viva
$ sudo umount /mnt/dev
$ sudo umount /mnt/proc
$ sudo umount /mnt/sys
$ sudo umount /mnt/usr
Si habíamos instalado una partición que contiene el directorio $ sudo umount /mnt/proc
$ sudo umount /mnt/sys
$ sudo umount /mnt/usr
/boot
aparte lo desmontamos también
$ sudo umount /mnt/boot
Y por último desmontamos el disco local
$ sudo umount /mnt
Noten que si falta desmontar alguna partición, no se puede desmontar el
directorio /mnt
, resultando en un error como me lo indicó la terminal
(me olvidé de desmontar /mnt/usr
). También nos da una ayuda para saber
qué proceso o qué usuario está usando la partición.
Listo! a reiniciar la PC
Para reiniciar, se pude hacer desde el entorno gráfico pero ya que estamos en la terminal, escribimos
$ sudo reboot
Hay que asegurarse de que ésta vez la PC inicie desde el disco local.
Espero haberles sido útil.