Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 486430 - sys-fs/lvm2-2.02.100-r2 fails to read volume groups and does not create symlinks in /dev/mapper
Summary: sys-fs/lvm2-2.02.100-r2 fails to read volume groups and does not create symli...
Status: RESOLVED INVALID
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] Core system (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Robin Johnson
URL:
Whiteboard:
Keywords: Bug
Depends on:
Blocks:
 
Reported: 2013-09-29 08:43 UTC by Markus Wernig
Modified: 2013-10-13 18:32 UTC (History)
4 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments
initramfs init script (init,929 bytes, text/plain)
2013-09-30 13:45 UTC, Jory A. Pratt
Details
init from initrd (init,955 bytes, text/plain)
2013-10-01 18:07 UTC, Markus Wernig
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Markus Wernig 2013-09-29 08:43:44 UTC
After upgrading to sys-fs/lvm2-2.02.100-r2 the system behaves rather strangely. There are multiple symptoms which seem related:

1) I have to build my own initrd, which contains statically linked versions of lvm, busybox etc. In the init script contained in the same initrd, up to now, I did the following:

/bin/lvm vgscan >/dev/null 2>&1
/bin/lvm vgchange -ay linux

This used to create the symlinks under /dev/mapper that could then be mounted and pivoted to. With the "new" lvm, I had to add the line

/bin/vgscan --mknodes

Does autoactivation no longer create the links under /dev/mapper?

2) After getting the system back to bootable with the above change, lvm fails to see any volume groups in the running system:

# lvm vgscan
  Reading all physical volumes.  This may take a while...
  No volume groups found
# lvm version
  LVM version:     2.02.100(2) (2013-08-13)   
  Library version: 1.02.79 (2013-08-13)       
  Driver version:  4.25.0

But:

# df
Filesystem                    1K-blocks      Used Available Use% Mounted on
/dev/mapper/linux-gentoo_root  30832636  18207264  11036124  63% /
tmpfs                            777692      3032    774660   1% /run
udev                              10240         0     10240   0% /dev
shm                             3888444         0   3888444   0% /dev/shm
cgroup_root                       10240         0     10240   0% /sys/fs/cgroup
/dev/mapper/linux-ubuntu_root  15350768   6431648   8116308  45% /mnt/ubuntu

... with gentoo_root and ubuntu_root being logical volumes in group "linux".

An older version of lvm displays them correctly:
# mount -t proc proc /mnt/ubuntu/proc
# mount -o bind /dev/ /mnt/ubuntu/dev
# chroot /mnt/ubuntu/
# lvm vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "linux" using metadata type lvm2
# lvm lvs
  LV          VG    Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert
  gentoo_root linux -wi-ao--  30.00g                                           
  ubuntu_root linux -wi-ao--  15.00g  
# lvm version
  LVM version:     2.02.95(2) (2012-03-06)
  Library version: 1.02.74 (2012-03-06)
  Driver version:  4.25.0

Happens with both kernel 3.10.2 and 3.11.1.

BTW: This is a SSD-only UEFI system.

Reproducible: Always




