View previous topic :: View next topic |
Author |
Message |
hokiau n00b
Joined: 24 Dec 2013 Posts: 18
|
Posted: Tue Dec 24, 2013 1:24 pm Post subject: cannot boot with systemd with /usr on a separate lvm FS |
|
|
Upgrading gnome to 3.8 required the system to be booted in systemd. I followed the instructions http://wiki.gentoo.org/wiki/Systemd, but could not get the system to boot with /usr/lib/systemd/systemd as init.
I have / and /usr on two different file systems on LVM2. I used genkernel from genkernel-next to generate the kernel image and initramfs. I am still at the stage of using grub:0 to boot. My grub line reads:
Code: |
kernel /boot/kernel-genkernel-x86_64-3.10.17-gentoo root=/dev/ram0 real_root=/dev/vg/slash dolvm intel_iommu=igfx_off vga=0x31b rootfstype=ext4 real_init=/usr/lib/systemd/systemd
initrd /boot/initramfs-genkernel-x86_64-3.10.17-gentoo
|
The system would not boot with real_init=/usr/lib/systemd/systemd. It resulted in kernel panic, as it complained that it was "unable to mount ../dm-1 on /usr".
Could someone tell me what was wrong? |
|
Back to top |
|
|
dambacher Apprentice
Joined: 11 Feb 2003 Posts: 289 Location: Germany
|
Posted: Thu Dec 26, 2013 6:50 am Post subject: |
|
|
You overlooked the one big drawback of systemd: it needs /usr/lib in boot stage and therefore can not run with separate /usr partitions.
To work around this, you need an initramfs to early mount your /usr partitition before starting systemd.
It seems this does not work correctly with your setup.
Check why your initrd does not correctly mount your /usr/ partition before starting systemd.
Look for http://wiki.gentoo.org/wiki/Early_Userspace_Mounting or try
http://wiki.gentoo.org/wiki/Dracut |
|
Back to top |
|
|
hokiau n00b
Joined: 24 Dec 2013 Posts: 18
|
Posted: Sun Dec 29, 2013 3:21 pm Post subject: |
|
|
I was actually quite aware that /usr needed to be mounted in the boot stage. I followed the instructions in http://wiki.gentoo.org/wiki/Initramfs/HOWTO which was a link from http://wiki.gentoo.org/wiki/Systemd, to build the initramfs using genkernel (built from genkernel-next). I thought it would mount /usr when it loaded initramfs, but obviously I was wrong.
The page that dambacher quoted, http://wiki.gentoo.org/wiki/Early_Userspace_Mounting, seemed inconsistent with what I had on my system. It used a file /usr/src/initramfs/initramfs_list which did not exist on my system (3.10.17). It seemed like the file /etc/initramfs.mounts was used instead. In that file, I had:
That would make genkernel generate an initramfs that would include and mount /usr, wouldn't it? /usr/lib is in the same partition as /usr.
I tried dracut as well. But it also failed equally miserably. I take it back. It failed even earlier than if I used the initramfs from genkernel. It was not able to mount the root fs. The error message was
Quote: |
Kernel panic - not synching: VFS: unable to mount root fs on unknown-block(1,0)
|
Is there a way that I can examine initramfs to make sure it would mount /usr? |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54237 Location: 56N 3W
|
Posted: Sun Dec 29, 2013 3:31 pm Post subject: |
|
|
hokiau,
The initramfs is a cpio archive of cpio archives. Use cpio to decompose the initramfs anu read its init script.
I refuse to depend on black magic to make my initramfs and rolling your own isn't that difficult.
I recommend that you use lddtree to discover the libs you need as the list under Code: | # libraries required by /sbin/fsck.ext4 and /sbin/fsck | may be out of date _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
dambacher Apprentice
Joined: 11 Feb 2003 Posts: 289 Location: Germany
|
Posted: Sun Dec 29, 2013 6:26 pm Post subject: |
|
|
hi hokiau
I can not see anything wrong on how you did your your initramfs.
if you want to look at the initramfs - they are compressed cpio archives, you have to rename and unxz them before using cpio -i < $FILE to unpack. the logic you search for is in init and etc/initrd.d/00-rootdev.sh
I know it is nearly impossible to get a boot log to show us when something is failing in early boot - I used my camera in video mode sometime.
I would like to know if you can deduct from the kernel log of your failing boot
1) if your lvm gets inititalized correctly (you see the devices get activated, how are they named?)
2) that udev or mdev is activated and devtmpfs gets mounted so you can actually see the new devices in userspace
3) you have written "unable to mount ../dm-1 on /usr" - why do you use a relative path in mount?
the initramfs is programmed to mount your real root and check your fstab, if you have some strage things in there it won_t work.
look for something like "Unable to mount ${dev} for ${fs}" in your last lines.
4)add "debug" to your kernel command line which gets you a debug shell just before switching roots to check on the live system if everything is correct and maybe manually mount /usr
What about trying it the other way round - at least preliminary:
You can copy the boot relevant /usr/lib/systemd files to your first dm partitition, they get mounted over during the boot process.
this way you could boot without a ram disk and check that your kernel works correctly. |
|
Back to top |
|
|
hokiau n00b
Joined: 24 Dec 2013 Posts: 18
|
Posted: Mon Dec 30, 2013 8:08 am Post subject: |
|
|
I did not use a relative path to mount my file systems. the ../dm-1 thing was done by the system script, not mine. I guess the system scripts look at /etc/fstab and derive ../dm-1 from some paths there.
Apparently the system was able to mount some file systems in my volume group, because my / was also a logical volume. Only my /boot partition was on a real disk partition. E.g. my / is /dev/vg/slash and my /usr is /dev/vg/usr. It's able to mount / but not /usr for some reason. |
|
Back to top |
|
|
hokiau n00b
Joined: 24 Dec 2013 Posts: 18
|
Posted: Mon Dec 30, 2013 9:00 am Post subject: |
|
|
Like NeddySeagoon suggested, and following https://wiki.gentoo.org/wiki/Early_Userspace_Mounting, I tried to build initramfs manually. I used lddtree to determine the exact list of .so that /sbin/fsck and /sbin/fsck.ext4 needed. I actually did the same for /sbin/lvm as well.
Built the initramfs. Adjusted grub:0's config to boot with this initramfs. Then I got:
Mounting rootfs
mount: mounting /dev/ram0 on /mnt/root failed: Invalid argument
Checking local filesystem : /usr
/init: line 101: /sbin/fsck not found
Filesystem couldn't be fixed
Something went wrong. Dropping you to a shell.
/bin/sh: can't access tty; job control turned off
I could not type any command, but needed to push the power button to reset.
I specified /sbin/fsck and /sbin/fsck.ext4 in the initramfs_list file. |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54237 Location: 56N 3W
|
Posted: Mon Dec 30, 2013 12:43 pm Post subject: |
|
|
hokiau,
The kernel will find the initramfs if one is provided root=/dev/ram0 on the kernel cammand line is no longer required.
Post the list of files you used to make your initramfs _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
hokiau n00b
Joined: 24 Dec 2013 Posts: 18
|
Posted: Mon Dec 30, 2013 3:12 pm Post subject: |
|
|
Got rid of the root=/dev/ram0 argument. It still would not boot, giving the same error as before:
Quote: |
Kernel panic - not synching: VFS: unable to mount root fs on unknown-block(1,0)
|
My /usr/src/initramfs_list looks like:
Code: |
# directory structure
dir /proc 755 0 0
dir /usr 755 0 0
dir /bin 755 0 0
dir /sys 755 0 0
dir /var 755 0 0
dir /lib 755 0 0
dir /sbin 755 0 0
dir /mnt 755 0 0
dir /mnt/root 755 0 0
dir /etc 755 0 0
dir /root 700 0 0
dir /dev 755 0 0
# busybox
file /bin/busybox /bin/busybox 755 0 0
# libraries required by /sbin/fsck.ext4 and /sbin/fsck
file /lib/ld-linux.so.2 /lib/ld-linux.so.2 755 0 0
file /lib/libext2fs.so.2 /lib/libext2fs.so.2 755 0 0
file /lib/libcom_err.so.2 /lib/libcom_err.so.2 755 0 0
file /lib/libpthread.so.0 /lib/libpthread.so.0 755 0 0
file /lib/libblkid.so.1 /lib/libblkid.so.1 755 0 0
file /lib/libuuid.so.1 /lib/libuuid.so.1 755 0 0
file /lib/libe2p.so.2 /lib/libe2p.so.2 755 0 0
file /lib/libc.so.6 /lib/libc.so.6 755 0 0
file /lib/libmount.so.1 /lib/libmount.so.1 755 0 0
file /lib/libuuid.so.1 /lib/libuuid.so.1 755 0 0
file /lib/libc.so.6 /lib/libc.so.6 755 0 0
file /usr/lib/libudev.so.1 /usr/lib/libudev.so.1 755 0 0
file /lib/libdl.so.2 /lib/libdl.so.2 755 0 0
file /lib/libdevmapper-event.so.1.02 /lib/libdevmapper-event.so.1.02 755 0 0
file /lib/libdevmapper.so.1.02 /lib/libdevmapper.so.1.02 755 0 0
file /lib/libreadline.so.6 /lib/libreadline.so.6 755 0 0
file /lib/libncurses.so.5 /lib/libncurses.so.5 755 0 0
file /sbin/fsck /sbin/fsck 755 0 0
file /sbin/fsck.ext4 /sbin/fsck.ext4 755 0 0
file /sbin/lvm /sbin/lvm 755 0 0
# our init script
file /init /usr/src/initramfs/init 755 0 0
|
Thanks for your help. I appreciate it. |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54237 Location: 56N 3W
|
Posted: Mon Dec 30, 2013 6:38 pm Post subject: |
|
|
hokiau,
I do it like this See Code Listing 4.9: Content of package.use
and Code Listing 5.2: /root/initrd/initramfs_list.
As you will be using DEVTMPFS you do not need any of the nod entries.
unknown-block(1,0) is /dev/ram0 and that should not be used any more. Put your kernel .config onto a pastebin please _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
hokiau n00b
Joined: 24 Dec 2013 Posts: 18
|
Posted: Tue Dec 31, 2013 12:21 pm Post subject: |
|
|
I'm sorry, but how do I paste something in the pastebin? I don't seem to find a pastebin.
I have in .config
Code: |
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
|
|
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54237 Location: 56N 3W
|
Posted: Tue Dec 31, 2013 12:29 pm Post subject: |
|
|
hokiau,
The easiest way is with wgetpaste. It can paste whole files or the output of commands.
You will need to emerge it unless your liveCD provides it.
When wgetpaste is successful, it returns a URL for your paste.
You post the URL on the forum. _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
hokiau n00b
Joined: 24 Dec 2013 Posts: 18
|
Posted: Tue Dec 31, 2013 12:44 pm Post subject: |
|
|
The puzzling thing was that I was able to boot the same kernel, same initramfs (generated by genkernel-next) if I did not have the real_init=/usr/lib/systemd/systemd kernel parameter. |
|
Back to top |
|
|
hokiau n00b
Joined: 24 Dec 2013 Posts: 18
|
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54237 Location: 56N 3W
|
Posted: Tue Dec 31, 2013 12:55 pm Post subject: |
|
|
hokiau,
While I look over your kernel, what does the script at /usr/lib/systemd/systemd contain? _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
hokiau n00b
Joined: 24 Dec 2013 Posts: 18
|
Posted: Tue Dec 31, 2013 12:58 pm Post subject: |
|
|
It's a binary. I believe it's a package required by gnome 3.8. It was built from the sys-apps/systemd package.
http://wiki.gentoo.org/wiki/GNOME/3.8-upgrade-guide said I needed to install systemd when I upgraded to gnome 3.8. |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54237 Location: 56N 3W
|
Posted: Tue Dec 31, 2013 3:19 pm Post subject: |
|
|
hokiau,
I had forgotten that systemd is binary almost everything as I'm not a systemd user.
Your kernel .config looks good and as it boots without the Code: | real_init=/usr/lib/systemd/systemd | then that binary is implicated in the problem.
Unfortunately, I have no idea how to unravel the binary to see what it does. _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
nextgen Tux's lil' helper
Joined: 17 Jun 2004 Posts: 107 Location: Montreal, Quebec, Canada
|
Posted: Sun Jan 12, 2014 5:59 pm Post subject: |
|
|
This systemd upgrade nightmare has brought me an unprecedented amount of pain and suffering in 14 years of gentoo experience. I finally found a workaround.
The error
Code: | unable to mount ../dm-3 on /usr |
is due to the fact that genkernel looks up the /usr device from /etc/fstab. In my case, the fstab entry pointed to /dev/sysraid/usr, which itself is a symlink to ../dm-3. I changed the fstab entry to explicitly point to /dev/dm-3 and regenerated the initramfs with genkernel. That took care of the above error when booting. (I wasn't quite done with systemd issues after that, but that's yet another story...)
In your case, you should probably point your fstab entry to /dev/dm-1.
I hope this helps. |
|
Back to top |
|
|
hokiau n00b
Joined: 24 Dec 2013 Posts: 18
|
Posted: Mon Jan 13, 2014 12:40 am Post subject: |
|
|
Thanks, nextgen! It worked, after I took your advice and mount /dev/dm-1 on /usr. That should have been documented, shouldn't it?
Now I can proceed to the next step of upgrading to gnome 3.8. Thanks again to everybody who had helped! |
|
Back to top |
|
|
nextgen Tux's lil' helper
Joined: 17 Jun 2004 Posts: 107 Location: Montreal, Quebec, Canada
|
Posted: Mon Jan 13, 2014 3:43 am Post subject: |
|
|
Glad it worked!
I agree it should have been documented somewhere. It might have saved me days searching the web in vain until I accidentally observed the ../dm-3 symlink when browsing my LVM devices (/dev/<volume group>/*), which gave me the idea to adjust the fstab file.
Works with grub legacy. |
|
Back to top |
|
|
frostschutz Advocate
Joined: 22 Feb 2005 Posts: 2977 Location: Germany
|
Posted: Mon Jan 13, 2014 1:01 pm Post subject: |
|
|
note that this will break any time you change anything about your setup that makes the dm-x numbers change. They're dynamic (first come first serve).
You should really mount by UUID instead or find a device name that is actually available. |
|
Back to top |
|
|
nextgen Tux's lil' helper
Joined: 17 Jun 2004 Posts: 107 Location: Montreal, Quebec, Canada
|
Posted: Tue Jan 14, 2014 12:55 am Post subject: |
|
|
Can you give more detail on how to mount by UUID? Under /dev/disk/by-uuid, I still find relative-path symlinks (such as ../../dm-3). Hence I suppose that setting up those devices in /etc/fstab won't yield a bootable initramfs. |
|
Back to top |
|
|
damocles n00b
Joined: 05 Feb 2010 Posts: 4
|
Posted: Tue Jan 14, 2014 8:31 pm Post subject: |
|
|
Hello,
I had this problem with genkernel-next and the culprit seems this code fragment in [src_initramfs]/etc/initrd.d/00-rootdev.sh
Code: |
[...]
# Resolve it like util-linux mount does
[ -L "${dev}" ] && dev=$(readlink "${dev}")
[...]
|
as you can see it replaces you usr volume with the relative target device and by doing this mount gets confused and is unable to mount it.
Removing this line makes my system boot correctly but I wonder if there will be a better way... |
|
Back to top |
|
|
depontius Advocate
Joined: 05 May 2004 Posts: 3509
|
Posted: Tue Jan 14, 2014 8:55 pm Post subject: |
|
|
nextgen wrote: | Can you give more detail on how to mount by UUID? Under /dev/disk/by-uuid, I still find relative-path symlinks (such as ../../dm-3). Hence I suppose that setting up those devices in /etc/fstab won't yield a bootable initramfs. |
Filesystems will have a UUID assigned when created. You can find them by using "blkid /dev/sdXN". I know I said it's assigned when the filesystem is created, but it's assigned to the device, not the filesystem. You can use "UUID="<big long string>"" in place of "/dev/sdXN" in /etc/fstab.
There is also a partUUID, but not for MSDOS partitions. If you partition your disks with GPT the partitions will be assigned a partUUID, even before any filesystem is created. I'm currently using this to assemble my RAID. I have a situation where one drive is eSATA, and of course happens to be /dev/sda. So when it comes and goes it upsets the entire disk naming convention. Conventional UUIDs work for the filesystems, but I'm using partUUID to get the RAID right. I'm under the impression that I don't need to, that RAID is smart enough to go searching and look for fingerprints, but I'm taking no chances. For RAID the drives are specified as "/dev/disk/by-partuuid/<designator>". _________________ .sigs waste space and bandwidth |
|
Back to top |
|
|
nextgen Tux's lil' helper
Joined: 17 Jun 2004 Posts: 107 Location: Montreal, Quebec, Canada
|
Posted: Mon Feb 17, 2014 9:48 pm Post subject: |
|
|
depontius wrote: | Filesystems will have a UUID assigned when created. You can find them by using "blkid /dev/sdXN". I know I said it's assigned when the filesystem is created, but it's assigned to the device, not the filesystem. You can use "UUID="<big long string>"" in place of "/dev/sdXN" in /etc/fstab. |
Thanks for the details. I've tried using UUID="<big long string>" in place of /dev/dm-3 in /etc/fstab. I then regenerated the initramfs using genkernel. I'm not sure what I might have forgotten, but this yielded an unbootable system: kernel panic, unable to mount UUID="440a1...". Fortunately, I had a good old openrc-based kernel, to which I've had to edit the kernel parameter root=/dev/md125 to make it bootable. This allowed me to boot into the old kernel, revert the /etc/fstab change and regenerate the initramfs. Now I can boot into systemd again.
However, the /dev/dm-3 workaround may not be stable as frostschutz notes.
frostschutz wrote: | note that this will break any time you change anything about your setup that makes the dm-x numbers change. They're dynamic (first come first serve). |
Yet I'm stuck with my workaround. This will do for now. With this systemd painful adventure after 15 years of gentoo, I think that on my next system I'll be ready for a distro switch with a less complex setup.
Curiously, in my various attempts to boot trying to fix this, I've had a graphics card issue: no image on power up. As I initially connected this symptom to my systemd issues, I thought I had fried my system and that my adventure with gentoo had finally come to a abrupt end. I took out the graphics card, cleaned it with compressed air and could finally revive my system. I guess it was just a coincidence that the graphics card failed as I tried fixing my systemd setup. After all, I don't reboot very often. |
|
Back to top |
|
|
|