# Installation de grub - Problème lors de l'accès à /boot

## Garko

Bonjour,

J'installe une machine à partir du liveCd 1.4.rc3 stage 1 et je rencontre un problème lors de l'installation de Grub.

J'ai suivi les opérations indiqué dans la doc en anglais mais lors du premier reboot de la machine Grub m'a renvoyé une erreur de type 2 (Bad file or directory type) j'ai alors redémarrer à nouveau avec la disquette de démarage Grub que j'avais faite selon les instruction de la doc pour refaire l'opération d'écriture sur le MBR (faite une première fois après l'emerge, comme indiqué dans la doc).

Une fois sous le prompt de Grub si je fait "root (hd0,0)" puis que je lence un "setup (hd0)" il me renvoie une erreur identique (à savoir : Bad file or directory type). 

J'ai peu constater que (hd0,0)/boot est un répertoire valide mais que le répertoir (hd0,0)/boot/grub ne l'est pas. Se dernier existe bien dans (hd0,0)/boot, on le voie grace lors d'un tab pour compléter le chemin... mais il est traité comme un fichier et non pas un répertoire.

Après avoir refait toutes ces opération plusieurs fois, j'ai tenté de suivre également les différentes instructions d'installation que donne le manuel de Grub ainsi que le Howto d'installation de celui-ci.

Donc à savoir que mes partitions sont faite comme ceci :

ext3 /dev/hda3 /

ext2 /dev/hda1 /boot

ext3 /dev/hdb1 /home

j'ai lancé les commande suivante depuis le prompt Grub (lancé depuis le système chrooter ainsi que la disquette):

root (hd0,0)

setup (hd0)

J'ai également tenté de lancé Gentoo directement depuis la disquette de Grub mais après avoir fait :

root (hd0,0)

kernel (hd0,0)/boot/bzImage root=/dev/hda3

boot

il tente de décompressé Linux et il me dit "invalid compressed format (err=2)"

voila, si quelqu'un aurrai une solution ou une piste, je suis preneur.

----------

## px

où se trouve ton fichier bzImage?

C'est quelle version du grub? 

2 : Bad file or directory type

    This error is returned if a file requested is not a regular file, but something like a symbolic link, directory, or FIFO. 

Je pense que le probleme viens que grub ne trouve pas le /boot/bzImage, envoi ton fichier /boot/grub/menu.lst

avant de lancer grub, verifie que les partition sont bien montées, que tout les fichiers sont presents (bzImage dans le /boot par exemple).

----------

## Garko

Mes partitions :

 *Quote:*   

> 
> 
> # cfdisk /dev/hda
> 
>                                     Disk Drive: /dev/hda
> ...

 

 *Quote:*   

> 
> 
> # mount
> 
> /dev/hda3 on / type ext3 (rw,noatime)
> ...

 

Ma partition boot :

 *Quote:*   

> 
> 
> # ls -al /boot/
> 
> total 1882
> ...

 

 *Quote:*   

> 
> 
> # ls -al /boot/grub/
> 
> total 205
> ...

 

Ma configuration de Grub :

 *Quote:*   

> 
> 
> # cat /boot/grub/grub.conf
> 
> default 0
> ...

 

 *Quote:*   

> 
> 
> # grub --version
> 
> grub (GNU GRUB 0.92)
> ...

 

maintenant si je lance grub :

 *Quote:*   

> 
> 
> # grub
> 
> grub> root (hd0,0)
> ...

 

maintenant je reboot ma machine SANS disquette de boot Grub :

 *Quote:*   

> 
> 
> GRUB loading, please wait...
> 
> Error 2
> ...

 

maintenant je reboot ma machine AVEC disquette de boot Grub :

 *Quote:*   

> 
> 
> grub> root (hd0,0)
> 
>  Filesystem type is ext2fs, partition type 0x83
> ...

 

La partition boot est monté, je peut voir depuis grub le contenu (j'utilise la commande root comme je pourrai utilisé nimporte quel autre pour pouvoir utiliser la complétion sur (hd0,0)/ par l'utilisation de la touche TAB) :

 *Quote:*   

> 
> 
> grub> root (hd0,0)/
> 
> Possible files are: boot grub bzImage
> ...

 

"root (hd0,0)/grub " (notez l'espace après /grub) suivi de TAB me montre que la complétion de /grub n'est pas possible tout comme 

"root (hd0,0)/grub/" qui montre que /grub n'est pas un directory.

----------

## px

a premiere vue cela m'a l'air bon, tout du coté des permissions et partitions, définitions des numero dans le grub...

enfin dans le menu.lst:

root (hd0,0) te place dans la partition de boot

kernel /bzImage serait mieux que kernel /boot/bzImage

si cela ne marche pas essaye de mettre toujours dans le menu.lst:

kernel (hd0,0)/bzImage

----------

## ghoti

 *px wrote:*   

> kernel /bzImage serait mieux que kernel /boot/bzImage

  En effet !

A noter que pour essayer de rendre les choses plus intuitives, certaines distribs (SuSE) utilisent une astuce qui permet de rendre valable la syntaxe kernel /boot/bzImage : il suffit de créer dans /boot un lien symbolique "boot" pointant sur le répertoire courant :

```
cd /boot

ln -s boot .
```

de manière à obtenir quelque chose qui ressemble à:

```
bigben boot # ls -l

lrwxrwxrwx    1 root     root            1 2003-01-26 03:26 boot -> .

-rw-r--r--    1 root     root      1084908 2003-03-15 23:18 bzImage-2.4.20-gentoo-r1

drwxr-xr-x    2 root     root         4096 2002-12-17 23:47 grub

-rw-r--r--    1 root     root        96530 2003-01-19 00:12 initrd

```

Le "/boot" dans la config de grub fera alors référence au lien symbolique et non au répertoire "/boot" sur lequel est montée la partition.

Eventuellement, cette méthode peut éviter les prises de tête. Quoi que ...  :Wink: 

----------

## px

pour un noob je trouve qu'il se demerde pas trop mal  :Wink: 

Sinon au pire install un lilo... C'est peut-etre plus ancien, la config un peu lourde, mais ca va vite et le resultat est le meme. Le seul inconveignant, ou inconvaignant (pb de francais a 5h du mat  :Wink:  ) c'est qu'apres avoir installé un noyau ou changé le lilo.conf de tapper lilo... Tu peux sinon utiliser le make install du kernel pour qu'il detecte si tu utilise lilo et te proposé de le lancer...

genre:

make dep && make clean bzImage modules modules_install && cp arch i386/boot/bzImage /boot && cp System.map /boot && make install

C'est pas génial comme ligne mais ca a le merite de marcher dans tout les cas... tu peux encore rajouter un uname -r qq part... mais ca doit etre utile pour une appli sur 1000  :Very Happy: 

----------

## ghoti

 *px wrote:*   

> pour un noob je trouve qu'il se demerde pas trop mal 

 C'est pour moi que tu dis ça ?  :Very Happy: 

Disons qu'en 7 ans de pratique, on retient tout de même l'une ou l'autre bricole...  :Wink: 

 *Quote:*   

> Le seul inconveignant, ou inconvaignant (pb de francais a 5h du mat  )

 "Inconvénient" c'est pas mal non plus  :Wink: 

Mais grub a aussi un gros avantage : c'est son mini-shell qui permet d'interrompre le boot pour bricoler tout à loisir. 

Perso, lilo, m'en faut plus!

----------

## Garko

A savoir que la version 1.4rc3 de Gentoo ajoute le liens symbolique ./boot dans le répertoire boot  :Smile: 

Mais mon problème viens pas du fait que il n'arrive pas a lire le kernel, mais du fait que il ne peut pas entrer dans le répertoire ./grub pour y lire les fichiers grub.conf, stage1, stage2, ect... Il concidère le fichier ./grub comme un fichier au lieu d'un réperoire.

Je vais tenter de mettre lilo... mais pas certain que ca marche pasque si je lance directement le kernel depuis une disquette de boot grub (ca j'arrive a en faire une  :Very Happy: ) il me fait une erreur de type 1 sur la décompression du kernel.

Je n'ai aucune erreur lors de la compilation de celui-ci et j'ai regadé la config sous tout les angles pour vois se qui pourrai ne pas aller. Je continue ma chasse au système qui démarre :p je ne laisserai pas la petite voie dans ma tête qui dit "Gentoo, s'est plus fort que vous" changer négativement le sens de cette phrase  :Wink: 

----------

## px

il n'y avait pas que le prob du 5h du mat, il y avait aussi l'alcool... D'ailleur c'est dit j'arrete de picoler, et je vais faire marche mon ldap : )

7 ans... ca me laisse reveur... : )

----------

## Garko

Tu a raison, la fatique et l'accool s'est pas bien... la preuve j'ai enfin réussi a résoudre mon problème et mon système marche a merveille....

et oui... je suis un gros boulet... Mon disque botable (hda) fait 8Gb... et etait configuré en... Normal. Je l'ai passé en LBA... et pouf tout va pour le mieux.

Rhaaa... que s'est con.

----------

## px

En tout cas c'est cool si tout marche bien maintenant : )

----------

## DuF

Quelqu'un pourrait m'expliquer pourquoi ça foirait en normal et pas en LBA ?

Je ne connais pas trop comment fonctionne tout ça et comme je suis curieux, si qqn peut m'éclairer  :Wink: 

----------

## ghoti

 *DuF wrote:*   

> Quelqu'un pourrait m'expliquer pourquoi ça foirait en normal et pas en LBA ?

 Une explication risquée : ça vaut ce que ça vaut  :Wink: 

Pour atteindre un secteur du disque on fournit au contrôleur le n° du cylindre, de la tête et du secteur.

Le contrôleur ide convertit ça en un index donnant la position du secteur dans la liste des secteurs. 

Le mode "normal" ne reconnaît que 504 Mo (1024 cyl x 16 têtes x 63 secteurs x 512 bytes = 528482304).

Les disques actuels contiennent plusieurs milliers de cylindres mais le BIOS n'est capable que d'en traiter 1024.

Par contre, il peut traiter jusqu'à 256 têtes.

Le mode LBA utilise cette astuce pour contourner la limitation du BIOS.

Par ex., un disque de 1 Go (2048 cyls, 16 têtes, 63 secteurs) est présenté comme (1024 cylindres, 32 têtes, 63 secteurs), ce qui revient mathématiquement au même.

Seul l'algorithme de conversion utilisé par le contrôleur est différent pour obtenir le n° séquentiel du secteur.

Si on en revient à Linux, celui-ci n'utilise pas le BIOS et se fie en principe à la géométrie du disque. (voir le cfdisk donné par Garko)

Constatant qu'il a affaire à un disque de 8 Go, il utilise automatiquement le mode LBA.

Lorsque Garko a installé Grub, il était sous Linux. Donc, LBA était actif

Par conséquent, Grub a enregistré l'adresse de la partition boot en notation LBA.

On reboote sur le disque...

Cependant, on est maintenant tributaire du BIOS, donc en mode normal (Linux n'est pas encore lancé).

La partie de grub stockée dans le MBR essaie de trouver le début de la partition et présente l'adresse du premier secteur au contrôleur IDE.

Pas de chance : elle est en notation LBA et le contrôleur l'interprète comme "normale".

Résultat : le secteur renvoyé est n'importe quoi et bien sûr grub ne trouve pas ses "stage".

Par contre, si on active le LBA au niveau du BIOS, tout rentre dans l'ordre ...

----------

## Nectroom

Plus clair que ça  :Very Happy: 

[img:9f2dcd02c9]http://www.salsapaca.com/dumont/images/chapeau-panama2.gif[/img:9f2dcd02c9]

----------

## DuF

Effectivement chapeau, c'est limpide et précis et je comprends mieux cette histoire de 16 têtes et 32 têtes qui m'a toujours intrigué sans comprendre pourquoi !

Merci ghoti !

----------

## px

Chapeau en effet

----------

## sergio

 *ghoti wrote:*   

> On reboote sur le disque...
> 
> Cependant, on est maintenant tributaire du BIOS, donc en mode normal (Linux n'est pas encore lancé).
> 
> La partie de grub stockée dans le MBR essaie de trouver le début de la partition et présente l'adresse du premier secteur au contrôleur IDE.
> ...

 

Pour contrer ce comportement il suffit de placer la partition "/boot" au début du disque concérné (hda1) et le début de la partition racine tout de suite après (numéro du premier cylindre inférieur à 1024). Normalement ça suffit à leurrer grub et lilo (qui a le même problème que grub au demeurant)...

 A+

----------

## px

c plus embetant avec fdisk de definir la partition root en 2e partition, Ca demande de savoir exactement quelle taille on veut utiliser, je sais que pour toute mes machines je fais en premier le /boot ensuite le swap et j'aloue le reste pour le root, ca ne fais que d'appuyer 2 fois sur entrée consécutivement. Si le probleme viens juste d'un reglage du bios, vaut mieux regler le bios plutot que de passer par de la bidouille...  :Wink: 

----------

## ghoti

 *sergio wrote:*   

> Pour contrer ce comportement il suffit de placer la partition "/boot" au début du disque concérné (hda1) et le début de la partition racine tout de suite après (numéro du premier cylindre inférieur à 1024). Normalement ça suffit à leurrer grub et lilo (qui a le même problème que grub au demeurant)...

 Je ne suis pas persuadé que cela changerait quelque chose.

D'ailleurs, la partition /boot de Garko se trouve bel et bien en hda1. Si ta proposition était exacte, les stages auraient été trouvés et le noyau aurait au moins du se charger. 

Ce n'est pas le cas ... 

Au demeurant, la partition racine et le swap ne sont sollicités qu'après le chargement du noyau. 

A ce moment, Linux ne dépend plus du BIOS. Par conséquent, leur emplacement importe peu (du moins au niveau de la "reconnaissance")

Il est exact que les anciennes versions de lilo avaient un problème au-delà du cylindre 1024 mais ce n'est plus le cas.

Quant à grub, à ma connaissance, il n'a jamais souffert de cette limitation.

----------

