# VFS unable to mount root fs on unknown-block(0 0)

## failex

Hey,

Ich habe ein Problem und zwar will mein Kernel nicht starten und ich weiß nicht warum.

Ich weiß das dies ein bekanntes "Problem" ist, ich habe auch lange gesucht aber keine Lösung

hat bei mir funktioniert

Ich habe schon versucht:

Alle S-ATA Treiber in den Kernel reincompiled (Keine Module)

Alle Filesystem Treiber in den Kernel reincompiled (Keine Module)

aber vielleicht habe ich ja noch etwas übersehen.

Meine fstab:

```

/dev/sda1   /boot        ext2    defaults,noatime     0 2

/dev/sda3   none         swap    sw                   0 0

/dev/sda4   /            ext4    noatime              0 1

```

Meine Grub-Config:

```

#

# DO NOT EDIT THIS FILE

#

# It is automatically generated by grub-mkconfig using templates

# from /etc/grub.d and settings from /etc/default/grub

#

### BEGIN /etc/grub.d/00_header ###

if [ -s $prefix/grubenv ]; then

  load_env

fi

if [ "${next_entry}" ] ; then

   set default="${next_entry}"

   set next_entry=

   save_env next_entry

   set boot_once=true

else

   set default="0"

fi

if [ x"${feature_menuentry_id}" = xy ]; then

  menuentry_id_option="--id"

else

  menuentry_id_option=""

fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then

  set saved_entry="${prev_saved_entry}"

  save_env saved_entry

  set prev_saved_entry=

  save_env prev_saved_entry

  set boot_once=true

fi

function savedefault {

  if [ -z "${boot_once}" ]; then

    saved_entry="${chosen}"

    save_env saved_entry

  fi

}

function load_video {

  if [ x$feature_all_video_module = xy ]; then

    insmod all_video

  else

    insmod efi_gop

    insmod efi_uga

    insmod ieee1275_fb

    insmod vbe

    insmod vga

    insmod video_bochs

    insmod video_cirrus

  fi

}

if [ x$feature_default_font_path = xy ] ; then

   font=unicode

else

insmod part_msdos

insmod ext2

set root='hd0,msdos4'

if [ x$feature_platform_search_hint = xy ]; then

  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos4 --hint-efi=hd0,msdos4 --hint-baremetal=ahci0,msdos4  012eb08b-0da9-4d78-b40c-39aea7327930

else

  search --no-floppy --fs-uuid --set=root 012eb08b-0da9-4d78-b40c-39aea7327930

fi

    font="/usr/share/grub/unicode.pf2"

fi

if loadfont $font ; then

  set gfxmode=auto

  load_video

  insmod gfxterm

  set locale_dir=$prefix/locale

  set lang=deutsch

  insmod gettext

fi

terminal_output gfxterm

if [ x$feature_timeout_style = xy ] ; then

  set timeout_style=menu

  set timeout=5

# Fallback normal timeout code in case the timeout_style feature is

# unavailable.

else

  set timeout=5

fi

### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###

menuentry 'Gentoo GNU/Linux' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-012eb08b-0da9-4d78-b40c-39aea7327930' {

        load_video

        if [ "x$grub_platform" = xefi ]; then

                set gfxpayload=keep

        fi

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='hd0,msdos1'

        if [ x$feature_platform_search_hint = xy ]; then

          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  a0a1bad6-0bed-43f3-b71f-553c2f3b8fd7

        else

          search --no-floppy --fs-uuid --set=root a0a1bad6-0bed-43f3-b71f-553c2f3b8fd7

        fi

        echo    'Linux 4.9.6-gentoo-r1 wird geladen ...'

        linux   /vmlinuz-4.9.6-gentoo-r1 root=/dev/sda4 ro

}

submenu 'Erweiterte Optionen f▒r Gentoo GNU/Linux' $menuentry_id_option 'gnulinux-advanced-012eb08b-0da9-4d78-b40c-39aea7327930' {

        menuentry 'Gentoo GNU/Linux, mit Linux 4.9.6-gentoo-r1' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.6-gentoo-r1-advanced-012eb08b-0da9-4d78-b40c-39aea7327930' {

                load_video

                if [ "x$grub_platform" = xefi ]; then

                        set gfxpayload=keep

                fi

                insmod gzio

                insmod part_msdos

                insmod ext2

                set root='hd0,msdos1'

                if [ x$feature_platform_search_hint = xy ]; then

                  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  a0a1bad6-0bed-43f3-b71f-553c2f3b8fd7

                else

                  search --no-floppy --fs-uuid --set=root a0a1bad6-0bed-43f3-b71f-553c2f3b8fd7

                fi

                echo    'Linux 4.9.6-gentoo-r1 wird geladen ...'

                linux   /vmlinuz-4.9.6-gentoo-r1 root=/dev/sda4 ro

        }

        menuentry 'Gentoo GNU/Linux, mit Linux 4.9.6-gentoo-r1 (Wiederherstellungsmodus)' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.6-gentoo-r1-recovery-012eb08b-0da9-4d78-b40c-39aea7327930' {

                load_video

                if [ "x$grub_platform" = xefi ]; then

                        set gfxpayload=keep

                fi

                insmod gzio

                insmod part_msdos

                insmod ext2

                set root='hd0,msdos1'

                if [ x$feature_platform_search_hint = xy ]; then

                  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  a0a1bad6-0bed-43f3-b71f-553c2f3b8fd7

                else

                  search --no-floppy --fs-uuid --set=root a0a1bad6-0bed-43f3-b71f-553c2f3b8fd7

                fi

                echo    'Linux 4.9.6-gentoo-r1 wird geladen ...'

                linux   /vmlinuz-4.9.6-gentoo-r1 root=/dev/sda4 ro single

        }

}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###

### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###

### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###

# This file provides an easy way to add custom menu entries.  Simply type the

# menu entries you want to add after this comment.  Be careful not to change

# the 'exec tail' line above.

### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###

if [ -f  ${config_directory}/custom.cfg ]; then

  source ${config_directory}/custom.cfg

elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then

  source $prefix/custom.cfg;

fi

### END /etc/grub.d/41_custom ###

```

