# systemd  - Unable to resolve root: UUID=....

## imbiea

OK, I'm not sure if this is a kernel or genkernel or systemd or grub2 issue   :Smile: 

I'm contemplating (less every day now) of migrating my system from openrc to systemd.  I've created a chrooted environment on my existing sysetm, that is tied to a bootable usb drive that I use quite frequently for my emergency backup/recovery drive.

I'm following this guide: http://wiki.gentoo.org/wiki/Systemd#Kernel for my kernel config, however when I boot, I get the following:

```
>> Initializing root device

[2.691241] usb 2-1.1: New USB device found, idVendor=413c, idProduct=1002

.

.

.

!!  Unable to resolve root: UUID ....
```

I've seen a few other forums articles, but none that have answered my question

i.e.

https://forums.gentoo.org/viewtopic-t-991150-highlight-unable+resolve+root.html

so, here is some data for you

1) my relevant lines in /etc/defautl/grub

```
GRUB_CMDLINE_LINUX="rootfstype=ext4 init=/usr/lib/systemd/systemd"

```

blkid

```
 # blkid 

/dev/sda1: UUID="57e1103b-f791-47a5-bef0-611ee64f6465" TYPE="swap" PARTUUID="000de43c-01" 

/dev/sda2: UUID="66796150-7618-40bd-9435-71ef01a1bba3" TYPE="ext2" PTTYPE="dos" PARTUUID="000de43c-02" 

/dev/sda3: UUID="6ae824c2-e656-4819-a4c1-1b1b5b8fedfa" TYPE="ext3" PARTUUID="000de43c-03" 

/dev/sda4: UUID="812dce3d-f4f5-4455-80bc-d3bb83edd2c4" TYPE="ext3" PARTUUID="000de43c-04" 

/dev/sdb1: UUID="0be28453-11d5-48b8-8fcf-98d6b0b5a991" TYPE="ext4" PTTYPE="dos" PARTUUID="00087559-01" 

/dev/sdb2: UUID="f73b4a12-d957-4daf-977e-dbaccec68aee" TYPE="ext2" PTTYPE="dos" PARTUUID="00087559-02" 

```

and... my grub.conf

