# [first-aid] kernel panic - not syncing: VFS: unable to mount

## BuBuaBu

Ce post a pour but de recenser toutes les causes du "kernel panic - not syncing: VFS: unable to mount root fs".

Il s'adresse plus pour les débutants, mais si il n'a pas ça place ici, je comprendrai qu'il soit modéré.

Intro

Ce message apparaît lorsque le kernel qui se charge n'arrive pas a lire la partition root (/).

Si l'installation est parvenu jusqu'au stade de reboot, il y a forcement une solution.

Comme le kernel se charge, on sait déjà que la configuration du bootloader (chargeur de démarage) est correct (sauf option passé au kernel).

Plusieur cause possible :

-L'argument root=... passé au kernel est incorrect.

-Le système de fichiers n'est pas reconnu par le kernel.

-le contrôleur du disque dur n'est pas reconnu par le kernel.

-Le raid (si il a) n'est pas chargé par le kernel.

Je conseille de vérifier le point I à IV dans l'ordre  : il sont classé du plus rapide au plus ch...

Le problème n'a peu être pas une seul cause.

Le point V étant un peu a part.

I - L'argument root=... passé au kernel

Cette argument ce configure dans la bootloader, il peu être lilo ou grub (il en existe peuêtre d'autre, mais la solution sera du même ordre).

Celui-ci permet au kernel de savoir qu'elle partition accueil les bases du système. En général il s'agit de la partition ' / '.

On retrouve cette config dans le fstab qui ne peu pas encore être lu par le kernel : il ne sait pas encore où le trouver.

Cette partition doit donc être désigné avec les notation du kernel, cad /dev/hdxy, ou /dev/sdxy, /dev/mdx, /dev/ramx ...

On retrouve donc ce paramètre dans le fstab, le même doit être utilisé.

un exemple pour grub :

```

title=Gentoo

root (hd0,0)

kernel /vmlinuz root=/dev/hda3 # <-- c'est ici

```

Un exemple pour lilo :

```

image=/vmlinuz

  label=gentoo

  read-only

  root=/dev/sda1  # <-- c'est ici

```

Dans le cas ou ' / ' est sur un raid, on doit passer le partition raid : /dev/md0 par exemple.

II - Le système de fichiers n'est pas reconnu par le kernel

Lors de l'installation, il a fallu formater son ' / ' et donc choisir un système de fichiers. Et le driver de celui-ci doit être en dur dans le kernel (pas de modules : le kernel ne peu pas encore aller lire les fichiers des modules !!)

Pour ajouter le support de votre fs :

Avec make menuconfig ça se trouve ici :

```

File systems -->

```

Vérifié d'avoir un <*> devant votre fs (pas de [M] !!! c'est pour le mettre en modules)

Il faudra ensuite enregistrer la config et recompiler & installé comme expliquer dans le handbook.

III - le contrôleur du disque dur n'est pas reconnu par le kernel

Là, il est un peu plus dur de localiser le bon driver.

Pour cela : lspci il permettra de nommer le matériel présent dans votre machine et donc, vous pourrez soit localisé le bon driver dans le kernel ou effectuer une recherche rapide sur internet pour savoir quel driver utiliser.

Sinon, dans le kernel, les driver pour les disque dur ce trouvent ici :

```

Device Drivers  --->

   Block devices  ---> 

   ATA/ATAPI/MFM/RLL support  --->

   SCSI device support  ---> 

```

IV - Le raid (si il a) n'est pas chargé par le kernel

Je parle ici pour le raid software, le raid matériel étant sois considérer comme une seul devices, soit dans le même genre que le software.

La première chose a vérifié : la présence des drivers raid dans le kernel :

```

Device Drivers  --->

   Multi-device support (RAID and LVM)  --->

      [*] Multiple devices driver support (RAID and LVM) 

      <*>   RAID support

# Plus le driver du type de raid : 0, 1, 1+0, 4, 5, 6 ...

```

Une fois cela vérifié, il faut que le kernel puisse identifier et monter la bonne partition raid.

deux solutions : 

-Utilisation de l'autodetection, il faut alors attribuer le flag FD (linux raid autodetect) a chaque partition raid à l'aide de fdisk ou cfdisk.

-Indiquer le plan du raid au kernel via le bootloader

avec grub par exemple (il faut évidement adapter):

```

kernel /vmlinuz root=/dev/md0 md=0,/dev/sda1,/dev/sdb1,/dev/hda1

```

avec lilo (a vérifier)

```

root=/dev/md0

append="md=0,/dev/sda1,/dev/sdb1,/dev/hda1"

```

V - Utilisation d'un / distant avec NFS

Il faut d'abort vérifier que la partition NFS est montable.

puis que le kernel contienne :

```

File systems  --->

   Network File Systems  ---> 

      <*> NFS file system support

      [*]   Provide NFSv3 client support (ou NFSv4)

      [*] Root file system on NFS # cette option sera dispo uniquement si il y a :

Networking  --->

   Networking options  --->

      [*]   IP: kernel level autoconfiguration

# qui est essentiel pour un boot sur un / distant.

```

ps : Oublier pas de lire les posts suivants.Last edited by BuBuaBu on Tue Jul 11, 2006 11:01 am; edited 2 times in total

----------

## El_Goretto

 *BuBuaBu wrote:*   

> 
> 
> I - L'argument [b]root=... passé au kernel[/b]

 

Raaaah,, gggnnnh...   je.... aaaaah.... j'arrive pas .... à résister.... hhuuuuuu...

"Trop gros, passera jamais  :Smile: "

Raaaah, ça va mieux laaaaa...

Désolé, fallait vraiment que je la fasse... J'aurais pas pu dormir cette nuit sinon.

Et je m'auto lapiderai à coup de parpaing à mon reveil pour flagrant délit de pollution de howto....   :Rolling Eyes: 

----------

## PabOu

Sur IRC, il y a quelques jours, nous avons eu un problème similaire, et la solution devait prendre en compte 2 des points notés ici.

C'est à dire : l'option root ET/OU le controlleur non supporté.

Il s'agissait en fait d'une carte mère avec 2 controlleurs IDE, et des chipsets différents. Le premier est normal, il va de hda à hdd. Le second, il va de hde à hdh.. C'est déjà beaucoup plus rare ;)

L'installation avec le live-cd gentoo s'est faite sur hdg, et les deux chipsets étaient reconnus.

Mais avec le kernel créé, ca ne bootait pas.

En effet, le support du premier chipset n'a pas été config dans le noyau kernel.. puisqu'il n'était pas utilisé. Résultat, au boot, pas de hda/hdb/hdc/hdd. Et lorsque vient le tour du deuxième chipset à être détecté, les devices ne sont pas hde-->hdh, mais ils prennent la place de hda-->hdd.

Solution : ajouter le support du premier chipset OU modifier l'option root qui est passée au noyau (remplacer hdg par hdc)

----------

## BuBuaBu

@Pabou : une situation similaire met déjà arrivé :

J'ai un contrôleur (FastTrak 378) avec 2 sata et 2 pata.

Les pata étant reconnu sur mon livecd (sda et sdb) mais pas sur mon kernel. Le livecd comportait un patch ...

----------

