Bonjour à tous!
Ayant eu un problème après une mauvaise manipulation qui suivait une mise à jour, je ne pouvais plus démarrer mon ordinateur. À la place j'obtenais le message d'erreur:
error: attempt to read or write outside of disk 'hd0'
J'ai pu trouver un post sur le forum anglais (
http://askubuntu.com/questions/142300/how-to-fix-error-unknown-filesystem-grub-rescue) détaillant une procédure pour recouvrir d'un tel plantage. Je me permets donc de poster une traduction ici au cas où quelqu'un subisse le même problème.
PS: dans mon cas, la simple succession de commandes ci-dessous (avec X et Y adapté à ma configuration) a suffit à résoudre l'ensemble de mes problèmes. Cependant, je vous conseille de lire l'ensemble du post pour voir quel est la procédure complète!
set root=(hdX,Y)
set prefix=(hdX,Y)/boot/grub
insmod normal
normal
*******************************************************
Procédure:
- 1.Localiser la partition Ubuntu et le dossier contenant les modules GRUBLocate the Ubuntu partition and the folder containing the Grub modules.
Le dossier GRUB contenant les modules doit être localiser afin que les modules appropriés puissent être chargés. Ce dossier a normalement été créé durant l'installation d'Ubuntu, et devrait être dans la partition Ubuntu, à moins que vous n'ayiez divisé votre système en plusieurs partitions.
Ce dossier est normalement situé soit dans (hdX,Y)/boot/grub ou bien (hdX,Y)/usr/lib/grub/i386-pc . Repérer la partition Ubuntu et le dossier de modules.
ls # Liste les lecteurs/disques existants (hdX) et les partitions (hdX,Y).
ls (hdX,Y)/ # Liste le contenu à la racine de la partition.
ls (hdX,Y)/boot/grub # Emplacement habituel des modules de GRUB 2.
ls (hdX,Y)/usr/lib/grub/i386-pc # Emplacement alernatif des modules de GRUB2.
- Charger les modules
set prefix=(hdX,Y)/<chemin-des-modules>
Cette commande doit pointer précisement vers le dossier contenant les modules GRUB. L'emplacement doit être celle trouvée lors de la recherche des modules.
Exemples:
set prefix=(hd0,5)/boot/grub
set prefix=(hd1,1)/usr/lib/grub/i386-pc
Charger les modules:
insmod linux insmod loopback insmod iso9660 insmod fat # Si l'ISO est situé sur une partition formaté en fat16 ou fat32.
insmod ntfs # If ISO is located on an NTFS formatted partition.
insmod nftscomp # If NTFS compression is used on the partition.
Charger le(s) module(s) en cas d'incertitude.
Un message d'erreur "file not found" voudra dire que le lien dans le préfixe est incorrect ou que le module en question n'existe pas. La valeur du préfixe peut être corriger avec la commande set. Retaper la commande "set prefix=" avec le chemin correct.
- Trouver le fichier ISO Ubuntu.
En combinant les différentes commandes "ls", trouver l'image ISO d'Ubuntu.
- Créer le loopback
loopback loop (hdX,Y)/<path to ISO>/<ISO-name.iso>
Exemple:
loopback loop (hd1,1)/path/to/ubuntu-10.04.1-desktop-i386.iso
- Charger le noyau Linux et l'image initrd.
set root=(loop)
linux /casper/vmlinuz boot=casper iso-scan/filename=/<ISO-name.iso> noprompt noeject
initrd /casper/initrd.lz
Si le chemin vers l'ISO ou le nom du fichier n'est pas correct, le démarrage s'arrêtera à l'écran BusyBox et affichera un message "can't open /dev/sr0: No medium found".
Note: Si l'ISA n'est pas dans le dossier / (racine), il faut inclure le chemin dans iso-scan/filename= entry. cf 2ème exemple.
Exemples:
linux /casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-10.04.1-desktop-i386.iso
linux /casper/vmlinuz boot=casper iso-scan/filename=/my-iso/ubuntu-10.04.1-desktop-i386.iso
- Démarrage
Après toutes ces étapes, le démarrage devrait pouvoir avoir lieu. Si les commandes ont été effectuées sans message ou erreur. Il est de redémarrer:
boot
Plus d'info ici (en anglais):
http://ubuntuforums.org/showthread.php?t=1599293
Une fois que l'ordinateur a enfin démarré, il faut s'assurer que la réparation dure.
À faire après le démarrage:
sudo mount /dev/sdaX /mnt
sdaX correspond à la partition de démarrage. Avec la commande sudo blkid
, on peut obtenir une liste telle que celle-ci:
/dev/sda1: LABEL="Windows XP" UUID="96A4390DA438F0FB" TYPE="ntfs"
/dev/sda3: LABEL="Ubuntu 11.04" UUID="b61fcae3-7744-45b4-95b9-7528d50a3652" TYPE="ext4"
/dev/sda5: LABEL="Se7en" UUID="A2DC9D71DC9D4109" TYPE="ntfs"
/dev/sda6: LABEL="Development" UUID="DEB455A1B4557CC9" TYPE="ntfs"
/dev/sda7: LABEL="EXTRA" UUID="D8A04109A040F014" TYPE="ntfs"
/dev/sda8: LABEL="SONG" UUID="46080FCD080FBAC7" TYPE="ntfs"
/dev/sda9: LABEL="BACKUPS" UUID="766E-BC99" TYPE="vfat"
#note: sdaX doit être une partition linux.
sudo grub-install --boot-directory=/mnt/boot /dev/sda
sudo update-grub