```

#

# DO NOT EDIT THIS FILE

#

# It is automatically generated by grub2-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='hd1,msdos1'

if [ x$feature_platform_search_hint = xy ]; then

  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1  0be28453-11d5-48b8-8fcf-98d6b0b5a991

else

  search --no-floppy --fs-uuid --set=root 0be28453-11d5-48b8-8fcf-98d6b0b5a991

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=en_US

  insmod gettext

fi

terminal_output gfxterm

if [ x$feature_timeout_style = xy ] ; then

  set timeout_style=menu

  set timeout=10

# Fallback normal timeout code in case the timeout_style feature is

# unavailable.

else

  set timeout=10

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-0be28453-11d5-48b8-8fcf-98d6b0b5a991' {

        load_video

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='hd1,msdos2'

        if [ x$feature_platform_search_hint = xy ]; then

          search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos2 --hint-efi=hd1,msdos2 --hint-baremetal=ahci1,msdos2  f73b4a12-d957-4daf-977e-dbaccec68aee

        else

          search --no-floppy --fs-uuid --set=root f73b4a12-d957-4daf-977e-dbaccec68aee

        fi

        echo    'Loading Linux x86_64-3.14.14-gentoo-systemd ...'

        linux   /kernel-genkernel-x86_64-3.14.14-gentoo-systemd root=UUID=0be28453-11d5-48b8-8fcf-98d6b0b5a991 ro rootfstype=ext4 init=/usr/lib/systemd/systemd 

        echo    'Loading initial ramdisk ...'

        initrd  /initramfs-genkernel-x86_64-3.14.14-gentoo-systemd

}

submenu 'Advanced options for Gentoo GNU/Linux' $menuentry_id_option 'gnulinux-advanced-0be28453-11d5-48b8-8fcf-98d6b0b5a991' {

        menuentry 'Gentoo GNU/Linux, with Linux x86_64-3.14.14-gentoo-systemd' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'glines 85-109

nulinux-x86_64-3.14.14-gentoo-systemd-advanced-0be28453-11d5-48b8-8fcf-98d6b0b5a991' {

                load_video

                insmod gzio

                insmod part_msdos

                insmod ext2

                set root='hd1,msdos2'

                if [ x$feature_platform_search_hint = xy ]; then

                  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos2 --hint-efi=hd1,msdos2 --hint-baremetal=ahci1,msdos2  f73b4a12-d957-4daf-977e-dbaccec68aee

                else

                  search --no-floppy --fs-uuid --set=root f73b4a12-d957-4daf-977e-dbaccec68aee

                fi

                echo    'Loading Linux x86_64-3.14.14-gentoo-systemd ...'

                linux   /kernel-genkernel-x86_64-3.14.14-gentoo-systemd root=UUID=0be28453-11d5-48b8-8fcf-98d6b0b5a991 ro rootfstype=ext4 init=/usr/lib/systemd/systemd 

                echo    'Loading initial ramdisk ...'

                initrd  /initramfs-genkernel-x86_64-3.14.14-gentoo-systemd

        }

        menuentry 'Gentoo GNU/Linux, with Linux x86_64-3.14.14-gentoo-systemd (recovery mode)' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-x86_64-3.14.14-gentoo-systemd-recovery-0be28453-11d5-48b8-8fcf-98d6b0b5a991' {

                load_video

                insmod gzio

                insmod part_msdos

                insmod ext2

                set root='hd1,msdos2'

                if [ x$feature_platform_search_hint = xy ]; then

                  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos2 --hint-efi=hd1,msdos2 --hint-baremetal=ahci1,msdos2  f73b4a12-d957-4daf-977e-dbaccec68aee

                else

                  search --no-floppy --fs-uuid --set=root f73b4a12-d957-4daf-977e-dbaccec68aee

                fi

                echo    'Loading Linux x86_64-3.14.14-gentoo-systemd ...'

                linux   /kernel-genkernel-x86_64-3.14.14-gentoo-systemd root=UUID=0be28453-11d5-48b8-8fcf-98d6b0b5a991 ro single rootfstype=ext4 init=/usr/lib/systemd/systemd

                echo    'Loading initial ramdisk ...'

                initrd  /initramfs-genkernel-x86_64-3.14.14-gentoo-systemd

        }

}

### 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

                linux   /kernel-genkernel-x86_64-3.14.14-gentoo-systemd root=UUID=0be28453-11d5-48b8-8fcf-98d6b0b5a991 ro single rootfstype=ext4 init=/usr/lib/systemd/systemd

                echo    'Loading initial ramdisk ...'

                initrd  /initramfs-genkernel-x86_64-3.14.14-gentoo-systemd

        }

}

### 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 ###

```

Ideas folks?

oh, and yes to supported filesystems in the kernel.

i.e.

```

# grep EXT /usr/src/linux/.config

CONFIG_BUILDTIME_EXTABLE_SORT=y

CONFIG_HAVE_CONTEXT_TRACKING=y

CONFIG_X86_EXTENDED_PLATFORM=y

CONFIG_ARCH_PROC_KCORE_TEXT=y

CONFIG_SPARSEMEM_EXTREME=y

CONFIG_PAGEFLAGS_EXTENDED=y

# CONFIG_ACPI_EXTLOG is not set

# CONFIG_NET_EMATCH_TEXT is not set

CONFIG_EXTRA_FIRMWARE=""

CONFIG_SERIAL_8250_EXTENDED=y

# CONFIG_EXTCON is not set

CONFIG_EXT2_FS=y

# CONFIG_EXT2_FS_XATTR is not set

# CONFIG_EXT2_FS_XIP is not set

CONFIG_EXT3_FS=y

CONFIG_EXT3_DEFAULTS_TO_ORDERED=y

CONFIG_EXT3_FS_XATTR=y

# CONFIG_EXT3_FS_POSIX_ACL is not set

# CONFIG_EXT3_FS_SECURITY is not set

CONFIG_EXT4_FS=y

CONFIG_EXT4_FS_POSIX_ACL=y

CONFIG_EXT4_FS_SECURITY=y

# CONFIG_EXT4_DEBUG is not set

# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set

CONFIG_CONTEXT_SWITCH_TRACER=y

```

