Hide Forgot
Description of problem: We should not try to use lvmetad before the lvmetad daemon is run by lvm2-lvmetad init script while having global/use_lvmetad=1 set in lvm.conf. Otherwise any LVM command run before the lvm2-lvmetad init script will issue a warning message that could cause a user to think that something wrong is going on: "WARNING: Failed to connect to lvmetad: No such file or directory. Falling back to internal scanning." This is the case with the rc.sysinit script that calls the "vgchange -ay" command to activate existing VGs. Suggestions and possible solutions: A. That vgchange in rc.sysinit uses the "--sysinit" switch so we could probably disable lvmetad use in this case. This would *work only* with lvchange and vgchange as --sysinit is defined only for these commands. Also, the "lvmetad_init" fn that causes the warning message to appear is called before the lvm command arguments are fully initialized and processed. So it's not that straightforward. B. Just use "vgchange -ay --config 'global{use_lvmetad=0}' ..." (so a change for the "initscripts" package) C. Or this bug will get obsolete as we'll switch to using on-the-fly udev-event-based VG/LV activation as PVs appear in the system (as we have the information collected and stored by the lvmetad itself now) and so we can remove the "vgchange -ay" call in the rc.sysinit, lvmetad will take care of any activation. But what if lvmetad is disabled??? This needs some thought and discussion... (This problem appears even sooner during dracut stage, but that was resolved by using method B as dracut already changes the system-wide lvm.conf settings to better suit the initramfs, filed as bug #811129.)
I vote for A) here. I'll look into it.
Well, actually, we can't rely on the --sysinit arg. The "vgchange --sysinit" call will stay for current RHEL, but not for RHEL7 and recent Feodras (F17+) as that will become just a simple "vgchange" without --sysinit (/run is available soon in the boot process and is writeable so no need to use sysinit anymore in the script, bug #742564, I'm just about to ping Bill to change this). So maybe B is more appropriate (or whatever else that will do the job).
--sysinit exists to avoid the need for --config overrides. If we need two different behaviours of --sysinit, then introduce another --sysinit arg to distinguish them?
Hmm... thinking of it more, maybe it's not needed at all! For RHEL6, we keep the --sysinit in rc.sysinit and we could add the "ignorelvmetadfailure" case to it as already suggested in A (which would also work for dracut then). And for RHEL7+Fedora with systemd, the lvmetad daemon is started automatically by systemd on the first socket access. And all the sockets are available as the very first thing during boot in systemd environment... So, I think we could just remove the --sysinit from the new fedora-storage-init script (which has the vgchange the former rc.sysinit called) as everything should be available and/or autostarted there. So the A might probably work just fine... OK.
Created attachment 625741 [details] lvmetad_warn.diff If I understand correctly, the desired behaviour is to just suppress the warning about being unable to contact lvmetad if --sysinit is given. The attached patch implements that. Can be pulled as 35e02fe2d6fb50f2facfbe2dc6422fdc669b03c7 from http://repos.mornfall.net/lvm2/mornfall.git/ if this is indeed the desired fix.
Pushed as 28776b9526784fc3dd2ab94a4151613771c4dfda. To verify, check that, with use_lvmetad = 1 in lvm.conf: 1) lvm commands do not print "WARNING: Failed to connect to lvmetad..." on bootup 2) lvm commands print a WARNING during normal system use when lvmetad is not running
(10:37:10) [root@r6-node01:~]$ lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv_root VolGroup -wi-ao--- 7.54g lv_swap VolGroup -wi-ao--- 1.97g auto_lv vg -wi-a---- 20.00m (10:37:18) [root@r6-node01:~]$ service lvm2-lvmetad stop [ OK ]g LVM metadata daemon to exit: [ OK ] (10:37:25) [root@r6-node01:~]$ lvs WARNING: Failed to connect to lvmetad: No such file or directory. Falling back to internal scanning. LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv_root VolGroup -wi-ao--- 7.54g lv_swap VolGroup -wi-ao--- 1.97g auto_lv vg -wi-a---- 20.00m (10:37:26) [root@r6-node01:~]$ No warning was displayed during the boot up sequence. Tested with: lvm2-2.02.98-9.el6.x86_64
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. http://rhn.redhat.com/errata/RHBA-2013-0501.html