Rich Freeman on 20 Feb 2013 07:15:29 -0800

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: [PLUG] Panic (kernel that is)

On Wed, Feb 20, 2013 at 8:57 AM, Eric Lucas <> wrote:
> When booting the system from that disk the kernel panics.  It says:
> "No filesystem could mount root, tried: ext3 ext2 vfat msdos iso9660 udf
> xfs"
> The system has the usual /dev/sda and /dev/sdb with all the partitions of
> type Linux raid autodetect.
> At first I thought it was a problem with the kernel detecting the RAID
> drives but now I'm thinking it's having trouble accessing the ram disk.
> That's because on the iso in the isolinux.cfg file there is this:
> label expert
>         kernel /vmlinuz
>         append initrd=/initrd.img root=/dev/ram0 rw ramdisk_size=151552
> expert devfs=nomount noresume selinux=0 barrier=off udevtimeout=10
> Ah ha!  root is /dev/ram0
> So how do I tell if a kernel has built-in support for ramdisk?

I don't think it is possible to build a kernel which doesn't have
support for a ramfs.  Note that this is the old-style initrd syntax
which you might not be as familiar with.

When you boot with an initrd or initramfs the ram disk is the initial
root filesystem.  Newer kernels using an initramfs ignore the root=
parameter, and so most modern distro versions just point root= at your
final root filesystem.  The kernel ignores this and mounts the
initramfs as root, and then a script in the initramfs reads the root=
parameter and mounts that as the new root.

Older-style syntax (which, btw, is used by Gentoo with the default
genkernel initramfs but not with the newer dracut initramfs) was to
set root=/dev/ram0 which is where the initrd got mounted and then use
some other parameter to communicate to the initrd where to find the
real root filesystem (Gentoo genkernel uses real_root= for this).

Since there is no other root device mentioned on the config line there
is either some error in setting up grub, or the initrd has some other
logic for finding your root filesystem (it could just be hard-coded in
the initrd).

So, now let's try to parse your error.  Something is triggering a
panic because root couldn't be found.  I don't know if an initrd can
trigger a panic when it tries to pivot to a new root (maybe it can).
If not, then perhaps the kernel can't load the initrd in the first
place.  The initrd has to be a filesystem image readable by the kernel
- usually squashfs (but the kernel has to support squashfs for that to
work), and of course the path to the initrd has to be right.  An
initramfs is in cpio format, but it doesn't seem likely that you're
using the newer initramfs format.

Try running file on the /initrd.img file and see what it outputs.  It
should identify what kind of format it is in.  Then make sure your
kernel has BUILT-IN support for that filesystem.  You can compile
support for your real root filesystem as a module, but the filesystem
used by the initrd has to be built-in, as the modules are stored
inside that.

I'm not very familiar with Mondo in particular - everything above is
just based on how the linux boot process works in general.  Some of
the specifics will vary if you're talking about initramfs vs initrd.
Also, once that initrd is mounted as root it can do anything it wants
to - it doesn't even have to mount some other device as a new root
even if that is how most distros use an initrd/initramfs.  All the
kernel does is mount the initrd/initramfs on a root device, find init
on that device, and runs it.  Everything else after that is all
userspace (init could be anything - it doesn't have to be sysvinit and
it often is just a bash script).

Philadelphia Linux Users Group         --
Announcements -
General Discussion  --