EDIT

I just noticed something odd...

on my host system..

```
# grub2-probe --target=device /boot/kernel-genkernel-x86_64-3.14.14-gentoo 

/dev/sda4

# mount | grep sda4

/dev/sda4 on / type ext3 (rw,noatime,errors=continue,barrier=1,data=ordered)

```

OK, so to me this makes sense.. right?  the rootfs is /dev/sda4... which IS /

however... 

on my chrooted system...

```
grub2-probe --target=device /boot/kernel-genkernel-x86_64-3.14.14-gentoo-systemd 

/dev/sdb2

```

sdb2 is my /boot partition...??  

i.e. my /etc/fstab

```
UUID=0be28453-11d5-48b8-8fcf-98d6b0b5a991       /       ext4        noatime         0 1   #/sdb1

```

so... wtf?

Thanks

----------

## juggling_ben

 *imbiea wrote:*   

> OK, I'm not sure if this is a kernel or genkernel or systemd or grub2 issue  

 

I'm thinking it it's getting to systemd/init, then it's a systemd config issue. I reserve the right to be wrong though  :Smile: 

 *Quote:*   

> 
> 
> ```
> >> Initializing root device
> 
> ...

 

What uid is listed? You don't have to get it all, just the first few characters (so you can see what partition/disk it actually wants)

 *Quote:*   

> 
> 
> blkid
> 
> ```
> ...

 

Can you explain the layout a little? I'm guessing /dev/sda2 and /dev/sdb2 are boot partitions. Explain how the boot/rescue chroot is set up as well. There's possibly a few anomalies in what you list later.

----------

## Roman_Gruber

lspci / lsusb will reveal wwhich in build kernel module you will need.

systemd is the most topic i see in the past 6 months related to bugs / issues / not working at all.

UUID makes things complicated.

when you do not need UUID try the other method to set up your box. UUID never worked for any of my boxes, including mate / ubuntu / kubunt / arch. Just complicated, unreadable in my point.

i recommend you check out a binary linux installation and clone it to your needs. it can be a grub config issue / not proper configured kernel (indicating that no / is found), systemd bug (highly probably), UUID ...

Off topic: I can not remember reading any openrc issues in the past few months here and I try to read a lot of the topics to improve my knowledge. So stick to openrc when you do not really want / need systemd.

so usual request:

lspci / lsub / kernel config / related grub config(i think thats already here) / detail explanation of your partiton layout / anything else that may be useful

----------

## imbiea

 *Quote:*   

> 
> 
> What uid is listed? You don't have to get it all, just the first few characters (so you can see what partition/disk it actually wants)
> 
> 

 

I'm getting what "should be the right one..

i.e.

```

UUID="0be28453-11d5-48b8-8fcf-98d6b0b5a991

```

 *Quote:*   

> 
> 
> Can you explain the layout a little? I'm guessing /dev/sda2 and /dev/sdb2 are boot partitions. Explain how the boot/rescue chroot is set up as well. There's possibly a few anomalies in what you list later.

 