# emerge --info                                                                                             
Portage 2.2.7 (default/linux/amd64/13.0/desktop, gcc-4.7.3, glibc-2.17, 3.11.1-gentoo x86_64)                                   
=================================================================                                                               
System uname: Linux-3.11.1-gentoo-x86_64-Intel-R-_Core-TM-_i7-3517U_CPU_@_1.90GHz-with-gentoo-2.2
KiB Mem:     7776892 total,   5800524 free
KiB Swap:    7999484 total,   7999484 free
Timestamp of tree: Fri, 27 Sep 2013 09:15:01 +0000
ld GNU ld (GNU Binutils) 2.23.2
app-shells/bash:          4.2_p45
dev-java/java-config:     2.2.0::java-overlay
dev-lang/python:          2.7.5-r2, 3.2.5-r2, 3.3.2-r2
dev-util/cmake:           2.8.11.2
dev-util/pkgconfig:       0.28
sys-apps/baselayout:      2.2
sys-apps/openrc:          0.12
sys-apps/sandbox:         2.6-r1
sys-devel/autoconf:       2.13, 2.69
sys-devel/automake:       1.9.6-r3, 1.10.3, 1.11.6, 1.12.6, 1.13.4, 1.14
sys-devel/binutils:       2.23.2
sys-devel/gcc:            4.5.4, 4.6.3, 4.7.3-r1
sys-devel/gcc-config:     1.8
sys-devel/libtool:        2.4.2
sys-devel/make:           3.82-r4
sys-kernel/linux-headers: 3.11 (virtual/os-headers)
sys-libs/glibc:           2.17
Repositories: gentoo java-overlay x-portage
ACCEPT_KEYWORDS="amd64 ~amd64"
ACCEPT_LICENSE="*"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-O2 -march=native -pipe -fomit-frame-pointer"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt /usr/share/polkit-1/actions"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-O2 -march=native -pipe -fomit-frame-pointer"
DISTDIR="/usr/portage/distfiles"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync news parallel-fetch preserve-libs protect-owned sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://sunsite.cnlab-switch.ch/ftp/mirror/gentoo/ ftp://sunsite.cnlab-switch.ch/mirror/gentoo/ http://de-mirror.org/gentoo/"
LANG="en_US.UTF-8"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
MAKEOPTS="-j5"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/var/lib/layman/java-overlay /usr/local/portage"
SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage"
USE="3dnow 3dnowext X a52 aac accessibility acl acpi alsa amd64 arts avahi bash-completion berkdb bluetooth branding bzip2 cairo caps cdda cddax cddb cdparanoia cdr cli consolekit cracklib crypt css cups cxx dbus device-mapper dga dirac dns dri dts dv dvb dvd dvdnav dvdr dvdread emboss encode esd exif faac faad fam ffmpeg firefox flac fortran ftp gd gdbm gdu ggi gif gimp git gmp gnome gphoto2 gpm gstreamer gtk gtkhtml gzip h323 hal hdmi http iconv icu imagemagick imap imlib ipv6 java jce jpeg jpeg2k kde kdrive kontact lame laptop lcms ldap libnotify live lzo mad matroska mdnsresponder-compat mikmod mime mmap mmx mmxext mng modplug modules mozilla mp3 mp4 mpeg mplayer mudflap multilib mysql ncurses network networkmanager nls nptl nsplugin nss obex ogg opencore-amr opengl openmp openssl osdmenu oss otr pam pango pcmcia pcre pcsc pcsc-lite pda pdf perl php pipechan plasma png pnm policykit ppds pvr qt3 qt3support qt4 radio raw rdesktop readline real rss sasl scanner sdl secure-delete semantic-desktop session sip smartcard smp sockets spell sql sqlite sse sse2 ssl ssse3 startup-notification static-libs subversion svg tcpd theora threads tiff timidity toolame tremor truetype twolame udev udisks unicode upower usb utils v4l v4l2 vcd vnc vorbis wav wavpack webkit wifi win32codecs wmf wxwidgets x264 xanim xattr xcb xcomposite xine xinerama xml xpm xscreensaver xv xvid zeroconf zlib" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="all" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" GRUB_PLATFORMS="efi-64" INPUT_DEVICES="keyboard mouse evdev synaptics void alps" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="en de" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7" RUBY_TARGETS="ruby19 ruby18 ruby20" USERLAND="GNU" VIDEO_CARDS="fbdev intel" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
USE_PYTHON="2.7"
Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS
Comment 1 Alexander Tsoy 2013-09-30 11:01:38 UTC
2) - looks like the same problem as in bug 454746
Comment 2 Jory A. Pratt gentoo-dev 2013-09-30 13:45:42 UTC
Created attachment 359794 [details]
initramfs init script