Vielen Dank für die Hilfe!

----------

## Fijoldar

Hallo fallex,

ohne deine Hardware zu kennen, ist das natürlich schwer zu sagen  :Smile: . Kontrolliere doch mal mit einer LiveCD (systemrescue, ubuntu, oder was auch immer), welche Kernel Module wirklich benötigt werden. Dies findest du am besten mittels

```
lspci -k

```

heraus. Schau vor allem mal nach einem Eintrag, der in etwa so aussieht

```
00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] (rev 40)

   Subsystem: ASUSTeK Computer Inc. SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]

   Kernel driver in use: ahci

```

Genau dieses Modul wirst du in deinem Kernel aktivieren müssen.

Schau mal, ob dir das evtl. schon weiterhilft. Auch trage ich in meine /etc/default/grub ganz gerne

```
GRUB_CMDLINE_LINUX="... rootfstype=ext4 ..."
```

 mit ein.

----------

## failex

Danke für die Antwort!

Aber jetzt komme ich zu einer dummen Frage: Woher weiß ich dann welches Modul ich aktivieren muss?

Bei mir kam folgendes raus 

```
 

00:17.0 SATA controller: Intel Corporation Device 9d03 (rev 21)

        Subsystem: Hewlett-Packard Company Device 81eb

```

Bzw. alles was bei mir rauskam: 

