Cannot find root device after latest kernel upgrade

12,813

Ok, first of all, there is tons of scruff in your kernel list, purge them:

sudo apt-get purge linux-image-2.6.* linux-image-3.0.* linux-image-3.2.*

The problems seems to have different causes, from software to hardware, but some of them doesn't apply to you since you are able to boot other kernels. So, what to do?

While you use other kernels, remove and reinstall the both new kernel:

 sudo apt-get clean
 sudo apt-get purge linux-image-3.8.0-31-generic linux-image-3.8.0-32-generic
 sudo apt-get install linux-image-generic

The first line will remove kernel packages in the local cache and make sure you have enough free space to install new kernels.

Now, if you see this block:

Gave up waiting for root device. Common problems:
- Boot args (cat /proc/cmdline)
  - Check rootdelay= (did the system wait long enough?)
  - Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/disk/by-uuid/a0c70102-b5d8-4b82-a14c-225330e1c4d4 does not exist. Dropping to a shell!


BusyBox v1.13.3 (Ubuntu 1:1.13.3-1ubuntu11) built-in shell (ash)
Enter 'help' for a list of built-in commands.

(initramfs) _ 

Then here the common "solutions" with their causes:

  1. You attempted to fix the issue using rootdelay=, sadly that doesn't work in your case, since the problem could be elsewhere.

    /boot/vmlinuz-3.8.0-31-generic root=UUID=c690c1e6-beb9-46e7-85c2-145cd07d44ac rootdelay=120 ro quiet splash
  2. If you are using a RAID (doubtful since other kernels boot) this could cause problems. Mooving the partition to a non-raid filesystem should do the trick. Or checking if /etc/initramfs-tools/modules has the correct modules then running sudo update-initramfs -u.

  3. While you use (initramfs) built-in shell, you could type exit and should boot too. Again, problems is elsewhere.

  4. Bad filesystems could cause this. Running fsck from a live system should help.

  5. If you remove quiet splash you could get even more details about what exactly fails. If you experience this issue, remove the quiet splash from your grub script, that would really help.

  6. You might have simply forgotten to install linux-image-extra-X.YY.Z-PP for your kernel version, or the install is incomplete for some reason (rc in output of dpkg -l | grep linux-image). The fierce thing is that /boot/initrd.img-X.YY.Z-PP will get built in both cases, but for your hardware the extra modules in linux-image-extra might be absolutely necessary. In this case, you will have to interpret "Cannot find root device" as "Cannot find needed extra drivers or modules".

This are some tips I collected here and there, if you experience the same problem, please use the 5 tip and give full output of the kernel messages.

Share:
12,813

Related videos on Youtube

DisgruntledGoat
Author by

DisgruntledGoat

Updated on September 18, 2022

