Bug#593375: udev: Doesnt create lvm symlinks
Marco d'Itri
md at Linux.IT
Thu Aug 19 17:29:57 UTC 2010
clone 593375 -1
retitle -1 LVM needs to be updated for modern udev releases
reassign -1 lvm2
severity 593375 critical
thanks
Please let me know your plans about this, I need to upload a new udev
package with a fix.
The udev package will need a Breaks directive and lvm needs to change
the init script and rules as described here.
Or else I will have to revert the change, but I'd rather not have to.
On Aug 19, Peter Rajnoha <prajnoha at redhat.com> wrote:
> On 08/18/2010 10:54 AM +0100, Marco d'Itri wrote:
> > After I started not deleting the initramfs database as you asked,
> > I received multiple bug reports like this one.
> > Version of LVM in Debian is 2.02.66-2, please advise.
> >
> >> After upgrade from 160 to 161, udev doesnt create lvm volumes symlinks any more.
> >> Here is the related part of the boot log:
> >> Tue Aug 17 09:05:00 2010: The link /dev/vg00/root_lv should had been created
> >> by udev but it was not found. Falling back to direct link creation.
>
> OK, here's what happens:
>
> 1. the LV with root fs is activated in initrd and udev database is filled.
>
> 2. root fs is mounted
>
> 3. /etc/init.d/udev script is running (keeping the udev db from initrd), calling:
> /sbin/udevadm trigger --action=add
>
> Since udev db now contains records about devices including dm devices and since
> the version of the rules used in Debian does not contain everything that's needed
> for proper support of synthesized events, the ADD event generated by udev script's
> trigger will be ignored instead of being detected and used.
>
> (symlinks for dm devices are created only after the CHANGE event, unless there's
> a support for synthesized ADD events which we added later)
>
> But ignoring events in udev rules means removing any existing symlinks! This will
> remove any existing /dev/<vgname>/<lvname> symlinks.
>
> The missing parts are these:
>
> IMPORT{db}="DM_UDEV_PRIMARY_SOURCE_FLAG"
>
> and
>
> ACTION=="add", ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", GOTO="dm_disable"
>
> (instead of ACTION=="add", ENV{STARTUP}!="1", NAME="", GOTO="dm_end")
>
> These changes are all in new upstream release of lvm2/libdevmapper though.
> (Anyway, the NAME="" shouldn't be used anymore - it's deprecated as well now)
>
>
> This problem did not occur/was not revealed before the change in udev init
> script (keeping the udev db) because of the obscure situation actually:
>
> - the /dev was populated in initrd
>
> - the udev database was cleared though
>
> - /dev/<vgname>/<lvname> symlinks remained because when running initial
> udevadm trigger --action=add in udev init script, there was no udev database.
> We ignored the ADD event, but since there was no udev database record, udevd
> didn't know about symlinks already created and so it kept any existing ones.
> That's the reason why "vgscan --mknodes" did not warn about anything before
> the change...
>
> 3. /etc/init.d/lvm2 script is running, calling:
>
> /sbin/vgscan --ignorelockingfailure --mknodes
>
> The "--mknodes" shouldn't be used actually when we use udev with lvm2/libdevmapper.
> Since we have udev support enabled, we expect that the symlinks are created by udev
> itself. If we detect that they're missing, we issue a warning message and fallback
> to direct link creation.
>
> Maybe:
>
> "udevadm trigger --action=change --attr-match=dm/name
>
> or
>
> "udevadm trigger --actoin=change --sysname-match=dm-*
>
> is more appropriate here instead (I assume that would also be a nice way how to support
> even non-udev initrds if someone makes his own...).
>
>
> So, basically, the main source of the problem was the "--mknodes" parameter in that lvm2
> init hook - that udevadm trigger --action=change should be used instead.
>
> But also, I really recommend using latest upstream release with the rules that should handle
> those synthesized events properly (even the udev's initial udevadm trigger --action=ADD).
> We relied on udev init script to set the ENV{STARTUP}="1" before calling the trigger, but
> this solution was deprecated (as we discussed it more with upstream udev). So we came with
> this DM_UDEV_PRIMARY_SOURCE_FLAG checking and keeping the udev database from initrd then
> (which is a more correct solution anyway).
>
> Maybe this should be forwarded to Debian's lvm2 maintainer to make appropriate
> changes/updates.
>
> If there's any other problem, please, let me know...
>
> Peter
>
--
ciao,
Marco
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.alioth.debian.org/pipermail/pkg-lvm-maintainers/attachments/20100819/ebe4a630/attachment-0001.pgp>
More information about the pkg-lvm-maintainers
mailing list