```

livecd / # lspci -k

pcilib: Cannot open /proc/bus/pci

00:00.0 Host bridge: Intel Corporation Sky Lake Host Bridge/DRAM Registers (rev 08)

        Subsystem: Hewlett-Packard Company Sky Lake Host Bridge/DRAM Registers

lspci: Unable to load libkmod resources: error -12

00:02.0 VGA compatible controller: Intel Corporation Sky Lake Integrated Graphics (rev 07)

        Subsystem: Hewlett-Packard Company Sky Lake Integrated Graphics

00:04.0 Signal processing controller: Intel Corporation Device 1903 (rev 08)

        Subsystem: Hewlett-Packard Company Device 81eb

00:14.0 USB controller: Intel Corporation Device 9d2f (rev 21)

        Subsystem: Hewlett-Packard Company Device 81eb

00:14.2 Signal processing controller: Intel Corporation Device 9d31 (rev 21)

        Subsystem: Hewlett-Packard Company Device 81eb

00:16.0 Communication controller: Intel Corporation Device 9d3a (rev 21)

        Subsystem: Hewlett-Packard Company Device 81eb

00:17.0 SATA controller: Intel Corporation Device 9d03 (rev 21)

        Subsystem: Hewlett-Packard Company Device 81eb

00:1c.0 PCI bridge: Intel Corporation Device 9d14 (rev f1)

00:1c.5 PCI bridge: Intel Corporation Device 9d15 (rev f1)

00:1f.0 ISA bridge: Intel Corporation Device 9d48 (rev 21)

        Subsystem: Hewlett-Packard Company Device 81eb

00:1f.2 Memory controller: Intel Corporation Device 9d21 (rev 21)

        Subsystem: Hewlett-Packard Company Device 81eb

00:1f.3 Audio device: Intel Corporation Device 9d70 (rev 21)

        Subsystem: Hewlett-Packard Company Device 81eb

00:1f.4 SMBus: Intel Corporation Device 9d23 (rev 21)

        Subsystem: Hewlett-Packard Company Device 81eb

01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)

        Subsystem: Hewlett-Packard Company RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller

02:00.0 Network controller: Intel Corporation Wireless 3165 (rev 81)

        Subsystem: Intel Corporation Dual Band Wireless AC 3165

```

Ich probiere deinen zweiten Tipp auch mal später aus, da ich jetzt leider keine Zeit mehr dazu habe.

----------

## Fijoldar

Ok, in diesem Fall hilft dir die Ausgabe nur bedingt weiter.

Ich gehe mal davon aus, dass du eine Gentoo LiveCD gebootet hast? Wenn ja, boote doch bitte mal eine andere CD wie Ubuntu oder Sabayon. Offensichtlich ist in dem Kernel der LiveCD das benötigte Modul auch nicht enthalten. Du könntest natürlich auch manuell nach dem Modul suchen, das für die Hardware nötig ist (über Google z.B.), am einfachsten dürfte es aber sein, wenn du eine LiveCD findest, die die Hardware so unterstützt und du einfach die Module auslesen kannst.

Aus dem Bauch heraus würde ich sagen. Setze, wenn noch nicht geschehen, im Bios den Sata Modus auf "AHCI" und aktiviere im Kernel folgende Module

```
 pcieport

ahci
```

Die wirst du dann auf jeden Fall benötigen.

----------

## failex

Kann es sein, dass die Module nicht mit lspci angezeigt wurden, weil ich im chroot war?

Auf jeden Fall werde ich es nachher Mal mit einer anderen livecd ausprobieren, da

die gentoo livecd aus irgendeinem Grund nicht lspci an Bord hatte.

Vielen Dank für die Hilfe bis jetzt!

----------

## Fijoldar

Achso ja, den Befehl hättest du besser nicht im Chroot ausgeführt. Oder du hättest vorher noch ein

```
mount -t proc /proc /mnt/gentoo/proc
```

ausführen müssen. Bzw. je nachdem, wohin du dein "/" gemountet hast.

Viel Erfolg beim Versuch mit einer anderen LiveCD! Kannst dich hier ja jederzeit wieder melden, wenn du nicht weiterkommen solltest!

----------

## failex

Leider ist es mir nicht möglich die Module zu laden, da ich auf das System nur Zugriff mittels chroot habe und da

