mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
pvscan: add --activate ay option (autoactivate)
Define auto_activation_handler that activates VGs/LVs automatically based on the activation/auto_activation_volume_list (activating all volumes by default if the list is not defined). The autoactivation is done within the pvscan call in 69-dm-lvmetad.rules that watches for udev events (device appearance/removal). For now, this works for non-clustered and complete VGs only.
This commit is contained in:
parent
215a314f19
commit
d2df8dddc8
@ -1,5 +1,6 @@
|
||||
Version 2.02.97 -
|
||||
===============================
|
||||
Add --activate ay to pvscan.
|
||||
Add --activate ay to vgchange.
|
||||
Add support for volume autoactivation using lvmetad.
|
||||
Add --activate synonym for --available arg and prefer --activate.
|
||||
|
@ -671,6 +671,7 @@ xx(pvscan,
|
||||
"List all physical volumes",
|
||||
PERMITTED_READ_ONLY,
|
||||
"pvscan " "\n"
|
||||
"\t[-a|--activate ay]\n"
|
||||
"\t[--cache [ DevicePath | --major major --minor minor]...]\n"
|
||||
"\t[-d|--debug] " "\n"
|
||||
"\t{-e|--exported | -n|--novolumegroup} " "\n"
|
||||
@ -682,7 +683,8 @@ xx(pvscan,
|
||||
"\t[-v|--verbose] " "\n"
|
||||
"\t[--version]\n",
|
||||
|
||||
cache_ARG, exported_ARG, ignorelockingfailure_ARG, major_ARG, minor_ARG,
|
||||
activate_ARG, available_ARG, cache_ARG, exported_ARG,
|
||||
ignorelockingfailure_ARG, major_ARG, minor_ARG,
|
||||
novolumegroup_ARG, partial_ARG, short_ARG, uuid_ARG)
|
||||
|
||||
xx(segtypes,
|
||||
|
@ -97,6 +97,20 @@ static void _pvscan_display_single(struct cmd_context *cmd,
|
||||
pv_pe_size(pv)));
|
||||
}
|
||||
|
||||
static int _auto_activation_handler(struct volume_group *vg, int partial, int activate)
|
||||
{
|
||||
/* TODO: add support for partial and clustered VGs */
|
||||
if (partial || vg_is_clustered(vg))
|
||||
return 1;
|
||||
|
||||
if (!vgchange_activate(vg->cmd, vg, activate)) {
|
||||
log_error("%s: autoactivation failed.", vg->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int _pvscan_lvmetad_all_devs(struct cmd_context *cmd, activation_handler handler)
|
||||
{
|
||||
struct dev_iter *iter;
|
||||
@ -136,6 +150,14 @@ static int _pvscan_lvmetad(struct cmd_context *cmd, int argc, char **argv)
|
||||
char *buf;
|
||||
activation_handler handler = NULL;
|
||||
|
||||
if (arg_count(cmd, activate_ARG)) {
|
||||
if (arg_uint_value(cmd, activate_ARG, CHANGE_AAY) != CHANGE_AAY) {
|
||||
log_error("Only --activate ay allowed with pvscan.");
|
||||
return 0;
|
||||
}
|
||||
handler = _auto_activation_handler;
|
||||
}
|
||||
|
||||
if (arg_count(cmd, major_ARG) + arg_count(cmd, minor_ARG))
|
||||
devno_args = 1;
|
||||
|
||||
@ -241,6 +263,11 @@ int pvscan(struct cmd_context *cmd, int argc, char **argv)
|
||||
if (arg_count(cmd, cache_ARG))
|
||||
return _pvscan_lvmetad(cmd, argc, argv);
|
||||
|
||||
if (arg_count(cmd, activate_ARG)) {
|
||||
log_error("--activate is only valid with --cache.");
|
||||
return EINVALID_CMD_LINE;
|
||||
}
|
||||
|
||||
if (arg_count(cmd, major_ARG) + arg_count(cmd, minor_ARG)) {
|
||||
log_error("--major and --minor are only valid with --cache.");
|
||||
return EINVALID_CMD_LINE;
|
||||
|
@ -21,6 +21,6 @@ SUBSYSTEM!="block", GOTO="lvm_end"
|
||||
KERNEL=="dm-[0-9]*", ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="lvm_end"
|
||||
|
||||
# Only process devices already marked as a PV - this requires blkid to be called before.
|
||||
ENV{ID_FS_TYPE}=="LVM2_member|LVM1_member", RUN+="(LVM_EXEC)/lvm pvscan --cache --major $major --minor $minor"
|
||||
ENV{ID_FS_TYPE}=="LVM2_member|LVM1_member", RUN+="(LVM_EXEC)/lvm pvscan --cache --activate ay --major $major --minor $minor"
|
||||
|
||||
LABEL="lvm_end"
|
||||
|
Loading…
Reference in New Issue
Block a user