lvmautoactivation(7) — Linux manual page
LVMAUTOACTIVATION(7) LVMAUTOACTIVATION(7)
NAME
lvmautoactivation — LVM autoactivation
DESCRIPTION
Autoactivation is the activation of LVs performed automatically
by the system in response to LVM devices being attached to the
machine. When all PVs in a VG have been attached, the VG is
complete, and LVs in the VG are activated.
Autoactivation of VGs, or specific LVs, can be prevented using
vgchange or lvchange --setautoactivation n. The lvm.conf
auto_activation_volume_list is another way to limit
autoactivation.
event autoactivation
LVM autoactivation is "event based", in which complete VGs are
activated in response to uevents which occur during system
startup or at any time after the system has started. An old form
of autoactivation was "static" in which complete VGs are
activated at a fixed point during system startup by a systemd
service, and not in response to events.
Event based autoactivation is driven by udev, udev rules, and
systemd. When a device is attached to a machine, a uevent is
generated by the kernel to notify userspace of the new device.
systemd-udev runs udev rules to process the new device. Udev
rules use blkid to identify the device as an LVM PV and then
execute the lvm-specific udev rule for the device, which triggers
autoactivation.
There are two variations of event based autoactivation that may
be used on a system, depending on the LVM udev rule that is
installed (found in /lib/udev/rules.d/.) The following
summarizes the steps in each rule which lead to autoactivation:
69-dm-lvm-metad.rules
• device /dev/name with major:minor X:Y is attached to the
machine
• systemd/udev runs blkid to identify /dev/name as an LVM PV
• udev rule 69-dm-lvm-metad.rules is run for /dev/name
• the lvm udev rule runs the systemd service
lvm2-pvscan@X:Yservice
• the lvm2-pvscan service runs:
pvscan --cache -aay --major X --minor Y
• pvscan reads the device, records that the PV is online (see
pvs_online), and checks if the VG is complete.
• if the VG is complete, pvscan creates the vgs_online temp file,
and activates the VG.
• the activation command output can be seen from systemctl status
lvm2-pvscan*
69-dm-lvm.rules
• device /dev/name with major:minor X:Y is attached to the
machine
• systemd/udev runs blkid to identify /dev/name as an LVM PV
• udev rule 69-dm-lvm.rules is run for /dev/name
• the lvm udev rule runs:
pvscan --cache --listvg --checkcomplete --vgonline
--autoactivation event --udevoutput --journal=output /dev/name
• pvscan reads the device, records that the PV is online (see
pvs_online), and checks if the VG is complete.
• if the VG is complete, pvscan creates the vgs_online temp file,
and prints the name of the VG for the udev rule to import:
LVM_VG_NAME_COMPLETE='vgname'
• if the lvm udev rule sees LVM_VG_NAME_COMPLETE from pvscan, it
activates the VG using a transient systemd service named lvm-
activate-<vgname>.
• the lvm-activate-<vgname> service runs
vgchange -aay --autoactivation event <vgname>
• the activation command output can be seen from journalctl -u
lvm-activate-<vgname>
pvscan options
--cache
Read the <device> arg (and only that device), and record that the
PV is online by creating the /run/lvm/pvs_online/<pvid> file
containing the name of the VG and the device for the PV.
-aay
Activate the VG from the pvscan command (includes implicit
--checkcomplete and --vgonline.)
--checkcomplete
Check if the VG is complete, i.e. all PVs are present on the
system, by checking /run/lvm/pvs_online/<pvid> files.
--vgonline
Create /run/lvm/vgs_online/<vgname> if the VG is complete (used
to ensure only one command performs activation.)
--autoactivation event
Inform the command it is used for event based autoactivation.
--listvg
Print the name of the VG using the device.
--udevoutput
Only print output that can be imported to the udev rule, using
the udev environment key format, i.e. NAME='value'.
--journal=output
Send standard command output to the journal (when stdout is
reserved for udev output.)
run files
Autoactivation commands use a number of temp files in /run/lvm
(with the expectation that /run is cleared between boots.)
pvs_online
pvscan --cache creates a file here for each PV that is attached.
The file is named with the PVID and contains the VG name and
device information. The existence of the file is used to
determine when all PVs for a given VG are present. The device
information in these files is also used to optimize locating
devices for a VG when the VG is activated.
pvs_lookup
pvscan --cache creates a file here named for a VG (if one doesn't
already exist.) The file contains a list of PVIDs in the VG.
This is needed when a PV is processed which has no VG metadata,
in which case the list of PVIDs from the lookup file is used to
check if the VG is complete.
vgs_online
The first activation command (pvscan or vgchange) to create a
file here, named for the VG, will activate the VG. This resolves
a race when concurrent commands attempt to activate a VG at once.
static autoactivation
A static autoactivation method is no longer provided by lvm.
Setting event_activation=0 still disables event based
autoactivation. WARNING: disabling event activation without an
alternative may prevent a system from booting. A custom systemd
service could be written to run autoactivation during system
startup, in which case disabling event autoactivation may be
useful.
lvm.conf filter
Device symlinks from /dev/disk/ can be used in the lvm.conf
filter to guard against changes in kernel device names. The
/dev/disk/by-path/ or /dev/disk/by-id/ prefixes should be
included in the filter names; these prefixes help lvm detect that
symlink names are used. Filters containing symlinks require
special matching by commands run in the lvm udev rule.
Common symlinks, e.g. beginning with wwn-, scsi-, pci-, or lvm-
pv-uuid-, are recommended. Uncommon or custom symlinks created
by custom udev rules may be less reliable. If a custom udev rule
creates symlinks used in the lvm filter, then the udev rule
should be started prior to the lvm rule.
EXAMPLES
VG "vg" contains two PVs:
$ pvs -o name,vgname,uuid /dev/sdb /dev/sdc
PV VG PV UUID
/dev/sdb vg 1uKpaT-lFOZ-NLHX-j4jI-OBi1-QpdE-HZ5hZY
/dev/sdc vg 5J3tM8-aIPe-2vbd-DBe7-bvRq-TGj0-DaKV2G
use of --cache:
$ pvscan --cache /dev/sdb
pvscan[12922] PV /dev/sdb online.
$ pvscan --cache /dev/sdc
pvscan[12923] PV /dev/sdc online.
$ cat /run/lvm/pvs_online/1uKpaTlFOZNLHXj4jIOBi1QpdEHZ5hZY
8:16
vg:vg
dev:/dev/sdb
$ cat /run/lvm/pvs_online/5J3tM8aIPe2vbdDBe7bvRqTGj0DaKV2G
8:32
vg:vg
dev:/dev/sdc
use of -aay:
$ pvscan --cache -aay /dev/sdb
pvscan[12935] PV /dev/sdb online, VG vg incomplete (need 1).
$ pvscan --cache -aay /dev/sdc
pvscan[12936] PV /dev/sdc online, VG vg is complete.
pvscan[12936] VG vg run autoactivation.
1 logical volume(s) in volume group "vg" now active
$ cat /run/lvm/pvs_online/1uKpaTlFOZNLHXj4jIOBi1QpdEHZ5hZY
8:16
vg:vg
dev:/dev/sdb
$ cat /run/lvm/pvs_online/5J3tM8aIPe2vbdDBe7bvRqTGj0DaKV2G
8:32
vg:vg
dev:/dev/sdc
$ ls /run/lvm/vgs_online/vg
/run/lvm/vgs_online/vg
use of --listvg:
$ pvscan --cache --listvg /dev/sdb
VG vg
$ pvscan --cache --listvg /dev/sdc
VG vg
$ cat /run/lvm/pvs_online/1uKpaTlFOZNLHXj4jIOBi1QpdEHZ5hZY
8:16
vg:vg
dev:/dev/sdb
$ cat /run/lvm/pvs_online/5J3tM8aIPe2vbdDBe7bvRqTGj0DaKV2G
8:32
vg:vg
dev:/dev/sdc
use of --checkcomplete:
$ pvscan --cache --listvg --checkcomplete --vgonline /dev/sdb
pvscan[12996] PV /dev/sdb online, VG vg incomplete (need 1).
VG vg incomplete
$ pvscan --cache --listvg --checkcomplete --vgonline /dev/sdc
pvscan[12997] PV /dev/sdc online, VG vg is complete.
VG vg complete
use of --udevoutput:
$ pvscan --cache --listvg --checkcomplete --vgonline --udevoutput /dev/sdb
LVM_VG_NAME_INCOMPLETE='vg'
$ pvscan --cache --listvg --checkcomplete --vgonline --udevoutput /dev/sdc
LVM_VG_NAME_COMPLETE='vg'
use of --listlvs:
$ lvs -o name,devices vg
LV Devices
lvol0 /dev/sdb(0)
lvol1 /dev/sdc(0)
lvol2 /dev/sdb(1),/dev/sdc(1)
$ pvscan --cache --listlvs --checkcomplete /dev/sdb
pvscan[13288] PV /dev/sdb online, VG vg incomplete (need 1).
VG vg incomplete
LV vg/lvol0 complete
LV vg/lvol2 incomplete
$ pvscan --cache --listlvs --checkcomplete /dev/sdc
pvscan[13289] PV /dev/sdc online, VG vg is complete.
VG vg complete
LV vg/lvol1 complete
LV vg/lvol2 complete
COLOPHON
This page is part of the lvm2 (Logical Volume Manager 2) project.
Information about the project can be found at
⟨http://www.sourceware.org/lvm2/⟩. If you have a bug report for
this manual page, see ⟨https://github.com/lvmteam/lvm2/issues⟩.
This page was obtained from the project's upstream Git repository
⟨git://sourceware.org/git/lvm2.git⟩ on 2024-06-14. (At that
time, the date of the most recent commit that was found in the
repository was 2024-06-11.) If you discover any rendering
problems in this HTML version of the page, or you believe there
is a better or more up-to-date source for the page, or you have
corrections or improvements to the information in this COLOPHON
(which is not part of the original manual page), send a mail to
man-pages@man7.org
Red Hat, Inc LVM TOOLS 2.03.25(2)-git (2024-05-1L6V)MAUTOACTIVATION(7)
Pages that refer to this page: lvchange(8), lvconvert(8), lvcreate(8), lvdisplay(8), lvextend(8), lvm(8), lvmconfig(8), lvmdevices(8), lvmdiskscan(8), lvm-fullreport(8), lvm-lvpoll(8), lvreduce(8), lvremove(8), lvrename(8), lvresize(8), lvs(8), lvscan(8), pvchange(8), pvck(8), pvcreate(8), pvdisplay(8), pvmove(8), pvremove(8), pvresize(8), pvs(8), pvscan(8), vgcfgbackup(8), vgcfgrestore(8), vgchange(8), vgck(8), vgconvert(8), vgcreate(8), vgdisplay(8), vgexport(8), vgextend(8), vgimport(8), vgimportclone(8), vgimportdevices(8), vgmerge(8), vgmknodes(8), vgreduce(8), vgremove(8), vgrename(8), vgs(8), vgscan(8), vgsplit(8)