the _online_pvscan_one cost too much time when booting. It mainly job is to create file in /run/lvm/pvs_online, which role is to replace lvmetad. when comment out _online_pvscan_one, below folders are blank /run/lvm/pvs_online & /run/lvm/vgs_online I am not familiar with vg metadata layout. I GUESS the vg metadata is recorded on the first PV dev of PVs group devs. So the _online_pv_found job just use the vg metadata info to find/print whether or not this vg is ready. this part code cost time & less useful when system boot. Or in another word, this part code is not necessary for online vg/lv. ```c _online_pv_found() { _online_pvid_file_create // call open() to create "/run/lvm/pvs_online/xx" ... ... //zhm: below code just count the not online PV number. dm_list_iterate_items(pvl, &vg->pvs) { if (!_online_pvid_file_exists((const char *)&pvl->pv->id.uuid)) pvids_not_online++; /* Check if one of the devs on the command line is in this VG. */ if (dev_args && dev_in_device_list(pvl->pv->dev, dev_args)) dev_args_in_vg = 1; } } ``` the core/key code for online lvs is _pvscan_aa(): _pvscan_aa +-> _pvscan_aa_direct | vgchange_activate | or | +-> process_each_vg //this func can work without reading /run/lvm/pvs_online/xx _pvscan_aa_single vgchange_activate So my first patch partly backout commit 25b58310e3d6. To use process_each_vg active lvs, this func can work without reading /run/lvm/pvs_online/xx. For the _pvscan_aa_direct(), I don't totally understand it. I need some time to dig it. On 9/6/19 2:51 PM, Martin Wilck wrote: > On Fri, 2019-09-06 at 05:01 +0000, Heming Zhao wrote: >> I just tried to only apply below patch (didn't partly backout commit >> 25b58310e3). >> The attrs of lvs output still have 'a' bit. >> >> ```patch >> +#if 0 >> if (!_online_pvscan_one(cmd, dev, NULL, >> complete_vgnames, saved_vgs, 0, &pvid_without_metadata)) >> add_errors++; >> +#endif > > > IIUC this would mean that you skip David's "pvs_online" file generation > entirely. How did the auto-activation happen, then? > >> ``` >> >> the output of "systemd-analysis blame | head -n 10": >> ``` >> 59.279s systemd-udev-settle.service >> 39.979s dracut-initqueue.service >> 1.676s lvm2-activation-net.service > > Could it be that lvm2-activation-net.service activated the VGs? I can > imagine that that would be efficient, because when this service runs > late in the boot process, I'd expect all PVs to be online, so > everything can be activated in a single big swoop. Unfortunately, this > wouldn't work in general, as it would be too late for booting from LVM > volumes. > > However I thought all lvm2-acticvation... services were gone with LVM > 2.03? > > Regards > Martin > > _______________________________________________ linux-lvm mailing list linux-lvm@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/linux-lvm read the LVM HOW-TO at http://tldp.org/HOWTO/LVM-HOWTO/