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_vol-
ume_list is another way to limit autoactivation.
event autoactivation
The most common form of autoactivation is "event based", in which com-
plete VGs are activated in response to uevents which occur during sys-
tem startup or at any time after the system has started. Another form
of autoactivation is "static" in which complete VGs are activated at a
fixed point during system startup by a systemd service, and not in
response to events. This can be controlled with the lvm.conf setting
event_activation.
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 baed 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
o device /dev/name with major:minor X:Y is attached to the machine
o systemd/udev runs blkid to identify /dev/name as an LVM PV
o udev rule 69-dm-lvm-metad.rules is run for /dev/name
o the lvm udev rule runs the systemd service lvm2-pvscan@X:Yservice
o the lvm2-pvscan service runs:
pvscan --cache -aay --major X --minor Y
o pvscan reads the device, records that the PV is online (see
pvs_online), and checks if the VG is complete.
o if the VG is complete, pvscan creates the vgs_online temp file, and
activates the VG.
o the activation command output can be seen from systemctl status
lvm2-pvscan*
69-dm-lvm.rules
o device /dev/name with major:minor X:Y is attached to the machine
o systemd/udev runs blkid to identify /dev/name as an LVM PV
o udev rule 69-dm-lvm.rules is run for /dev/name
o the lvm udev rule runs:
pvscan --cache --listvg --checkcomplete --vgonline
--autoactivation event --udevoutput --journal=output /dev/name
o pvscan reads the device, records that the PV is online (see
pvs_online), and checks if the VG is complete.
o 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'
o if the lvm udev rule sees LVM_VG_NAME_COMPLETE from pvscan, it acti-
vates the VG using a transient systemd service named lvm-acti-
vate-<vgname>.
o the lvm-activate-<vgname> service runs
vgchange -aay --autoactivation event <vgname>
o 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 --checkcom-
plete 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 infor-
mation. 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 acti-
vated.
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
When event autoactivation is disabled by setting lvm.conf event_activa-
tion=0, autoactivation is performed at one or more static points during
system startup. At these points, a vgchange -aay command is run to
activate complete VGs from devices that are present on the system at
that time. pvscan commands (and lvm2-pvscan services) do not perform
autoactivation in this mode. pvscan commands may still be run from
uevents but will do nothing when they read the event_activation=0 set-
ting.
The static vgchange -aay commands are run by three systemd services at
three points during startup: lvm2-activation-early, lvm2-activation,
and lvm2-activation-net. These static activation services are "gener-
ated services", so the service files are created at run time by the
lvm2-activation-generator command (run by systemd). lvm2-activa-
tion-generator creates the services if lvm.conf event_activation=0.
The limitation of this method is that devices may not be attached to
the system (or set up) at a reliable point in time during startup, and
they may not be present when the services run vgchange. In this case,
the VGs will not be autoactivated. So, the timing of device attach-
ment/setup determines whether static autoactivation will produce the
same results as event autoactivation. For this reason, static autoac-
tivation is not recommended.
Sometimes, static autoactivation is mistakenly expected to disable all
autoactivation of particular VGs. This may appear to be effective if
those VGs are slow to be attached or set up. But, the only correct and
reliable way to disable autoactivation is using vgchange/lvchange
--setautoactivation n, or lvm.conf auto_activation_volume_list.
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
Red Hat, Inc LVM TOOLS 2.03.14(2)-RHEL8 (2021-10-20LVMAUTOACTIVATION(7)