Comments

  • DisgruntledGoat
    DisgruntledGoat over 1 year

    I'm running Ubuntu 13.04. Yesterday I tried to install updates but there was an error, and it suggested running apt-get -f install which I did.

    Now when I try to boot, I get an error "Gave up waiting for root device". The text is almost identical to the text shown in this and this question. However, the "built-in shell" simply doesn't work! Nothing I type shows up on the screen or does anything.

    Loading the previous kernel works (although there are a few graphics glitches) but as far as I can tell, it should be booting the exact same stuff. The new kernel is 3.8.0-31-generic and the previous working one is 3.8.0-25-generic.

    I tried adding a rootdelay to grub as suggested but it just waits longer and shows the same screen. Here is my entire /boot/grub/menu.lst file, comments removed:

    default     0
    timeout     3
    
    title       Ubuntu 13.04, kernel 3.8.0-31-generic
    uuid        c690c1e6-beb9-46e7-85c2-145cd07d44ac
    kernel      /boot/vmlinuz-3.8.0-31-generic root=UUID=c690c1e6-beb9-46e7-85c2-145cd07d44ac ro quiet splash 
    initrd      /boot/initrd.img-3.8.0-31-generic
    quiet
    
    title       Ubuntu 13.04, kernel 3.8.0-31-generic (recovery mode)
    uuid        c690c1e6-beb9-46e7-85c2-145cd07d44ac
    kernel      /boot/vmlinuz-3.8.0-31-generic root=UUID=c690c1e6-beb9-46e7-85c2-145cd07d44ac ro  single
    initrd      /boot/initrd.img-3.8.0-31-generic
    
    title       Ubuntu 13.04, kernel 3.8.0-25-generic
    uuid        c690c1e6-beb9-46e7-85c2-145cd07d44ac
    kernel      /boot/vmlinuz-3.8.0-25-generic root=UUID=c690c1e6-beb9-46e7-85c2-145cd07d44ac ro quiet splash 
    initrd      /boot/initrd.img-3.8.0-25-generic
    quiet
    
    title       Ubuntu 13.04, kernel 3.8.0-25-generic (recovery mode)
    uuid        c690c1e6-beb9-46e7-85c2-145cd07d44ac
    kernel      /boot/vmlinuz-3.8.0-25-generic root=UUID=c690c1e6-beb9-46e7-85c2-145cd07d44ac ro  single
    initrd      /boot/initrd.img-3.8.0-25-generic
    
    title       Ubuntu 13.04, kernel 3.8.0-23-generic
    uuid        c690c1e6-beb9-46e7-85c2-145cd07d44ac
    kernel      /boot/vmlinuz-3.8.0-23-generic root=UUID=c690c1e6-beb9-46e7-85c2-145cd07d44ac ro quiet splash 
    initrd      /boot/initrd.img-3.8.0-23-generic
    quiet
    
    title       Ubuntu 13.04, kernel 3.8.0-23-generic (recovery mode)
    uuid        c690c1e6-beb9-46e7-85c2-145cd07d44ac
    kernel      /boot/vmlinuz-3.8.0-23-generic root=UUID=c690c1e6-beb9-46e7-85c2-145cd07d44ac ro  single
    initrd      /boot/initrd.img-3.8.0-23-generic
    
    title       Ubuntu 13.04, memtest86+
    uuid        c690c1e6-beb9-46e7-85c2-145cd07d44ac
    kernel      /boot/memtest86+.bin
    quiet
    
    title       --------------------------------
    root
    
    title       Windows Vista
    rootnoverify    (hd0,2)
    savedefault
    makeactive
    chainloader +1
    

    With the rootdelay the line in the top section was:

    kernel      /boot/vmlinuz-3.8.0-31-generic root=UUID=c690c1e6-beb9-46e7-85c2-145cd07d44ac rootdelay=120 ro quiet splash 
    

    As you can see the UUID is the same for all kernels. Why am I getting this problem, and what can I do to fix it?

    Desired=Unknown/Install/Remove/Purge/Hold
    | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
    |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
    ||/ Name                                  Version                 Architecture            Description
    +++-=====================================-=======================-=======================-===============================================================================
    un  linux-image-2.6                       <none>                                          (no description available)
    rc  linux-image-2.6.28-11-generic         2.6.28-11.42            i386                    Linux kernel image for version 2.6.28 on x86/x86_64
    rc  linux-image-2.6.31-22-generic         2.6.31-22.65            i386                    Linux kernel image for version 2.6.31 on x86/x86_64
    rc  linux-image-2.6.32-25-generic         2.6.32-25.44            i386                    Linux kernel image for version 2.6.32 on x86/x86_64
    rc  linux-image-2.6.35-22-generic         2.6.35-22.35            i386                    Linux kernel image for version 2.6.35 on x86/x86_64
    rc  linux-image-2.6.35-23-generic         2.6.35-23.41            i386                    Linux kernel image for version 2.6.35 on x86/x86_64
    rc  linux-image-2.6.35-24-generic         2.6.35-24.42            i386                    Linux kernel image for version 2.6.35 on x86/x86_64
    rc  linux-image-2.6.35-25-generic         2.6.35-25.44            i386                    Linux kernel image for version 2.6.35 on x86/x86_64
    rc  linux-image-2.6.35-27-generic         2.6.35-27.48            i386                    Linux kernel image for version 2.6.35 on x86/x86_64
    rc  linux-image-2.6.35-28-generic         2.6.35-28.50            i386                    Linux kernel image for version 2.6.35 on x86/x86_64
    rc  linux-image-2.6.38-10-generic         2.6.38-10.46            i386                    Linux kernel image for version 2.6.38 on x86/x86_64
    rc  linux-image-2.6.38-11-generic         2.6.38-11.50            i386                    Linux kernel image for version 2.6.38 on x86/x86_64
    rc  linux-image-2.6.38-12-generic         2.6.38-12.51            i386                    Linux kernel image for version 2.6.38 on x86/x86_64
    rc  linux-image-2.6.38-8-generic          2.6.38-8.42             i386                    Linux kernel image for version 2.6.38 on x86/x86_64
    un  linux-image-3.0                       <none>                                          (no description available)
    rc  linux-image-3.0.0-13-generic          3.0.0-13.22             i386                    Linux kernel image for version 3.0.0 on x86/x86_64
    rc  linux-image-3.0.0-14-generic          3.0.0-14.23             i386                    Linux kernel image for version 3.0.0 on x86/x86_64
    rc  linux-image-3.0.0-15-generic          3.0.0-15.26             i386                    Linux kernel image for version 3.0.0 on x86/x86_64
    rc  linux-image-3.0.0-16-generic          3.0.0-16.29             i386                    Linux kernel image for version 3.0.0 on x86/x86_64
    rc  linux-image-3.0.0-17-generic          3.0.0-17.30             i386                    Linux kernel image for version 3.0.0 on x86/x86_64
    rc  linux-image-3.2.0-24-generic          3.2.0-24.39             i386                    Linux kernel image for version 3.2.0 on 64 bit x86 SMP
    rc  linux-image-3.2.0-25-generic          3.2.0-25.40             i386                    Linux kernel image for version 3.2.0 on 32 bit x86 SMP
    rc  linux-image-3.2.0-26-generic          3.2.0-26.41             i386                    Linux kernel image for version 3.2.0 on 32 bit x86 SMP
    rc  linux-image-3.2.0-27-generic          3.2.0-27.43             i386                    Linux kernel image for version 3.2.0 on 32 bit x86 SMP
    rc  linux-image-3.2.0-29-generic          3.2.0-29.46             i386                    Linux kernel image for version 3.2.0 on 32 bit x86 SMP
    rc  linux-image-3.2.0-30-generic          3.2.0-30.48             i386                    Linux kernel image for version 3.2.0 on 32 bit x86 SMP
    rc  linux-image-3.2.0-31-generic          3.2.0-31.50             i386                    Linux kernel image for version 3.2.0 on 32 bit x86 SMP
    rc  linux-image-3.2.0-32-generic          3.2.0-32.51             i386                    Linux kernel image for version 3.2.0 on 32 bit x86 SMP
    rc  linux-image-3.2.0-33-generic          3.2.0-33.52             i386                    Linux kernel image for version 3.2.0 on 32 bit x86 SMP
    rc  linux-image-3.2.0-34-generic          3.2.0-34.53             i386                    Linux kernel image for version 3.2.0 on 32 bit x86 SMP
    rc  linux-image-3.2.0-35-generic          3.2.0-35.55             i386                    Linux kernel image for version 3.2.0 on 32 bit x86 SMP
    rc  linux-image-3.5.0-21-generic          3.5.0-21.32             i386                    Linux kernel image for version 3.5.0 on 32 bit x86 SMP
    rc  linux-image-3.5.0-22-generic          3.5.0-22.34             i386                    Linux kernel image for version 3.5.0 on 32 bit x86 SMP
    rc  linux-image-3.5.0-23-generic          3.5.0-23.35             i386                    Linux kernel image for version 3.5.0 on 32 bit x86 SMP
    rc  linux-image-3.5.0-25-generic          3.5.0-25.39             i386                    Linux kernel image for version 3.5.0 on 32 bit x86 SMP
    rc  linux-image-3.5.0-26-generic          3.5.0-26.42             i386                    Linux kernel image for version 3.5.0 on 32 bit x86 SMP
    rc  linux-image-3.5.0-27-generic          3.5.0-27.46             i386                    Linux kernel image for version 3.5.0 on 32 bit x86 SMP
    rc  linux-image-3.8.0-19-generic          3.8.0-19.30             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    rc  linux-image-3.8.0-21-generic          3.8.0-21.32             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    rc  linux-image-3.8.0-22-generic          3.8.0-22.33             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    ii  linux-image-3.8.0-23-generic          3.8.0-23.34             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    ii  linux-image-3.8.0-25-generic          3.8.0-25.37             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    ii  linux-image-3.8.0-31-generic          3.8.0-31.46             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    ii  linux-image-3.8.0-32-generic          3.8.0-32.47             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    rc  linux-image-extra-3.5.0-21-generic    3.5.0-21.32             i386                    Linux kernel image for version 3.5.0 on 32 bit x86 SMP
    rc  linux-image-extra-3.5.0-22-generic    3.5.0-22.34             i386                    Linux kernel image for version 3.5.0 on 32 bit x86 SMP
    rc  linux-image-extra-3.5.0-23-generic    3.5.0-23.35             i386                    Linux kernel image for version 3.5.0 on 32 bit x86 SMP
    rc  linux-image-extra-3.5.0-25-generic    3.5.0-25.39             i386                    Linux kernel image for version 3.5.0 on 32 bit x86 SMP
    rc  linux-image-extra-3.5.0-26-generic    3.5.0-26.42             i386                    Linux kernel image for version 3.5.0 on 32 bit x86 SMP
    rc  linux-image-extra-3.5.0-27-generic    3.5.0-27.46             i386                    Linux kernel image for version 3.5.0 on 32 bit x86 SMP
    rc  linux-image-extra-3.8.0-19-generic    3.8.0-19.30             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    rc  linux-image-extra-3.8.0-21-generic    3.8.0-21.32             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    rc  linux-image-extra-3.8.0-22-generic    3.8.0-22.33             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    ii  linux-image-extra-3.8.0-23-generic    3.8.0-23.34             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    ii  linux-image-extra-3.8.0-25-generic    3.8.0-25.37             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    ii  linux-image-extra-3.8.0-32-generic    3.8.0-32.47             i386                    Linux kernel image for version 3.8.0 on 32 bit x86 SMP
    ii  linux-image-generic                   3.8.0.32.50             i386                    Generic Linux kernel image
    
    • DisgruntledGoat
      DisgruntledGoat over 10 years
      @Braiam I've run that but no change. I've edited the output of the command into the question.
  • DisgruntledGoat
    DisgruntledGoat over 10 years
    If you mean to just delete the rootdelay part, I added that after the problem started, as stated in my question. So with that removed, that's how it was originally.
  • Braiam
    Braiam over 10 years
    @DisgruntledGoat updated answer with even more information.
  • DisgruntledGoat
    DisgruntledGoat over 10 years
    Thanks for the update. Reinstalling the kernel worked great! I did have a bunch of glitchy graphical issues on the desktop but I managed to fix those by reinstalling nautilus.
  • syntaxerror
    syntaxerror about 8 years
    @Braiam thanks for the great list, but ... heh ... my reason was none of the above. I still can't seem to believe why initrd will get built without ANY warning, but lets the user (esp. the newbie) run straightly into the disaster. That's downright nasty. And that's why I wondered why I shouldn't add #6 to the list. Hope you don't mind. :)
  • Braiam
    Braiam about 8 years
    @syntaxerror that would mean that your system needs a module that isn't in the default kernel, like raid/disk controllers or a filesystem.
  • syntaxerror
    syntaxerror about 8 years
    Spot on. And since many different users have many different types of hardware, chances are high they DO need said modules. By the way, the user you're talking to has nearly 20 years of Linux experience and still it took him 75% of this whole day in debugging...:) It doesn't even hint you to the problem, but just drops you out into BusyBox wilderness.
  • syntaxerror
    syntaxerror about 8 years
    Pitfall #7 (unfortunately off-topic in your answer, because this doesn't happen in mere kernel upgrades): boot flag not set for root partition. Once happened to me with a drive that showed itself unreliable @ LBA 20M (and I had no spare one at hand), so before it had a chance to totally wreak havoc on my / partition, I cloned it towards the end of the disk. Guess what, same error. Having the boot flag set is mandatory if the system is supposed to find your root device.
  • Braiam
    Braiam about 8 years
    @syntaxerror huh, that is actually weird, as grub doesn't follow the boot flag.
  • syntaxerror
    syntaxerror about 8 years
    @Braiam Well, if you say so. It did fix up things for me though. But basically, you seem right: right after the phase when we exit grub menu, we're STILL in grub for some time! (I sometimes forget to consider that fact) Anyways, I've read in many tips that the boot flag should be set in the / partition. Unless these tips were copy-pasted from those where something else apart from grub was used to boot into Linux. (e. g. LILO)
  • Braiam
    Braiam about 8 years
    @syntaxerror well, I am sure that grub doesn't respect boot flag, because the boot flag is set in my Windows partition. There's a good question somewhere about how grub works, but I can't find it right now.