dann ein anderer Kernel geladen ist, guckt modprobe in dem falschen Ordner.

Meine Module sind in /lib/modules/4.9.6-gentoo-r1 aber mein modprobe guckt immer in /lib/modules/4.9.11-ARCH und da der

Ordner nicht existiert werden die gewünschten Module auch nicht geladen. 

Bei anderen LiveCDs war das nicht anders.

Wie kann ich die Module jetzt laden?

Ach ja, ich habe mal geguckt und zwar wurde tatsächlich ahci bei den livecds geladen, nur muss ich das Modul jetzt

noch aktiviert kriegen.

----------

## Fijoldar

Laden musst du die Module ja erst in der richtigen Installation. Im Chroot selbst musst du die Module natürlich nicht nochmal laden.

Das gesuchte Modul heißt

```
CONFIG_SATA_AHCI=y
```

du findest das unter

```
Symbol: SATA_AHCI [=y]

Type  : tristate

Prompt: AHCI SATA support

  Location:

    -> Device Drivers

(1)   -> Serial ATA and Parallel ATA drivers (libata) (ATA [=y])

Defined at drivers/ata/Kconfig:85

Depends on: ATA [=y] && PCI [=y]

```

Im Menuconfig einfach aktivieren und nochmals den Kernel neu bauen. Danach solltest du deine neue Gentoo Installation hoffentlich booten können  :Wink: .

----------

## failex

Das SATA als Modul oder kompiliert? Weil dieses Modul war bereits auf y.

Sowohl ATA als auch PCI sind beide auf m. Sollen beide doch kompiliert werden?

----------

## Fijoldar

Ich würde es fest in den Kernel einbauen (also "=y"). Brauchen tust du das Modul ja auf jeden Fall und das während dem Start so früh wie möglich.

----------

## failex

Leider hat das ganze nicht geklappt, ich habe SATA_AHCI, PCI und ATA auf y gestellt trotzdem kriege ich immer noch eine Kernelpanic :/

----------

## Fijoldar

Hast du denn mal die anderen Module kontrolliert? Also das, was in der Live CD sonst noch so aktiv ist, wenn du lscpi -k aufrufst? Da dürften sicherlich noch einige andere Komponenten dabei sein, die durchaus noch fehlen könnten. Ist etwas mühsam, ich weiß, aber da musst du jetzt einfach durch  :Wink: 

----------

## failex

Das könnte ich machen aber wenn ich den Modulnamen habe, woher weiß ich dann wo sie unter der menuconfig zu finden sind?

----------

## Fijoldar

Das suchst du am besten mittels "/". D.h. in Menuconfig kannst du über diese Taste nach den Modulen suchen. Dort einfach den Namen, den du anhand von lspci herausgefunden hast, eingeben. Dann wird dir genau der Ort gesagt, wo du das Modul aktivieren kannst.

----------

## failex

Vielen Dank! Das mit der Suche wusste ich noch gar nicht.

Leider sieht es immer noch schlecht aus, selbst nachdem ich jedes Modul kompiliert habe

----------

## Fijoldar

Wie kompilierst du deinen Kernel eigentlich? Manuell mit "make" oder über ein Tool wie genkernel. Hast du nach einem neu bauen, das "bzimage" auch wieder nach /boot kopiert, falls du den Kernel manuell kompiliert hast? Sorry, dass ich jetzt so blöd frage, aber so langsam gehen mir hier auch die Ideen aus  :Smile: .

----------

## failex

Da ich gerne etwas lernen möchte benutze ich nicht genkernel, wenn alles schief läuft kann ich das immer noch benutzen.

Ich passe halt die Config an und speichere sie und dann mache ich einmal make -j4 und make modules_install dann am ende noch make install (Vorher mache ich /boot noch sauber).

----------

## failex

Könnte es vielleicht daran liegen, das ich kein initramfs hatte? Ich habe nun genkernel mit meiner config benutzt und auf einmal startet mein System 