If you see something that gives you suspsious comment and I will be more then happy to test changes.
Comment 3 Alexander Tsoy 2013-09-30 13:52:06 UTC
(In reply to Jory A. Pratt from comment #2)
> Created attachment 359794 [details]
> initramfs init script
> 
> If you see something that gives you suspsious comment and I will be more
> then happy to test changes.

You should not umount /proc, /dev and /sys in the initramfs. From the switch_root man page:
"switch_root moves already mounted /proc, /dev and /sys to newroot and makes newroot the new root filesystem and starts init process."
Comment 4 Alexander Tsoy 2013-09-30 13:59:40 UTC
(In reply to Alexander Tsoy from comment #3)
> (In reply to Jory A. Pratt from comment #2)
> > Created attachment 359794 [details]
> > initramfs init script
> > 
> > If you see something that gives you suspsious comment and I will be more
> > then happy to test changes.
> 
> You should not umount /proc, /dev and /sys in the initramfs. From the
> switch_root man page:
> "switch_root moves already mounted /proc, /dev and /sys to newroot and makes
> newroot the new root filesystem and starts init process."

And if device nodes not get created, consider using "vgscan --mknodes" as mentioned in comment 0.
Comment 5 Jory A. Pratt gentoo-dev 2013-09-30 14:37:03 UTC
(In reply to Alexander Tsoy from comment #4)
> (In reply to Alexander Tsoy from comment #3)
> > (In reply to Jory A. Pratt from comment #2)
> > > Created attachment 359794 [details]
> > > initramfs init script
> > > 
> > > If you see something that gives you suspsious comment and I will be more
> > > then happy to test changes.
> > 
> > You should not umount /proc, /dev and /sys in the initramfs. From the
> > switch_root man page:
> > "switch_root moves already mounted /proc, /dev and /sys to newroot and makes
> > newroot the new root filesystem and starts init process."
> 
> And if device nodes not get created, consider using "vgscan --mknodes" as
> mentioned in comment 0.

Even with vgscan --mknodes devices nodes are still not created, I have to do a double scan/activate in order for them to appear and be usable.
Comment 6 Alexander Tsoy 2013-09-30 15:01:18 UTC
(In reply to Jory A. Pratt from comment #5)
> Even with vgscan --mknodes devices nodes are still not created, I have to do
> a double scan/activate in order for them to appear and be usable.

Try this sequence of commands:

pvscan > /dev/null
vgscan --mknodes > /dev/null
vgchange --sysinit -ay > /dev/null
Comment 7 Jory A. Pratt gentoo-dev 2013-09-30 21:02:27 UTC
(In reply to Alexander Tsoy from comment #6)
> (In reply to Jory A. Pratt from comment #5)
> > Even with vgscan --mknodes devices nodes are still not created, I have to do
> > a double scan/activate in order for them to appear and be usable.
> 
> Try this sequence of commands:
> 
> pvscan > /dev/null
> vgscan --mknodes > /dev/null
> vgchange --sysinit -ay > /dev/null

Same failure `vgscan --mknodes` is having to be run twice before the device can be seen.
Comment 8 Markus Wernig 2013-10-01 06:19:12 UTC
(In reply to Alexander Tsoy from comment #1)
> 2) - looks like the same problem as in bug 454746

Well, not exactly. The symlinks in the running system ARE there:

# ls -l /dev/mapper
total 0
crw------- 1 root root  10, 236 Sep 29 11:07 control
brw------- 1 root root 252,   2 Sep 29 11:07 linux-gentoo_root
brw------- 1 root root 252,   0 Sep 29 11:07 linux-ubuntu_root

It's just lvm2 that fails to read the lvm partitions.

I umount /proc and /sys in my initrd script, but leave /dev mounted (not a devfs, obviously), because it's just a directory in the initrd's root file system.

But apparently udev takes care of this, as in the running system, /dev is mounted as devfs.

Should I leave /proc and /sys mounted before calling switch_root?
Comment 9 Markus Wernig 2013-10-01 06:29:09 UTC
(In reply to Markus Wernig from comment #8)

> Should I leave /proc and /sys mounted before calling switch_root?

OK, I tried that, with the following results:

- no network interfaces started (no such device)
- some kernel modules fail to load (virtualbox drivers, maybe others)
- X starts but does not accept any keyboard or mouse input and is thus unusable

Changing the initrd script back (i.e. calling "umount /proc; umount /sys" again, solves the problem.
Comment 10 Markus Wernig 2013-10-01 18:07:23 UTC
Created attachment 359924 [details]
init from initrd

Maybe the problem is not with lvm2, but with initrd?
But then, why does another lvm-Version on the same system successfully read the lvm volumes?
Comment 11 Alexander Tsoy 2013-10-03 14:03:13 UTC
(In reply to Markus Wernig from comment #10)
> Created attachment 359924 [details]
> init from initrd
> 
> Maybe the problem is not with lvm2, but with initrd?
> But then, why does another lvm-Version on the same system successfully read
> the lvm volumes?

Try mounting /dev as devtmpfs in initramfs. This way all necessary symlinks should be preserved after switch_root. This worked for reporter of bug 454746
Comment 12 Alexander Tsoy 2013-10-03 14:05:25 UTC
(In reply to Markus Wernig from comment #8)
> (In reply to Alexander Tsoy from comment #1)
> > 2) - looks like the same problem as in bug 454746
> 
> Well, not exactly. The symlinks in the running system ARE there:
> 
> # ls -l /dev/mapper
> total 0
> crw------- 1 root root  10, 236 Sep 29 11:07 control
> brw------- 1 root root 252,   2 Sep 29 11:07 linux-gentoo_root
> brw------- 1 root root 252,   0 Sep 29 11:07 linux-ubuntu_root

/dev/mapper normally contains symlinks to "../dm-*", but you have device nodes here.
Comment 13 Samuli Suominen (RETIRED) gentoo-dev 2013-10-07 05:17:31 UTC
(In reply to Alexander Tsoy from comment #11)
> (In reply to Markus Wernig from comment #10)
> > Created attachment 359924 [details]
> > init from initrd
> > 
> > Maybe the problem is not with lvm2, but with initrd?
> > But then, why does another lvm-Version on the same system successfully read
> > the lvm volumes?
> 
> Try mounting /dev as devtmpfs in initramfs. This way all necessary symlinks
> should be preserved after switch_root. This worked for reporter of bug 454746

Not only the initramfs should have /dev with devtmpfs but it should use udev which makes it mandatory in any case.
Comment 14 Markus Wernig 2013-10-13 18:00:03 UTC
I'm sorry, but for all I can find out, this really IS a problem in lvm2.
Or in switch_root, the kernel, or somewhere. I know that this is not a support forum, but for me this is not a pebcak. I would still very much appreciate any help.


I now have changed my init script in initramfs:

#!/bin/sh

mount -t proc none /proc
CMDLINE='cat /proc/cmdline'
mount -t sysfs none /sys
mount -t devtmpfs none /dev
[... skipped irrelevant stuff]

# lvm - commands really need to be executed in that order, else no devices are 
# created
/bin/lvm vgscan >/dev/null 2>&1
/bin/lvm vgchange -ay linux || rescue_shell "lvm vgchange -ay linux"
/bin/vgscan --mknodes || rescue_shell "vgscan --mknodes"

ls -l /dev/mapper
sleep 10

#root filesystem
mount -t ext4 -r /dev/mapper/linux-gentoo_root /newroot || rescue_shell                                                                                                                            
ls -l /dev/mapper
sleep 10

# unmount pseudo FS - else many devices are missing in the booted
# system afterwards
umount /proc
umount /sys
umount /dev

#root switch
exec /bin/busybox switch_root /newroot /sbin/init ${CMDLINE}

-----

This gives me a working system, but still the original problem persists:

# lvm vgscan
  Reading all physical volumes.  This may take a while...
  No volume groups found

# lvm pvscan
  No matching physical volumes found


The annoying effect of this is that I am no longer able to manage any lvm devices.
/sbin/lvm.static gives the same result.

-----

When watching the output from the above init script during boot, I see the message
"Found volume group "linux", using metadata format lvm2" (from memory)

The "ls -l /dev/mapper" during the init script gives the exacty same output as in my running system afterwards (not sure about the "control"):

# ls -l /dev/mapper
total 0
crw------- 1 root root  10, 236 Oct 13 19:39 control
brw------- 1 root root 252,   2 Oct 13 19:40 linux-gentoo_root
brw------- 1 root root 252,   3 Oct 13 19:40 linux-home
brw------- 1 root root 252,   1 Oct 13 19:39 linux-swap_1
brw------- 1 root root 252,   0 Oct 13 19:40 linux-ubuntu_root

So it seems that lvm (or the kernel via devtmpfs?) creates the devices as such, and not as symlinks.

-----

On the same system, same running kernel, an older version of the lvm2 tools (from Ubuntu) DOES see the devices. So I would rather not assume it's the kernel.

Please let me know if you need more info.

thx /markus
Comment 15 Markus Wernig 2013-10-13 18:32:20 UTC
Ok, my bad. Pebcak after all ... :-[

I had the following in lvm.conf:

filter = [ "r|/dev/nbd.*|", "a|/dev/sd.*/|", "r/.*/" ]

Removing the typo solved the "problem"
filter = [ "r|/dev/nbd.*|", "a|/dev/sd.*|", "r/.*/" ]

# lvm pvscan
  PV /dev/sda3   VG linux   lvm2 [238.05 GiB / 0    free]
  Total: 1 [238.05 GiB] / in use: 1 [238.05 GiB] / in no VG: 0 [0   ]
# lvm vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "linux" using metadata type lvm2

Sorry for the noise and thanks for bearing with me ...

PS: The fact that there are device nodes instead of symlinks in /dev/mapper is strange, but seems of no effect.