Riparare GRUB dopo l’installazione di un altro sistema operativo.

A chi non capita di avere più sistemi operativi sul portatile? (isn’t it ironic, don’t you think?) I sistemi operativi, durante l’installazione, solitamente riscrivono parte del master boot record allo scopo di inserirvi il proprio boot loader.

Avrei potuto, prima dell’installazione, farmi copia del boot sector con un semplice comando DD e ripristinarlo con altrettanta facilità in un secondo momento:

$ sudo dd if=/dev/sda of=/media/mas/myUSBdisk/grub.bin count=1 bs=512

Avendo un solo disco (/dev/sda) ho deciso di copiare il boot sector lungo 512byte sulla mia chiavetta USB genericamente etichettata con myUSBdisk. Per ripristinarlo avrei comunque dovuto ricorrere ad un Ubuntu liveCD oppure una chiavetta USB con installato Ubuntu (io preferisco mettere sulla chiavetta GRUB e copiare le ISO invece che installarle). Nel ripristinarlo bisogna ricopiare solo il master boot program formato dai primi 446 byte; gli ultimi 64byte sono informazioni riguardanti le partizioni. Non avendo avuto questa accortezza adesso devo far partire una versione live di UBUNTU e reinstallare a mano GRUB.

Una volta fatto partire il liveCD mi apro un terminale (CTRL+ALT+T) e cerco di capire quale delle mie partizioni contiene Ubuntu con:

$ sudo fdisk -l # faccio una lista delle partizione per capire dove operare
$ sudo mount /dev/sda5 /mnt # monto la partizione per poterci scrivere
$ for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done # collego kernel, processi etc
$ sudo chroot /mnt # cambio la radice, e come se fossi nel mio sistema linux (non nel liveCD)
$ grub-install /dev/sda # forza, installa GRUB nel MBR 
$ update-grub # potrebbe non servirmi 
$ exit 
$ sudo reboot # riavviamo, I love GRUB

Mac OSX 10.7 + Windows 8 + Ubuntu 12.10 .