und alles was ich vorher in der Config eingestellt hatte funktioniert jetzt!

----------

## Fijoldar

Ah ok, das hört sich doch ganz gut an. Klingt stark danach, dass dein Initramfs ein weiteres Modul geladen hast, was du für den Bootvorgang benötigt hättest.  Du kannst ja mal mit 

```
lsmod
```

 schauen, ob dir da noch was auffällt.

----------

## Josef.95

 *failex wrote:*   

> Könnte es vielleicht daran liegen, das ich kein initramfs hatte? Ich habe nun genkernel mit meiner config benutzt und auf einmal startet mein System 
> 
> und alles was ich vorher in der Config eingestellt hatte funktioniert jetzt!

 

Hm ja, ist gut möglich - laut deiner weiter oben geposteten grub.cfg wird die UUID (für root=UUID=xxx) verwendet,

und UUID und LABEL-Support geht nur via initramfs.

Alternativ könntest du root=PARTUUID= direkt mit im Kernel unter CONFIG_CMDLINE setzen. (PARTUUID kann der kernel selbst, funktioniert also auch ohne initramfs).

/edit/Nachtrag: Die PARTUUID kann man mit dem blkid Tool ermitteln.

/edit2/Nachtrag: Achte bitte darauf das für PARTUUID-Support im Kernel CONFIG_EFI_PARTITION=y benötigt wird.

 *failex wrote:*   

> Ich passe halt die Config an und speichere sie und dann mache ich einmal make -j4 [...]

  Hm, du solltest die Kernel .config möglichst nicht direkt selbst via Editor editieren - das wird eher früher als später zu Problemen führen, da beim manuellen editieren Abhängigkeiten nicht mit aufgelöst, und auch nicht mit gesetzt werden.

Nutze zum Kernel konfigurieren bitte immer ein dafür vorgesehenes Tool wie menuconfig oder nconfig (ja, es gibt auch noch weitere), aber bitte editiere die .config nicht manuell selbst.Last edited by Josef.95 on Mon Mar 20, 2017 2:04 pm; edited 1 time in total

----------

## firefly

 *Josef.95 wrote:*   

>  *failex wrote:*   Könnte es vielleicht daran liegen, das ich kein initramfs hatte? Ich habe nun genkernel mit meiner config benutzt und auf einmal startet mein System 
> 
> und alles was ich vorher in der Config eingestellt hatte funktioniert jetzt! 
> 
> Hm ja, ist gut möglich - laut deiner weiter oben geposteten grub.cfg wird die UUID (für root=UUID=xxx) verwendet,
> ...

 

PARTUUID funktioniert nur wenn die Partitionstabelle im GPT format vorliegt. Nur in diesem Format haben die Parititionen eine UUID.

----------

## Josef.95

 *firefly wrote:*   

>  *Josef.95 wrote:*    *failex wrote:*   Könnte es vielleicht daran liegen, das ich kein initramfs hatte? Ich habe nun genkernel mit meiner config benutzt und auf einmal startet mein System 
> 
> und alles was ich vorher in der Config eingestellt hatte funktioniert jetzt! 
> 
> Hm ja, ist gut möglich - laut deiner weiter oben geposteten grub.cfg wird die UUID (für root=UUID=xxx) verwendet,
> ...

 

firefly, hm nee, dem ist nicht (mehr?) so - auch Partitionen mit dos Partitionstabelle haben eine PARTUUID die man nutzen können sollte.

Hab hier auf einem uralt Notebook mal nachgesehen - schaut hier so aus: 

```
# fdisk -l /dev/sda

Disk /dev/sda: 93.2 GiB, 100030242816 bytes, 195371568 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x32cb32ca

[...]

# blkid /dev/sda3

/dev/sda3: LABEL="ROOT" UUID="852d63ed-f2d2-486d-be29-eaf1403460ce" TYPE="ext4" PARTUUID="32cb32ca-03"
```

 Sprich, sollte normal fein funktionieren.

----------