Yeah, a bit odd, because this was my backup drive... (maybe this is what is causing odd issues..

sdb1 is the correct "root" parition (ext4 - contains everything "except" boot, and sdb2 is /boot (ext2)

----------

## imbiea

 *tw04l124 wrote:*   

> 
> 
> systemd is the most topic i see in the past 6 months related to bugs / issues / not working at all.
> 
> UUID makes things complicated.
> ...

 

Yeah, but since it's a portable/bootable USB.. This is kinda the point.. I have in the past made it /sda1  /sdb2.. etc.. but then if you're using the drive off another system, then you won't always get the right one to boot... 

 *tw04l124 wrote:*   

> 
> 
> i recommend you check out a binary linux installation and clone it to your needs. it can be a grub config issue / not proper configured kernel (indicating that no / is found), systemd bug (highly probably), UUID ...
> 
> 

 

I'm not sure I follow you here?  I'm just doing a trial of this on my usb bootable... to make sure I can get everything working correctly on it first... (i.e. migrating init.d scripts to systemd scripts... etc...  The whole point is to make sure that things look good on this 2ndary disk before I migrate my existing system.

 *tw04l124 wrote:*   

> 
> 
> so usual request:
> 
> lspci / lsub / kernel config / related grub config(i think thats already here) / detail explanation of your partiton layout / anything else that may be useful

 

Yes, Thanks, I'll get the output of this when I get back to the system later today...

----------

## poncho

maybe this...?

from http://wiki.gentoo.org/wiki/Genkernel

 *Quote:*   

> --disklabel
> 
>     Adds support for disk label and UUID support to the initrd. 

 

----------

## imbiea

 *poncho wrote:*   

> maybe this...?
> 
> from http://wiki.gentoo.org/wiki/Genkernel
> 
>  *Quote:*   --disklabel
> ...

 

 :Sad:     Hm... now why didn't I see that     :Shocked: 

And..... Why isn't that in the systemd install guide!   :Razz: 

```
genkernel --udev --lvm
```

    (where lvm is of course optional)

OK, trying that tonight.....

----------

## imbiea

 *poncho wrote:*   

> maybe this...?
> 
> from http://wiki.gentoo.org/wiki/Genkernel
> 
>  *Quote:*   --disklabel
> ...

 

ahhh... genkernel-next

```
# genkernel --kernel-config=/root/kernel-systemd --disklabel --udev all

Error: Unknown option '--disklabel'!

```

I assume this functionality is "built in" with genkernel-next

So, no go on the --disklabel command ..... I'm used to generally building the kernel without initrd... and without genkernel... so some of this is new.

----------

## juggling_ben

Have you seen this?

http://unix.stackexchange.com/questions/93767/why-cant-i-specify-my-root-fs-with-a-uuid

In general, some of the UUID stuff gets figured out in an initrd/initramfs image (Actually, I know this, since I've written my own initrd before to use with OpenRC, and I had to handle UUIDs). Systemd is probably not expecting UUID at this point.

Something to try is to not use UUID. Either enable GRUB_DISABLE_LINUX_UUID (probably in /etc/default, but I don't have a grub2 machine handy) and then re-run grub2-mkconfig, or change your grub config manually to use /dev/sdX, etc.

(or make a initramfs, which seems to be the path you were taking)

The benefit of using UUID is that machines where hard drives are added or removed (before boot, not USB drives, etc) results in reordering of /dev/sdX entries, while the UUIDs stay the same. If your machine has a pretty static configuration, then disabling UUID is generally OK.

Interesting that OpenRC didn't really have a problem with UUID without initramfs...

----------

## imbiea

Yeah, I did see that, however the error there is different, indicating (to me at least) that it's a driver issue, maybe with lower level SCSI or something of that nature... i.e. I ensured that I enabled USB mass storage so that I didn't run into a similar issue

i.e.  *Quote:*   

> kernel panic - not syncing: VFS: unable to mount root fs on unknown-block(0,0)
> 
> 

 

Is different then my  *Quote:*   

>  Unable to resolve root: UUID ....

 

Yes, I know OpenRC works, but.. hey.. it's gentoo!! this is what we do  :Smile:   We play with stuff!

I'm also puzzled by the fact that their is a systemd guide with kernel specifics... which tells me that at least "someone" has gotten this to work.

I kinda want to revisit with folks one item I had earlier in my post that might have been overlooked. (if folks are willing)

i.e. on my host-non-chrooted OS:

 *Quote:*   

> grub2-probe --target=device /boot/kernel-genkernel-x86_64-3.14.14-gentoo
> 
> /dev/sda4 

 

which.. sda4 is indeed "/"

where as on my chrooted os:

 *Quote:*   

> grub2-probe --target=device /boot/kernel-genkernel-x86_64-3.14.14-gentoo-systemd
> 
> /dev/sdb2 

 

sda2.. is /boot   

something tells me.. "this" is the underlying problem.. I just don't know how to go about resolving it?

 :Rolling Eyes: 

----------

## juggling_ben

 *imbiea wrote:*   

> Yeah, I did see that, however the error there is different, indicating (to me at least) that it's a driver issue, maybe with lower level SCSI or something of that nature... i.e. I ensured that I enabled USB mass storage so that I didn't run into a similar issue

 

Yeah, I was pointing towards the PARTUUID solution, which might be plausible (same with using /dev/sdaX rather than UUIDs, which I still think might help).

I think poncho hit on the right genkernel solution above. It looks like you actually are using genkernel (according to your grub config). The initrd must have a way to parse UUIDs, and the --disklabel option does that. So maybe you need genkernel-next?

Note that, according to the wiki page for systemd, you have to specify real_init= rather than init= in /etc/default/grub.conf when using genkernel-next

 *Quote:*   

> I'm also puzzled by the fact that their is a systemd guide with kernel specifics... which tells me that at least "someone" has gotten this to work.

 

Yeah, that may be an omission from the wiki. Maybe. You'll notice that in one example they use /dev/sda, and another they use a UUID. I would think using UUID needs the disklabel option.

 *Quote:*   

> 
> 
> i.e. on my host-non-chrooted OS:
> 
> grub2-probe --target=device /boot/kernel-genkernel-x86_64-3.14.14-gentoo
> ...

 

By host-non-chrooted OS, you mean the 'backup' that you chroot from?

This is the one that seems wrong to me. My understanding is that grub2-probe would print the device that the path is on. I would expect this to be /dev/sda2 (your 'rescue' boot partition, correct?). If so, that means that on your rescue image /dev/sda2 isn't mounted as /boot.

But it looks like you do mount /dev/sdb2 for use inside the chroot, which means that one looks ok.

I hope this is making sense  :Smile: 

----------

## imbiea

 *juggling_ben wrote:*   

> Yeah, I did see that, however the error there is different, indicating (to me at least) that it's a driver issue, maybe with lower level 
> 
> I think poncho hit on the right genkernel solution above. It looks like you actually are using genkernel (according to your grub config). The initrd must have a way to parse UUIDs, and the --disklabel option does that. So maybe you need genkernel-next?
> 
> Note that, according to the wiki page for systemd, you have to specify real_init= rather than init= in /etc/default/grub.conf when using genkernel-next
> ...

 

I may not have specified that well earlier.  My response was that --disklabel didn't work.. I think BECAUSE I'm using genkernel-next.  i.e. that option isn't valid with the next version.

Also, I did fix my /etc/default/grub to use real_init, instead of init.... Same problem though.

 *juggling_ben wrote:*   

> 
> 
> By host-non-chrooted OS, you mean the 'backup' that you chroot from?
> 
> 

 

Yes, I meant the host that I chrooted from.  That is my Gentoo system that has openrc now (though.. the kernel that is running on that system does have both openrc/systemd) support in it, and is booting fine.  But again, it's using openrc

 *juggling_ben wrote:*   

> 
> 
> This is the one that seems wrong to me. My understanding is that grub2-probe would print the device that the path is on. I would expect this to be /dev/sda2 (your 'rescue' boot partition, correct?). If so, that means that on your rescue image /dev/sda2 isn't mounted as /boot.
> 
> 

 

IN  non-chrooted os, /dev/sda2 is /, and in the chrooted env /sdb2 is /boot

I was playing around this morning with command line options on both systems (i.e. the normal working system, and the one that is off the usb drive (sdb) that I'm trying to boot

Interesting findings.. but not sure what they mean.

1) My "normal, openrc, grub2" system... in grub:

```
 root=(hd0,msdos2) 
```

   This is correct it seems to me, as :

* it boots

* partition 1 is swap

*  When I try to find my kernel I can navigate to /boot/kernel...etc...

2) My other system (the one in which is on a usb drive, that I've built by chrooted into via "system1"

```
root=(hd1,msdos2)
```

  Also "appears" correct, because partition 1 is actually "/", and partition 2 is /boot  (yes, I know that appears odd, this is what I meant by it was my "backup" drive... initially I just had a whole partition carved out (sdb1), and decided to try this as a bootable drive, (which used to work..)

But... odd part (maybe ) is:

*  I can't navigate to /boot/kernel*... I only find it at /kernel* (on hd1,msdos2)

Does this make any sense?

 :Surprised: 

----------

## Roman_Gruber

```

But... odd part (maybe ) is:

* I can't navigate to /boot/kernel*... I only find it at /kernel* (on hd1,msdos2)
```

You have to dinstinguish between a mount point and the content of a mount point. Thats the usual desired behaviour

----------

