parent
2c679a2347
commit
d6007b1890
@ -1,630 +0,0 @@
|
||||
From 2159c817d3c659086842d286dd70342223555384 Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Tue, 16 Mar 2021 09:51:41 -0500
|
||||
Subject: [PATCH 01/11] config: comment all default settings
|
||||
|
||||
---
|
||||
lib/config/config_settings.h | 174 +++++++++++++++++++++----------------------
|
||||
1 file changed, 87 insertions(+), 87 deletions(-)
|
||||
|
||||
diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h
|
||||
index fa87bea..9cf73ce 100644
|
||||
--- a/lib/config/config_settings.h
|
||||
+++ b/lib/config/config_settings.h
|
||||
@@ -205,7 +205,7 @@ cfg_section(local_CFG_SECTION, "local", root_CFG_SECTION, 0, vsn(2, 2, 117), 0,
|
||||
"# Please take care that each setting only appears once if uncommenting\n" \
|
||||
"# example settings in this file and never copy this file between hosts.\n\n"
|
||||
|
||||
-cfg(config_checks_CFG, "checks", config_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(2, 2, 99), NULL, 0, NULL,
|
||||
+cfg(config_checks_CFG, "checks", config_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 1, vsn(2, 2, 99), NULL, 0, NULL,
|
||||
"If enabled, any LVM configuration mismatch is reported.\n"
|
||||
"This implies checking that the configuration key is understood by\n"
|
||||
"LVM and that the value of the key is the proper type. If disabled,\n"
|
||||
@@ -213,22 +213,22 @@ cfg(config_checks_CFG, "checks", config_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(2,
|
||||
"without any warning (a message about the configuration key not being\n"
|
||||
"found is issued in verbose mode only).\n")
|
||||
|
||||
-cfg(config_abort_on_errors_CFG, "abort_on_errors", config_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2,2,99), NULL, 0, NULL,
|
||||
+cfg(config_abort_on_errors_CFG, "abort_on_errors", config_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(2,2,99), NULL, 0, NULL,
|
||||
"Abort the LVM process if a configuration mismatch is found.\n")
|
||||
|
||||
-cfg_runtime(config_profile_dir_CFG, "profile_dir", config_CFG_SECTION, CFG_DISALLOW_INTERACTIVE, CFG_TYPE_STRING, vsn(2, 2, 99), 0, NULL,
|
||||
+cfg_runtime(config_profile_dir_CFG, "profile_dir", config_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_DISALLOW_INTERACTIVE, CFG_TYPE_STRING, vsn(2, 2, 99), 0, NULL,
|
||||
"Directory where LVM looks for configuration profiles.\n")
|
||||
|
||||
-cfg(devices_dir_CFG, "dir", devices_CFG_SECTION, CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_DEV_DIR, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(devices_dir_CFG, "dir", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_DEV_DIR, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Directory in which to create volume group device nodes.\n"
|
||||
"Commands also accept this as a prefix on volume group names.\n")
|
||||
|
||||
-cfg_array(devices_scan_CFG, "scan", devices_CFG_SECTION, CFG_ADVANCED, CFG_TYPE_STRING, "#S/dev", vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg_array(devices_scan_CFG, "scan", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ADVANCED, CFG_TYPE_STRING, "#S/dev", vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Directories containing device nodes to use with LVM.\n")
|
||||
|
||||
cfg_array(devices_loopfiles_CFG, "loopfiles", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED | CFG_UNSUPPORTED, CFG_TYPE_STRING, NULL, vsn(1, 2, 0), NULL, vsn(2, 3, 0), NULL, NULL)
|
||||
|
||||
-cfg(devices_obtain_device_list_from_udev_CFG, "obtain_device_list_from_udev", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV, vsn(2, 2, 85), NULL, 0, NULL,
|
||||
+cfg(devices_obtain_device_list_from_udev_CFG, "obtain_device_list_from_udev", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV, vsn(2, 2, 85), NULL, 0, NULL,
|
||||
"Obtain the list of available devices from udev.\n"
|
||||
"This avoids opening or using any inapplicable non-block devices or\n"
|
||||
"subdirectories found in the udev directory. Any device node or\n"
|
||||
@@ -237,7 +237,7 @@ cfg(devices_obtain_device_list_from_udev_CFG, "obtain_device_list_from_udev", de
|
||||
"directories will be scanned fully. LVM needs to be compiled with\n"
|
||||
"udev support for this setting to apply.\n")
|
||||
|
||||
-cfg(devices_external_device_info_source_CFG, "external_device_info_source", devices_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_EXTERNAL_DEVICE_INFO_SOURCE, vsn(2, 2, 116), NULL, 0, NULL,
|
||||
+cfg(devices_external_device_info_source_CFG, "external_device_info_source", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_EXTERNAL_DEVICE_INFO_SOURCE, vsn(2, 2, 116), NULL, 0, NULL,
|
||||
"Enable device information from udev.\n"
|
||||
"If set to \"udev\", lvm will supplement its own native device information\n"
|
||||
"with information from libudev. This can potentially improve the detection\n"
|
||||
@@ -360,12 +360,12 @@ cfg_array(devices_types_CFG, "types", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED
|
||||
"types = [ \"fd\", 16 ]\n"
|
||||
"#\n")
|
||||
|
||||
-cfg(devices_sysfs_scan_CFG, "sysfs_scan", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SYSFS_SCAN, vsn(1, 0, 8), NULL, 0, NULL,
|
||||
+cfg(devices_sysfs_scan_CFG, "sysfs_scan", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_SYSFS_SCAN, vsn(1, 0, 8), NULL, 0, NULL,
|
||||
"Restrict device scanning to block devices appearing in sysfs.\n"
|
||||
"This is a quick way of filtering out block devices that are not\n"
|
||||
"present on the system. sysfs must be part of the kernel and mounted.)\n")
|
||||
|
||||
-cfg(devices_scan_lvs_CFG, "scan_lvs", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SCAN_LVS, vsn(2, 2, 182), NULL, 0, NULL,
|
||||
+cfg(devices_scan_lvs_CFG, "scan_lvs", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_SCAN_LVS, vsn(2, 2, 182), NULL, 0, NULL,
|
||||
"Scan LVM LVs for layered PVs, allowing LVs to be used as PVs.\n"
|
||||
"When 1, LVM will detect PVs layered on LVs, and caution must be\n"
|
||||
"taken to avoid a host accessing a layered VG that may not belong\n"
|
||||
@@ -378,14 +378,14 @@ cfg(devices_scan_lvs_CFG, "scan_lvs", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEF
|
||||
"an LV. The LVs are ignored using a built in device filter that\n"
|
||||
"identifies and excludes LVs.\n")
|
||||
|
||||
-cfg(devices_multipath_component_detection_CFG, "multipath_component_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MULTIPATH_COMPONENT_DETECTION, vsn(2, 2, 89), NULL, 0, NULL,
|
||||
+cfg(devices_multipath_component_detection_CFG, "multipath_component_detection", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_MULTIPATH_COMPONENT_DETECTION, vsn(2, 2, 89), NULL, 0, NULL,
|
||||
"Ignore devices that are components of DM multipath devices.\n")
|
||||
|
||||
cfg(devices_multipath_wwids_file_CFG, "multipath_wwids_file", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ALLOW_EMPTY, CFG_TYPE_STRING, DEFAULT_WWIDS_FILE, vsn(2, 3, 13), NULL, 0, NULL,
|
||||
"The path to the multipath wwids file used for multipath component detection.\n"
|
||||
"Set this to an empty string to disable the use of the multipath wwids file.\n")
|
||||
|
||||
-cfg(devices_md_component_detection_CFG, "md_component_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MD_COMPONENT_DETECTION, vsn(1, 0, 18), NULL, 0, NULL,
|
||||
+cfg(devices_md_component_detection_CFG, "md_component_detection", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_MD_COMPONENT_DETECTION, vsn(1, 0, 18), NULL, 0, NULL,
|
||||
"Enable detection and exclusion of MD component devices.\n"
|
||||
"An MD component device is a block device that MD uses as part\n"
|
||||
"of a software RAID virtual device. When an LVM PV is created\n"
|
||||
@@ -411,12 +411,12 @@ cfg(devices_md_component_checks_CFG, "md_component_checks", devices_CFG_SECTION,
|
||||
" This requires an extra read at the end of devices.\n"
|
||||
"#\n")
|
||||
|
||||
-cfg(devices_fw_raid_component_detection_CFG, "fw_raid_component_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_FW_RAID_COMPONENT_DETECTION, vsn(2, 2, 112), NULL, 0, NULL,
|
||||
+cfg(devices_fw_raid_component_detection_CFG, "fw_raid_component_detection", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_FW_RAID_COMPONENT_DETECTION, vsn(2, 2, 112), NULL, 0, NULL,
|
||||
"Ignore devices that are components of firmware RAID devices.\n"
|
||||
"LVM must use an external_device_info_source other than none for this\n"
|
||||
"detection to execute.\n")
|
||||
|
||||
-cfg(devices_md_chunk_alignment_CFG, "md_chunk_alignment", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MD_CHUNK_ALIGNMENT, vsn(2, 2, 48), NULL, 0, NULL,
|
||||
+cfg(devices_md_chunk_alignment_CFG, "md_chunk_alignment", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_MD_CHUNK_ALIGNMENT, vsn(2, 2, 48), NULL, 0, NULL,
|
||||
"Align the start of a PV data area with md device's stripe-width.\n"
|
||||
"This applies if a PV is placed directly on an md device.\n"
|
||||
"default_data_alignment will be overridden if it is not aligned\n"
|
||||
@@ -430,7 +430,7 @@ cfg(devices_default_data_alignment_CFG, "default_data_alignment", devices_CFG_SE
|
||||
"This setting is overridden by data_alignment and the --dataalignment\n"
|
||||
"option.\n")
|
||||
|
||||
-cfg(devices_data_alignment_detection_CFG, "data_alignment_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_DATA_ALIGNMENT_DETECTION, vsn(2, 2, 51), NULL, 0, NULL,
|
||||
+cfg(devices_data_alignment_detection_CFG, "data_alignment_detection", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_DATA_ALIGNMENT_DETECTION, vsn(2, 2, 51), NULL, 0, NULL,
|
||||
"Align the start of a PV data area with sysfs io properties.\n"
|
||||
"The start of a PV data area will be a multiple of minimum_io_size or\n"
|
||||
"optimal_io_size exposed in sysfs. minimum_io_size is the smallest\n"
|
||||
@@ -444,14 +444,14 @@ cfg(devices_data_alignment_detection_CFG, "data_alignment_detection", devices_CF
|
||||
"This setting is overridden by data_alignment and the --dataalignment\n"
|
||||
"option.\n")
|
||||
|
||||
-cfg(devices_data_alignment_CFG, "data_alignment", devices_CFG_SECTION, 0, CFG_TYPE_INT, 0, vsn(2, 2, 45), NULL, 0, NULL,
|
||||
+cfg(devices_data_alignment_CFG, "data_alignment", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 0, vsn(2, 2, 45), NULL, 0, NULL,
|
||||
"Align the start of a PV data area with this number of KiB.\n"
|
||||
"When non-zero, this setting overrides default_data_alignment.\n"
|
||||
"Set to 0 to disable, in which case default_data_alignment\n"
|
||||
"is used to align the first PE in units of MiB.\n"
|
||||
"This setting is overridden by the --dataalignment option.\n")
|
||||
|
||||
-cfg(devices_data_alignment_offset_detection_CFG, "data_alignment_offset_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_DATA_ALIGNMENT_OFFSET_DETECTION, vsn(2, 2, 50), NULL, 0, NULL,
|
||||
+cfg(devices_data_alignment_offset_detection_CFG, "data_alignment_offset_detection", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_DATA_ALIGNMENT_OFFSET_DETECTION, vsn(2, 2, 50), NULL, 0, NULL,
|
||||
"Shift the start of an aligned PV data area based on sysfs information.\n"
|
||||
"After a PV data area is aligned, it will be shifted by the\n"
|
||||
"alignment_offset exposed in sysfs. This offset is often 0, but may\n"
|
||||
@@ -461,12 +461,12 @@ cfg(devices_data_alignment_offset_detection_CFG, "data_alignment_offset_detectio
|
||||
"LBA -1, and consequently sector 63 is aligned on a 4KiB boundary).\n"
|
||||
"This setting is overridden by the --dataalignmentoffset option.\n")
|
||||
|
||||
-cfg(devices_ignore_suspended_devices_CFG, "ignore_suspended_devices", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_IGNORE_SUSPENDED_DEVICES, vsn(1, 2, 19), NULL, 0, NULL,
|
||||
+cfg(devices_ignore_suspended_devices_CFG, "ignore_suspended_devices", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_IGNORE_SUSPENDED_DEVICES, vsn(1, 2, 19), NULL, 0, NULL,
|
||||
"Ignore DM devices that have I/O suspended while scanning devices.\n"
|
||||
"Otherwise, LVM waits for a suspended device to become accessible.\n"
|
||||
"This should only be needed in recovery situations.\n")
|
||||
|
||||
-cfg(devices_ignore_lvm_mirrors_CFG, "ignore_lvm_mirrors", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_IGNORE_LVM_MIRRORS, vsn(2, 2, 104), NULL, 0, NULL,
|
||||
+cfg(devices_ignore_lvm_mirrors_CFG, "ignore_lvm_mirrors", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_IGNORE_LVM_MIRRORS, vsn(2, 2, 104), NULL, 0, NULL,
|
||||
"Do not scan 'mirror' LVs to avoid possible deadlocks.\n"
|
||||
"This avoids possible deadlocks when using the 'mirror' segment type.\n"
|
||||
"This setting determines whether LVs using the 'mirror' segment type\n"
|
||||
@@ -484,19 +484,19 @@ cfg(devices_ignore_lvm_mirrors_CFG, "ignore_lvm_mirrors", devices_CFG_SECTION, 0
|
||||
"apply to LVM RAID types like 'raid1' which handle failures in a\n"
|
||||
"different way, making them a better choice for VG stacking.\n")
|
||||
|
||||
-cfg(devices_disable_after_error_count_CFG, "disable_after_error_count", devices_CFG_SECTION, 0, CFG_TYPE_INT, 0, vsn(2, 2, 75), NULL, vsn(2, 3, 0), NULL,
|
||||
+cfg(devices_disable_after_error_count_CFG, "disable_after_error_count", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 0, vsn(2, 2, 75), NULL, vsn(2, 3, 0), NULL,
|
||||
NULL)
|
||||
|
||||
-cfg(devices_require_restorefile_with_uuid_CFG, "require_restorefile_with_uuid", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_REQUIRE_RESTOREFILE_WITH_UUID, vsn(2, 2, 73), NULL, 0, NULL,
|
||||
+cfg(devices_require_restorefile_with_uuid_CFG, "require_restorefile_with_uuid", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_REQUIRE_RESTOREFILE_WITH_UUID, vsn(2, 2, 73), NULL, 0, NULL,
|
||||
"Allow use of pvcreate --uuid without requiring --restorefile.\n")
|
||||
|
||||
-cfg(devices_pv_min_size_CFG, "pv_min_size", devices_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_PV_MIN_SIZE_KB, vsn(2, 2, 85), NULL, 0, NULL,
|
||||
+cfg(devices_pv_min_size_CFG, "pv_min_size", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_PV_MIN_SIZE_KB, vsn(2, 2, 85), NULL, 0, NULL,
|
||||
"Minimum size in KiB of block devices which can be used as PVs.\n"
|
||||
"In a clustered environment all nodes must use the same value.\n"
|
||||
"Any value smaller than 512KiB is ignored. The previous built-in\n"
|
||||
"value was 512.\n")
|
||||
|
||||
-cfg(devices_issue_discards_CFG, "issue_discards", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ISSUE_DISCARDS, vsn(2, 2, 85), NULL, 0, NULL,
|
||||
+cfg(devices_issue_discards_CFG, "issue_discards", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ISSUE_DISCARDS, vsn(2, 2, 85), NULL, 0, NULL,
|
||||
"Issue discards to PVs that are no longer used by an LV.\n"
|
||||
"Discards are sent to an LV's underlying physical volumes when the LV\n"
|
||||
"is no longer using the physical volumes' space, e.g. lvremove,\n"
|
||||
@@ -508,7 +508,7 @@ cfg(devices_issue_discards_CFG, "issue_discards", devices_CFG_SECTION, 0, CFG_TY
|
||||
"generally do. If enabled, discards will only be issued if both the\n"
|
||||
"storage and kernel provide support.\n")
|
||||
|
||||
-cfg(devices_allow_changes_with_duplicate_pvs_CFG, "allow_changes_with_duplicate_pvs", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ALLOW_CHANGES_WITH_DUPLICATE_PVS, vsn(2, 2, 153), NULL, 0, NULL,
|
||||
+cfg(devices_allow_changes_with_duplicate_pvs_CFG, "allow_changes_with_duplicate_pvs", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ALLOW_CHANGES_WITH_DUPLICATE_PVS, vsn(2, 2, 153), NULL, 0, NULL,
|
||||
"Allow VG modification while a PV appears on multiple devices.\n"
|
||||
"When a PV appears on multiple devices, LVM attempts to choose the\n"
|
||||
"best device to use for the PV. If the devices represent the same\n"
|
||||
@@ -520,7 +520,7 @@ cfg(devices_allow_changes_with_duplicate_pvs_CFG, "allow_changes_with_duplicate_
|
||||
"Enabling this setting allows the VG to be used as usual even with\n"
|
||||
"uncertain devices.\n")
|
||||
|
||||
-cfg(devices_allow_mixed_block_sizes_CFG, "allow_mixed_block_sizes", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2, 3, 6), NULL, 0, NULL,
|
||||
+cfg(devices_allow_mixed_block_sizes_CFG, "allow_mixed_block_sizes", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(2, 3, 6), NULL, 0, NULL,
|
||||
"Allow PVs in the same VG with different logical block sizes.\n"
|
||||
"When allowed, the user is responsible to ensure that an LV is\n"
|
||||
"using PVs with matching block sizes when necessary.\n")
|
||||
@@ -543,14 +543,14 @@ cfg_array(allocation_cling_tag_list_CFG, "cling_tag_list", allocation_CFG_SECTIO
|
||||
"cling_tag_list = [ \"@site1\", \"@site2\" ]\n"
|
||||
"#\n")
|
||||
|
||||
-cfg(allocation_maximise_cling_CFG, "maximise_cling", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MAXIMISE_CLING, vsn(2, 2, 85), NULL, 0, NULL,
|
||||
+cfg(allocation_maximise_cling_CFG, "maximise_cling", allocation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_MAXIMISE_CLING, vsn(2, 2, 85), NULL, 0, NULL,
|
||||
"Use a previous allocation algorithm.\n"
|
||||
"Changes made in version 2.02.85 extended the reach of the 'cling'\n"
|
||||
"policies to detect more situations where data can be grouped onto\n"
|
||||
"the same disks. This setting can be used to disable the changes\n"
|
||||
"and revert to the previous algorithm.\n")
|
||||
|
||||
-cfg(allocation_use_blkid_wiping_CFG, "use_blkid_wiping", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_USE_BLKID_WIPING, vsn(2, 2, 105), "@DEFAULT_USE_BLKID_WIPING@", 0, NULL,
|
||||
+cfg(allocation_use_blkid_wiping_CFG, "use_blkid_wiping", allocation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_USE_BLKID_WIPING, vsn(2, 2, 105), "@DEFAULT_USE_BLKID_WIPING@", 0, NULL,
|
||||
"Use blkid to detect and erase existing signatures on new PVs and LVs.\n"
|
||||
"The blkid library can detect more signatures than the native LVM\n"
|
||||
"detection code, but may take longer. LVM needs to be compiled with\n"
|
||||
@@ -559,7 +559,7 @@ cfg(allocation_use_blkid_wiping_CFG, "use_blkid_wiping", allocation_CFG_SECTION,
|
||||
"swap signature, and LUKS signatures. To see the list of signatures\n"
|
||||
"recognized by blkid, check the output of the 'blkid -k' command.\n")
|
||||
|
||||
-cfg(allocation_wipe_signatures_when_zeroing_new_lvs_CFG, "wipe_signatures_when_zeroing_new_lvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(2, 2, 105), NULL, 0, NULL,
|
||||
+cfg(allocation_wipe_signatures_when_zeroing_new_lvs_CFG, "wipe_signatures_when_zeroing_new_lvs", allocation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 1, vsn(2, 2, 105), NULL, 0, NULL,
|
||||
"Look for and erase any signatures while zeroing a new LV.\n"
|
||||
"The --wipesignatures option overrides this setting.\n"
|
||||
"Zeroing is controlled by the -Z/--zero option, and if not specified,\n"
|
||||
@@ -575,7 +575,7 @@ cfg(allocation_wipe_signatures_when_zeroing_new_lvs_CFG, "wipe_signatures_when_z
|
||||
"When this setting is disabled, signatures on new LVs are not detected\n"
|
||||
"or erased unless the --wipesignatures option is used directly.\n")
|
||||
|
||||
-cfg(allocation_mirror_logs_require_separate_pvs_CFG, "mirror_logs_require_separate_pvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MIRROR_LOGS_REQUIRE_SEPARATE_PVS, vsn(2, 2, 85), NULL, 0, NULL,
|
||||
+cfg(allocation_mirror_logs_require_separate_pvs_CFG, "mirror_logs_require_separate_pvs", allocation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_MIRROR_LOGS_REQUIRE_SEPARATE_PVS, vsn(2, 2, 85), NULL, 0, NULL,
|
||||
"Mirror logs and images will always use different PVs.\n"
|
||||
"The default setting changed in version 2.02.85.\n")
|
||||
|
||||
@@ -852,10 +852,10 @@ cfg(log_command_log_selection_CFG, "command_log_selection", log_CFG_SECTION, CFG
|
||||
"For more information about selection criteria in general, see\n"
|
||||
"lvm(8) man page.\n")
|
||||
|
||||
-cfg(log_verbose_CFG, "verbose", log_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_VERBOSE, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(log_verbose_CFG, "verbose", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_VERBOSE, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Controls the messages sent to stdout or stderr.\n")
|
||||
|
||||
-cfg(log_silent_CFG, "silent", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SILENT, vsn(2, 2, 98), NULL, 0, NULL,
|
||||
+cfg(log_silent_CFG, "silent", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_SILENT, vsn(2, 2, 98), NULL, 0, NULL,
|
||||
"Suppress all non-essential messages from stdout.\n"
|
||||
"This has the same effect as -qq. When enabled, the following commands\n"
|
||||
"still produce output: dumpconfig, lvdisplay, lvmdiskscan, lvs, pvck,\n"
|
||||
@@ -865,16 +865,16 @@ cfg(log_silent_CFG, "silent", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SILENT,
|
||||
"Any 'yes' or 'no' questions not overridden by other arguments are\n"
|
||||
"suppressed and default to 'no'.\n")
|
||||
|
||||
-cfg(log_syslog_CFG, "syslog", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SYSLOG, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(log_syslog_CFG, "syslog", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_SYSLOG, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Send log messages through syslog.\n")
|
||||
|
||||
cfg(log_file_CFG, "file", log_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Write error and debug log messages to a file specified here.\n")
|
||||
|
||||
-cfg(log_overwrite_CFG, "overwrite", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_OVERWRITE, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(log_overwrite_CFG, "overwrite", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_OVERWRITE, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Overwrite the log file each time the program is run.\n")
|
||||
|
||||
-cfg(log_level_CFG, "level", log_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_LOGLEVEL, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(log_level_CFG, "level", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_LOGLEVEL, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"The level of log messages that are sent to the log file or syslog.\n"
|
||||
"There are 6 syslog-like log levels currently in use: 2 to 7 inclusive.\n"
|
||||
"7 is the most verbose (LOG_DEBUG).\n")
|
||||
@@ -882,23 +882,23 @@ cfg(log_level_CFG, "level", log_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_LOGLEVEL,
|
||||
cfg(log_indent_CFG, "indent", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_INDENT, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Indent messages according to their severity.\n")
|
||||
|
||||
-cfg(log_command_names_CFG, "command_names", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_CMD_NAME, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(log_command_names_CFG, "command_names", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_CMD_NAME, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Display the command name on each line of output.\n")
|
||||
|
||||
-cfg(log_prefix_CFG, "prefix", log_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, DEFAULT_MSG_PREFIX, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(log_prefix_CFG, "prefix", log_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ALLOW_EMPTY, CFG_TYPE_STRING, DEFAULT_MSG_PREFIX, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"A prefix to use before the log message text.\n"
|
||||
"(After the command name, if selected).\n"
|
||||
"Two spaces allows you to see/grep the severity of each message.\n"
|
||||
"To make the messages look similar to the original LVM tools use:\n"
|
||||
"indent = 0, command_names = 1, prefix = \" -- \"\n")
|
||||
|
||||
-cfg(log_activation_CFG, "activation", log_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(log_activation_CFG, "activation", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Log messages during activation.\n"
|
||||
"Don't use this in low memory situations (can deadlock).\n")
|
||||
|
||||
cfg(log_activate_file_CFG, "activate_file", log_CFG_SECTION, CFG_DEFAULT_UNDEFINED | CFG_UNSUPPORTED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL, NULL)
|
||||
|
||||
-cfg_array(log_debug_classes_CFG, "debug_classes", log_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, "#Smemory#Sdevices#Sio#Sactivation#Sallocation#Smetadata#Scache#Slocking#Slvmpolld#Sdbus", vsn(2, 2, 99), NULL, 0, NULL,
|
||||
+cfg_array(log_debug_classes_CFG, "debug_classes", log_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ALLOW_EMPTY, CFG_TYPE_STRING, "#Smemory#Sdevices#Sio#Sactivation#Sallocation#Smetadata#Scache#Slocking#Slvmpolld#Sdbus", vsn(2, 2, 99), NULL, 0, NULL,
|
||||
"Select log messages by class.\n"
|
||||
"Some debugging messages are assigned to a class and only appear in\n"
|
||||
"debug output if the class is listed here. Classes currently\n"
|
||||
@@ -913,55 +913,55 @@ cfg_array(log_debug_output_fields_CFG, "debug_output_fields", log_CFG_SECTION, C
|
||||
"The fields included in debug output written to stderr.\n"
|
||||
"Use \"all\" to include everything (the default).\n")
|
||||
|
||||
-cfg(backup_backup_CFG, "backup", backup_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_BACKUP_ENABLED, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(backup_backup_CFG, "backup", backup_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_BACKUP_ENABLED, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Maintain a backup of the current metadata configuration.\n"
|
||||
"Think very hard before turning this off!\n")
|
||||
|
||||
-cfg_runtime(backup_backup_dir_CFG, "backup_dir", backup_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(1, 0, 0), 0, NULL,
|
||||
+cfg_runtime(backup_backup_dir_CFG, "backup_dir", backup_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, vsn(1, 0, 0), 0, NULL,
|
||||
"Location of the metadata backup files.\n"
|
||||
"Remember to back up this directory regularly!\n")
|
||||
|
||||
-cfg(backup_archive_CFG, "archive", backup_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ARCHIVE_ENABLED, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(backup_archive_CFG, "archive", backup_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ARCHIVE_ENABLED, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Maintain an archive of old metadata configurations.\n"
|
||||
"Think very hard before turning this off.\n")
|
||||
|
||||
-cfg_runtime(backup_archive_dir_CFG, "archive_dir", backup_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(1, 0, 0), 0, NULL,
|
||||
+cfg_runtime(backup_archive_dir_CFG, "archive_dir", backup_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, vsn(1, 0, 0), 0, NULL,
|
||||
"Location of the metdata archive files.\n"
|
||||
"Remember to back up this directory regularly!\n")
|
||||
|
||||
-cfg(backup_retain_min_CFG, "retain_min", backup_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_ARCHIVE_NUMBER, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(backup_retain_min_CFG, "retain_min", backup_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_ARCHIVE_NUMBER, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Minimum number of archives to keep.\n")
|
||||
|
||||
-cfg(backup_retain_days_CFG, "retain_days", backup_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_ARCHIVE_DAYS, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(backup_retain_days_CFG, "retain_days", backup_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_ARCHIVE_DAYS, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Minimum number of days to keep archive files.\n")
|
||||
|
||||
-cfg(shell_history_size_CFG, "history_size", shell_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_MAX_HISTORY, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(shell_history_size_CFG, "history_size", shell_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_MAX_HISTORY, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Number of lines of history to store in ~/.lvm_history.\n")
|
||||
|
||||
-cfg(global_umask_CFG, "umask", global_CFG_SECTION, CFG_FORMAT_INT_OCTAL, CFG_TYPE_INT, DEFAULT_UMASK, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(global_umask_CFG, "umask", global_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_FORMAT_INT_OCTAL, CFG_TYPE_INT, DEFAULT_UMASK, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"The file creation mask for any files and directories created.\n"
|
||||
"Interpreted as octal if the first digit is zero.\n")
|
||||
|
||||
-cfg(global_test_CFG, "test", global_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(global_test_CFG, "test", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"No on-disk metadata changes will be made in test mode.\n"
|
||||
"Equivalent to having the -t option on every command.\n")
|
||||
|
||||
-cfg(global_units_CFG, "units", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_STRING, DEFAULT_UNITS, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(global_units_CFG, "units", global_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_PROFILABLE, CFG_TYPE_STRING, DEFAULT_UNITS, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Default value for --units argument.\n")
|
||||
|
||||
-cfg(global_si_unit_consistency_CFG, "si_unit_consistency", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_BOOL, DEFAULT_SI_UNIT_CONSISTENCY, vsn(2, 2, 54), NULL, 0, NULL,
|
||||
+cfg(global_si_unit_consistency_CFG, "si_unit_consistency", global_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_PROFILABLE, CFG_TYPE_BOOL, DEFAULT_SI_UNIT_CONSISTENCY, vsn(2, 2, 54), NULL, 0, NULL,
|
||||
"Distinguish between powers of 1024 and 1000 bytes.\n"
|
||||
"The LVM commands distinguish between powers of 1024 bytes,\n"
|
||||
"e.g. KiB, MiB, GiB, and powers of 1000 bytes, e.g. KB, MB, GB.\n"
|
||||
"If scripts depend on the old behaviour, disable this setting\n"
|
||||
"temporarily until they are updated.\n")
|
||||
|
||||
-cfg(global_suffix_CFG, "suffix", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_BOOL, DEFAULT_SUFFIX, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(global_suffix_CFG, "suffix", global_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_PROFILABLE, CFG_TYPE_BOOL, DEFAULT_SUFFIX, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Display unit suffix for sizes.\n"
|
||||
"This setting has no effect if the units are in human-readable form\n"
|
||||
"(global/units = \"h\") in which case the suffix is always displayed.\n")
|
||||
|
||||
-cfg(global_activation_CFG, "activation", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ACTIVATION, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(global_activation_CFG, "activation", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ACTIVATION, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Enable/disable communication with the kernel device-mapper.\n"
|
||||
"Disable to use the tools to manipulate LVM metadata without\n"
|
||||
"activating any logical volumes. If the device-mapper driver\n"
|
||||
@@ -979,30 +979,30 @@ cfg_array(global_format_libraries_CFG, "format_libraries", global_CFG_SECTION, C
|
||||
|
||||
cfg_array(global_segment_libraries_CFG, "segment_libraries", global_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 18), NULL, vsn(2, 3, 3), NULL, NULL)
|
||||
|
||||
-cfg(global_proc_CFG, "proc", global_CFG_SECTION, CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_PROC_DIR, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(global_proc_CFG, "proc", global_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_PROC_DIR, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Location of proc filesystem.\n")
|
||||
|
||||
-cfg(global_etc_CFG, "etc", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_ETC_DIR, vsn(2, 2, 117), "@CONFDIR@", 0, NULL,
|
||||
+cfg(global_etc_CFG, "etc", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_ETC_DIR, vsn(2, 2, 117), "@CONFDIR@", 0, NULL,
|
||||
"Location of /etc system configuration directory.\n")
|
||||
|
||||
-cfg(global_locking_type_CFG, "locking_type", global_CFG_SECTION, 0, CFG_TYPE_INT, 1, vsn(1, 0, 0), NULL, vsn(2, 3, 0), NULL,
|
||||
+cfg(global_locking_type_CFG, "locking_type", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 1, vsn(1, 0, 0), NULL, vsn(2, 3, 0), NULL,
|
||||
NULL)
|
||||
|
||||
-cfg(global_wait_for_locks_CFG, "wait_for_locks", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_WAIT_FOR_LOCKS, vsn(2, 2, 50), NULL, 0, NULL,
|
||||
+cfg(global_wait_for_locks_CFG, "wait_for_locks", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_WAIT_FOR_LOCKS, vsn(2, 2, 50), NULL, 0, NULL,
|
||||
"When disabled, fail if a lock request would block.\n")
|
||||
|
||||
-cfg(global_fallback_to_clustered_locking_CFG, "fallback_to_clustered_locking", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_CLUSTERED_LOCKING, vsn(2, 2, 42), NULL, vsn(2, 3, 0), NULL,
|
||||
+cfg(global_fallback_to_clustered_locking_CFG, "fallback_to_clustered_locking", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_CLUSTERED_LOCKING, vsn(2, 2, 42), NULL, vsn(2, 3, 0), NULL,
|
||||
NULL)
|
||||
|
||||
-cfg(global_fallback_to_local_locking_CFG, "fallback_to_local_locking", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_LOCAL_LOCKING, vsn(2, 2, 42), NULL, vsn(2, 3, 0), NULL,
|
||||
+cfg(global_fallback_to_local_locking_CFG, "fallback_to_local_locking", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_LOCAL_LOCKING, vsn(2, 2, 42), NULL, vsn(2, 3, 0), NULL,
|
||||
NULL)
|
||||
|
||||
-cfg(global_locking_dir_CFG, "locking_dir", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_LOCK_DIR, vsn(1, 0, 0), "@DEFAULT_LOCK_DIR@", 0, NULL,
|
||||
+cfg(global_locking_dir_CFG, "locking_dir", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_LOCK_DIR, vsn(1, 0, 0), "@DEFAULT_LOCK_DIR@", 0, NULL,
|
||||
"Directory to use for LVM command file locks.\n"
|
||||
"Local non-LV directory that holds file-based locks while commands are\n"
|
||||
"in progress. A directory like /tmp that may get wiped on reboot is OK.\n")
|
||||
|
||||
-cfg(global_prioritise_write_locks_CFG, "prioritise_write_locks", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_PRIORITISE_WRITE_LOCKS, vsn(2, 2, 52), NULL, 0, NULL,
|
||||
+cfg(global_prioritise_write_locks_CFG, "prioritise_write_locks", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_PRIORITISE_WRITE_LOCKS, vsn(2, 2, 52), NULL, 0, NULL,
|
||||
"Allow quicker VG write access during high volume read access.\n"
|
||||
"When there are competing read-only and read-write access requests for\n"
|
||||
"a volume group's metadata, instead of always granting the read-only\n"
|
||||
@@ -1016,22 +1016,22 @@ cfg(global_library_dir_CFG, "library_dir", global_CFG_SECTION, CFG_DEFAULT_UNDEF
|
||||
cfg(global_locking_library_CFG, "locking_library", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_LOCKING_LIB, vsn(1, 0, 0), NULL, vsn(2, 3, 0), NULL,
|
||||
NULL)
|
||||
|
||||
-cfg(global_abort_on_internal_errors_CFG, "abort_on_internal_errors", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ABORT_ON_INTERNAL_ERRORS, vsn(2, 2, 57), NULL, 0, NULL,
|
||||
+cfg(global_abort_on_internal_errors_CFG, "abort_on_internal_errors", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ABORT_ON_INTERNAL_ERRORS, vsn(2, 2, 57), NULL, 0, NULL,
|
||||
"Abort a command that encounters an internal error.\n"
|
||||
"Treat any internal errors as fatal errors, aborting the process that\n"
|
||||
"encountered the internal error. Please only enable for debugging.\n")
|
||||
|
||||
-cfg(global_detect_internal_vg_cache_corruption_CFG, "detect_internal_vg_cache_corruption", global_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2, 2, 96), NULL, vsn(2, 2, 174), NULL,
|
||||
+cfg(global_detect_internal_vg_cache_corruption_CFG, "detect_internal_vg_cache_corruption", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(2, 2, 96), NULL, vsn(2, 2, 174), NULL,
|
||||
NULL)
|
||||
|
||||
-cfg(global_metadata_read_only_CFG, "metadata_read_only", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_METADATA_READ_ONLY, vsn(2, 2, 75), NULL, 0, NULL,
|
||||
+cfg(global_metadata_read_only_CFG, "metadata_read_only", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_METADATA_READ_ONLY, vsn(2, 2, 75), NULL, 0, NULL,
|
||||
"No operations that change on-disk metadata are permitted.\n"
|
||||
"Additionally, read-only commands that encounter metadata in need of\n"
|
||||
"repair will still be allowed to proceed exactly as if the repair had\n"
|
||||
"been performed (except for the unchanged vg_seqno). Inappropriate\n"
|
||||
"use could mess up your system, so seek advice first!\n")
|
||||
|
||||
-cfg(global_mirror_segtype_default_CFG, "mirror_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_MIRROR_SEGTYPE, vsn(2, 2, 87), "@DEFAULT_MIRROR_SEGTYPE@", 0, NULL,
|
||||
+cfg(global_mirror_segtype_default_CFG, "mirror_segtype_default", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_MIRROR_SEGTYPE, vsn(2, 2, 87), "@DEFAULT_MIRROR_SEGTYPE@", 0, NULL,
|
||||
"The segment type used by the short mirroring option -m.\n"
|
||||
"The --type mirror|raid1 option overrides this setting.\n"
|
||||
"#\n"
|
||||
@@ -1066,7 +1066,7 @@ cfg(global_support_mirrored_mirror_log_CFG, "support_mirrored_mirror_log", globa
|
||||
"Not supported for regular operation!\n"
|
||||
"\n")
|
||||
|
||||
-cfg(global_raid10_segtype_default_CFG, "raid10_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_RAID10_SEGTYPE, vsn(2, 2, 99), "@DEFAULT_RAID10_SEGTYPE@", 0, NULL,
|
||||
+cfg(global_raid10_segtype_default_CFG, "raid10_segtype_default", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_RAID10_SEGTYPE, vsn(2, 2, 99), "@DEFAULT_RAID10_SEGTYPE@", 0, NULL,
|
||||
"The segment type used by the -i -m combination.\n"
|
||||
"The --type raid10|mirror option overrides this setting.\n"
|
||||
"The --stripes/-i and --mirrors/-m options can both be specified\n"
|
||||
@@ -1084,7 +1084,7 @@ cfg(global_raid10_segtype_default_CFG, "raid10_segtype_default", global_CFG_SECT
|
||||
" in terms of providing redundancy and performance.\n"
|
||||
"#\n")
|
||||
|
||||
-cfg(global_sparse_segtype_default_CFG, "sparse_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_SPARSE_SEGTYPE, vsn(2, 2, 112), "@DEFAULT_SPARSE_SEGTYPE@", 0, NULL,
|
||||
+cfg(global_sparse_segtype_default_CFG, "sparse_segtype_default", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_SPARSE_SEGTYPE, vsn(2, 2, 112), "@DEFAULT_SPARSE_SEGTYPE@", 0, NULL,
|
||||
"The segment type used by the -V -L combination.\n"
|
||||
"The --type snapshot|thin option overrides this setting.\n"
|
||||
"The combination of -V and -L options creates a sparse LV. There are\n"
|
||||
@@ -1122,7 +1122,7 @@ cfg(global_event_activation_CFG, "event_activation", global_CFG_SECTION, CFG_DEF
|
||||
"See the --setautoactivation option or the auto_activation_volume_list\n"
|
||||
"setting to configure autoactivation for specific VGs or LVs.\n")
|
||||
|
||||
-cfg(global_use_lvmetad_CFG, "use_lvmetad", global_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2, 2, 93), 0, vsn(2, 3, 0), NULL,
|
||||
+cfg(global_use_lvmetad_CFG, "use_lvmetad", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(2, 2, 93), 0, vsn(2, 3, 0), NULL,
|
||||
NULL)
|
||||
|
||||
cfg(global_lvmetad_update_wait_time_CFG, "lvmetad_update_wait_time", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 0, vsn(2, 2, 151), NULL, vsn(2, 3, 0), NULL,
|
||||
@@ -1131,7 +1131,7 @@ cfg(global_lvmetad_update_wait_time_CFG, "lvmetad_update_wait_time", global_CFG_
|
||||
cfg(global_use_aio_CFG, "use_aio", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_USE_AIO, vsn(2, 2, 183), NULL, 0, NULL,
|
||||
"Use async I/O when reading and writing devices.\n")
|
||||
|
||||
-cfg(global_use_lvmlockd_CFG, "use_lvmlockd", global_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2, 2, 124), NULL, 0, NULL,
|
||||
+cfg(global_use_lvmlockd_CFG, "use_lvmlockd", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(2, 2, 124), NULL, 0, NULL,
|
||||
"Use lvmlockd for locking among hosts using LVM on shared storage.\n"
|
||||
"Applicable only if LVM is compiled with lockd support in which\n"
|
||||
"case there is also lvmlockd(8) man page available for more\n"
|
||||
@@ -1257,7 +1257,7 @@ cfg(global_fsadm_executable_CFG, "fsadm_executable", global_CFG_SECTION, CFG_DEF
|
||||
"The full path to the fsadm command.\n"
|
||||
"LVM uses this command to help with lvresize -r operations.\n")
|
||||
|
||||
-cfg(global_system_id_source_CFG, "system_id_source", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_SYSTEM_ID_SOURCE, vsn(2, 2, 117), NULL, 0, NULL,
|
||||
+cfg(global_system_id_source_CFG, "system_id_source", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_SYSTEM_ID_SOURCE, vsn(2, 2, 117), NULL, 0, NULL,
|
||||
"The method LVM uses to set the local system ID.\n"
|
||||
"Volume Groups can also be given a system ID (by vgcreate, vgchange,\n"
|
||||
"or vgimport.) A VG on shared storage devices is accessible only to\n"
|
||||
@@ -1287,13 +1287,13 @@ cfg(global_system_id_file_CFG, "system_id_file", global_CFG_SECTION, CFG_DEFAULT
|
||||
"This is used when system_id_source is set to 'file'.\n"
|
||||
"Comments starting with the character # are ignored.\n")
|
||||
|
||||
-cfg(activation_checks_CFG, "checks", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ACTIVATION_CHECKS, vsn(2, 2, 86), NULL, 0, NULL,
|
||||
+cfg(activation_checks_CFG, "checks", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ACTIVATION_CHECKS, vsn(2, 2, 86), NULL, 0, NULL,
|
||||
"Perform internal checks of libdevmapper operations.\n"
|
||||
"Useful for debugging problems with activation. Some of the checks may\n"
|
||||
"be expensive, so it's best to use this only when there seems to be a\n"
|
||||
"problem.\n")
|
||||
|
||||
-cfg(global_use_lvmpolld_CFG, "use_lvmpolld", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_USE_LVMPOLLD, vsn(2, 2, 120), "@DEFAULT_USE_LVMPOLLD@", 0, NULL,
|
||||
+cfg(global_use_lvmpolld_CFG, "use_lvmpolld", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_USE_LVMPOLLD, vsn(2, 2, 120), "@DEFAULT_USE_LVMPOLLD@", 0, NULL,
|
||||
"Use lvmpolld to supervise long running LVM commands.\n"
|
||||
"When enabled, control of long running LVM commands is transferred\n"
|
||||
"from the original LVM command to the lvmpolld daemon. This allows\n"
|
||||
@@ -1306,7 +1306,7 @@ cfg(global_use_lvmpolld_CFG, "use_lvmpolld", global_CFG_SECTION, 0, CFG_TYPE_BOO
|
||||
"commands will supervise long running operations by forking themselves.\n"
|
||||
"Applicable only if LVM is compiled with lvmpolld support.\n")
|
||||
|
||||
-cfg(global_notify_dbus_CFG, "notify_dbus", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_NOTIFY_DBUS, vsn(2, 2, 145), NULL, 0, NULL,
|
||||
+cfg(global_notify_dbus_CFG, "notify_dbus", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_NOTIFY_DBUS, vsn(2, 2, 145), NULL, 0, NULL,
|
||||
"Enable D-Bus notification from LVM commands.\n"
|
||||
"When enabled, an LVM command that changes PVs, changes VG metadata,\n"
|
||||
"or changes the activation state of an LV will send a notification.\n")
|
||||
@@ -1319,7 +1319,7 @@ cfg(global_io_memory_size_CFG, "io_memory_size", global_CFG_SECTION, CFG_DEFAULT
|
||||
"This value should usually not be decreased from the default; setting\n"
|
||||
"it too low can result in lvm failing to read VGs.\n")
|
||||
|
||||
-cfg(activation_udev_sync_CFG, "udev_sync", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_UDEV_SYNC, vsn(2, 2, 51), NULL, 0, NULL,
|
||||
+cfg(activation_udev_sync_CFG, "udev_sync", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_UDEV_SYNC, vsn(2, 2, 51), NULL, 0, NULL,
|
||||
"Use udev notifications to synchronize udev and LVM.\n"
|
||||
"The --noudevsync option overrides this setting.\n"
|
||||
"When disabled, LVM commands will not wait for notifications from\n"
|
||||
@@ -1329,7 +1329,7 @@ cfg(activation_udev_sync_CFG, "udev_sync", activation_CFG_SECTION, 0, CFG_TYPE_B
|
||||
"running, and LVM processes are waiting for udev, run the command\n"
|
||||
"'dmsetup udevcomplete_all' to wake them up.\n")
|
||||
|
||||
-cfg(activation_udev_rules_CFG, "udev_rules", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_UDEV_RULES, vsn(2, 2, 57), NULL, 0, NULL,
|
||||
+cfg(activation_udev_rules_CFG, "udev_rules", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_UDEV_RULES, vsn(2, 2, 57), NULL, 0, NULL,
|
||||
"Use udev rules to manage LV device nodes and symlinks.\n"
|
||||
"When disabled, LVM will manage the device nodes and symlinks for\n"
|
||||
"active LVs itself. Manual intervention may be required if this\n"
|
||||
@@ -1341,13 +1341,13 @@ cfg(activation_verify_udev_operations_CFG, "verify_udev_operations", activation_
|
||||
"in the device directory after udev has completed processing its\n"
|
||||
"events. Useful for diagnosing problems with LVM/udev interactions.\n")
|
||||
|
||||
-cfg(activation_retry_deactivation_CFG, "retry_deactivation", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_RETRY_DEACTIVATION, vsn(2, 2, 89), NULL, 0, NULL,
|
||||
+cfg(activation_retry_deactivation_CFG, "retry_deactivation", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_RETRY_DEACTIVATION, vsn(2, 2, 89), NULL, 0, NULL,
|
||||
"Retry failed LV deactivation.\n"
|
||||
"If LV deactivation fails, LVM will retry for a few seconds before\n"
|
||||
"failing. This may happen because a process run from a quick udev rule\n"
|
||||
"temporarily opened the device.\n")
|
||||
|
||||
-cfg(activation_missing_stripe_filler_CFG, "missing_stripe_filler", activation_CFG_SECTION, CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_STRIPE_FILLER, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
+cfg(activation_missing_stripe_filler_CFG, "missing_stripe_filler", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_STRIPE_FILLER, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Method to fill missing stripes when activating an incomplete LV.\n"
|
||||
"Using 'error' will make inaccessible parts of the device return I/O\n"
|
||||
"errors on access. Using 'zero' will return success (and zero) on I/O\n"
|
||||
@@ -1460,11 +1460,11 @@ cfg_array(activation_read_only_volume_list_CFG, "read_only_volume_list", activat
|
||||
"read_only_volume_list = [ \"vg1\", \"vg2/lvol1\", \"@tag1\", \"@*\" ]\n"
|
||||
"#\n")
|
||||
|
||||
- cfg(activation_mirror_region_size_CFG, "mirror_region_size", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_RAID_REGION_SIZE, vsn(1, 0, 0), NULL, vsn(2, 2, 99),
|
||||
+ cfg(activation_mirror_region_size_CFG, "mirror_region_size", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_RAID_REGION_SIZE, vsn(1, 0, 0), NULL, vsn(2, 2, 99),
|
||||
"This has been replaced by the activation/raid_region_size setting.\n",
|
||||
"Size in KiB of each raid or mirror synchronization region.\n")
|
||||
|
||||
-cfg(activation_raid_region_size_CFG, "raid_region_size", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_RAID_REGION_SIZE, vsn(2, 2, 99), NULL, 0, NULL,
|
||||
+cfg(activation_raid_region_size_CFG, "raid_region_size", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_RAID_REGION_SIZE, vsn(2, 2, 99), NULL, 0, NULL,
|
||||
"Size in KiB of each raid or mirror synchronization region.\n"
|
||||
"The clean/dirty state of data is tracked for each region.\n"
|
||||
"The value is rounded down to a power of two if necessary, and\n"
|
||||
@@ -1489,7 +1489,7 @@ cfg(activation_readahead_CFG, "readahead", activation_CFG_SECTION, CFG_DEFAULT_C
|
||||
" Use default value chosen by kernel.\n"
|
||||
"#\n")
|
||||
|
||||
-cfg(activation_raid_fault_policy_CFG, "raid_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_RAID_FAULT_POLICY, vsn(2, 2, 89), NULL, 0, NULL,
|
||||
+cfg(activation_raid_fault_policy_CFG, "raid_fault_policy", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_RAID_FAULT_POLICY, vsn(2, 2, 89), NULL, 0, NULL,
|
||||
"Defines how a device failure in a RAID LV is handled.\n"
|
||||
"This includes LVs that have the following segment types:\n"
|
||||
"raid1, raid4, raid5*, and raid6*.\n"
|
||||
@@ -1510,7 +1510,7 @@ cfg(activation_raid_fault_policy_CFG, "raid_fault_policy", activation_CFG_SECTIO
|
||||
" replace faulty devices.\n"
|
||||
"#\n")
|
||||
|
||||
-cfg_runtime(activation_mirror_image_fault_policy_CFG, "mirror_image_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(2, 2, 57), 0, NULL,
|
||||
+cfg_runtime(activation_mirror_image_fault_policy_CFG, "mirror_image_fault_policy", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, vsn(2, 2, 57), 0, NULL,
|
||||
"Defines how a device failure in a 'mirror' LV is handled.\n"
|
||||
"An LV with the 'mirror' segment type is composed of mirror images\n"
|
||||
"(copies) and a mirror log. A disk log ensures that a mirror LV does\n"
|
||||
@@ -1546,16 +1546,16 @@ cfg_runtime(activation_mirror_image_fault_policy_CFG, "mirror_image_fault_policy
|
||||
" replacement.\n"
|
||||
"#\n")
|
||||
|
||||
-cfg(activation_mirror_log_fault_policy_CFG, "mirror_log_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_MIRROR_LOG_FAULT_POLICY, vsn(1, 2, 18), NULL, 0, NULL,
|
||||
+cfg(activation_mirror_log_fault_policy_CFG, "mirror_log_fault_policy", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_MIRROR_LOG_FAULT_POLICY, vsn(1, 2, 18), NULL, 0, NULL,
|
||||
"Defines how a device failure in a 'mirror' log LV is handled.\n"
|
||||
"The mirror_image_fault_policy description for mirrored LVs also\n"
|
||||
"applies to mirrored log LVs.\n")
|
||||
|
||||
-cfg(activation_mirror_device_fault_policy_CFG, "mirror_device_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_MIRROR_DEVICE_FAULT_POLICY, vsn(1, 2, 10), NULL, vsn(2, 2, 57),
|
||||
+cfg(activation_mirror_device_fault_policy_CFG, "mirror_device_fault_policy", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_MIRROR_DEVICE_FAULT_POLICY, vsn(1, 2, 10), NULL, vsn(2, 2, 57),
|
||||
"This has been replaced by the activation/mirror_image_fault_policy setting.\n",
|
||||
"Define how a device failure affecting a mirror is handled.\n")
|
||||
|
||||
-cfg(activation_snapshot_autoextend_threshold_CFG, "snapshot_autoextend_threshold", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_SNAPSHOT_AUTOEXTEND_THRESHOLD, vsn(2, 2, 75), NULL, 0, NULL,
|
||||
+cfg(activation_snapshot_autoextend_threshold_CFG, "snapshot_autoextend_threshold", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_SNAPSHOT_AUTOEXTEND_THRESHOLD, vsn(2, 2, 75), NULL, 0, NULL,
|
||||
"Auto-extend a snapshot when its usage exceeds this percent.\n"
|
||||
"Setting this to 100 disables automatic extension.\n"
|
||||
"The minimum value is 50 (a smaller value is treated as 50.)\n"
|
||||
@@ -1569,7 +1569,7 @@ cfg(activation_snapshot_autoextend_threshold_CFG, "snapshot_autoextend_threshold
|
||||
"snapshot_autoextend_threshold = 70\n"
|
||||
"#\n")
|
||||
|
||||
-cfg(activation_snapshot_autoextend_percent_CFG, "snapshot_autoextend_percent", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_SNAPSHOT_AUTOEXTEND_PERCENT, vsn(2, 2, 75), NULL, 0, NULL,
|
||||
+cfg(activation_snapshot_autoextend_percent_CFG, "snapshot_autoextend_percent", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_SNAPSHOT_AUTOEXTEND_PERCENT, vsn(2, 2, 75), NULL, 0, NULL,
|
||||
"Auto-extending a snapshot adds this percent extra space.\n"
|
||||
"The amount of additional space added to a snapshot is this\n"
|
||||
"percent of its current size.\n"
|
||||
@@ -1581,7 +1581,7 @@ cfg(activation_snapshot_autoextend_percent_CFG, "snapshot_autoextend_percent", a
|
||||
"snapshot_autoextend_percent = 20\n"
|
||||
"#\n")
|
||||
|
||||
-cfg(activation_thin_pool_autoextend_threshold_CFG, "thin_pool_autoextend_threshold", activation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_INT, DEFAULT_THIN_POOL_AUTOEXTEND_THRESHOLD, vsn(2, 2, 89), NULL, 0, NULL,
|
||||
+cfg(activation_thin_pool_autoextend_threshold_CFG, "thin_pool_autoextend_threshold", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_INT, DEFAULT_THIN_POOL_AUTOEXTEND_THRESHOLD, vsn(2, 2, 89), NULL, 0, NULL,
|
||||
"Auto-extend a thin pool when its usage exceeds this percent.\n"
|
||||
"Setting this to 100 disables automatic extension.\n"
|
||||
"The minimum value is 50 (a smaller value is treated as 50.)\n"
|
||||
@@ -1595,7 +1595,7 @@ cfg(activation_thin_pool_autoextend_threshold_CFG, "thin_pool_autoextend_thresho
|
||||
"thin_pool_autoextend_threshold = 70\n"
|
||||
"#\n")
|
||||
|
||||
-cfg(activation_thin_pool_autoextend_percent_CFG, "thin_pool_autoextend_percent", activation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_INT, DEFAULT_THIN_POOL_AUTOEXTEND_PERCENT, vsn(2, 2, 89), NULL, 0, NULL,
|
||||
+cfg(activation_thin_pool_autoextend_percent_CFG, "thin_pool_autoextend_percent", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_INT, DEFAULT_THIN_POOL_AUTOEXTEND_PERCENT, vsn(2, 2, 89), NULL, 0, NULL,
|
||||
"Auto-extending a thin pool adds this percent extra space.\n"
|
||||
"The amount of additional space added to a thin pool is this\n"
|
||||
"percent of its current size.\n"
|
||||
@@ -1652,7 +1652,7 @@ cfg(activation_use_mlockall_CFG, "use_mlockall", activation_CFG_SECTION, CFG_DEF
|
||||
"Prior to version 2.02.62, LVM used mlockall() to pin the whole\n"
|
||||
"process's memory while activating devices.\n")
|
||||
|
||||
-cfg(activation_monitoring_CFG, "monitoring", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_DMEVENTD_MONITOR, vsn(2, 2, 63), NULL, 0, NULL,
|
||||
+cfg(activation_monitoring_CFG, "monitoring", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_DMEVENTD_MONITOR, vsn(2, 2, 63), NULL, 0, NULL,
|
||||
"Monitor LVs that are activated.\n"
|
||||
"The --ignoremonitoring option overrides this setting.\n"
|
||||
"When enabled, LVM will ask dmeventd to monitor activated LVs.\n")
|
||||
@@ -1674,7 +1674,7 @@ cfg(activation_auto_set_activation_skip_CFG, "auto_set_activation_skip", activat
|
||||
"flag set. When this setting is enabled, the activation skip flag is\n"
|
||||
"set on new thin snapshot LVs.\n")
|
||||
|
||||
-cfg(activation_mode_CFG, "activation_mode", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_ACTIVATION_MODE, vsn(2,2,108), NULL, 0, NULL,
|
||||
+cfg(activation_mode_CFG, "activation_mode", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_ACTIVATION_MODE, vsn(2,2,108), NULL, 0, NULL,
|
||||
"How LVs with missing devices are activated.\n"
|
||||
"The --activationmode option overrides this setting.\n"
|
||||
"#\n"
|
||||
@@ -2197,4 +2197,4 @@ cfg(local_host_id_CFG, "host_id", local_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_
|
||||
"This must be unique among all hosts, and must be between 1 and 2000.\n"
|
||||
"Applicable only if LVM is compiled with lockd support\n")
|
||||
|
||||
-cfg(CFG_COUNT, NULL, root_CFG_SECTION, 0, CFG_TYPE_INT, 0, vsn(0, 0, 0), NULL, 0, NULL, NULL)
|
||||
+cfg(CFG_COUNT, NULL, root_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 0, vsn(0, 0, 0), NULL, 0, NULL, NULL)
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,25 +0,0 @@
|
||||
From 13439caa0aa13a43cfaf066f55e50c4c5345146b Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Tue, 16 Mar 2021 09:52:13 -0500
|
||||
Subject: [PATCH 02/11] config: change default use_devicesfile to 1
|
||||
|
||||
---
|
||||
lib/config/defaults.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/config/defaults.h b/lib/config/defaults.h
|
||||
index 66eece5..a7a2a06 100644
|
||||
--- a/lib/config/defaults.h
|
||||
+++ b/lib/config/defaults.h
|
||||
@@ -322,7 +322,7 @@
|
||||
|
||||
#define DEFAULT_MD_COMPONENT_CHECKS "auto"
|
||||
|
||||
-#define DEFAULT_USE_DEVICES_FILE 0
|
||||
+#define DEFAULT_USE_DEVICES_FILE 1
|
||||
#define DEFAULT_DEVICES_FILE "system.devices"
|
||||
|
||||
#define DEFAULT_SEARCH_FOR_DEVNAMES "auto"
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,183 +0,0 @@
|
||||
From 8b83c056d12b32cffa15a77423b6be9748c0ede1 Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Wed, 20 May 2020 10:59:38 -0500
|
||||
Subject: [PATCH 03/11] system_id: new appmachineid option
|
||||
|
||||
The new system_id_source="appmachineid" will cause
|
||||
lvm to use an lvm-specific derivation of the machine-id,
|
||||
instead of the machine-id directly. This is now
|
||||
recommended in place of using machineid.
|
||||
---
|
||||
configure.ac | 20 ++++++++++++++++++++
|
||||
lib/commands/toolcontext.c | 26 +++++++++++++++++++++++---
|
||||
lib/config/config_settings.h | 8 +++++---
|
||||
man/lvmsystemid.7_main | 17 +++++++++++++++++
|
||||
test/shell/system_id.sh | 11 +++++++++++
|
||||
5 files changed, 76 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index a20633e..9fe50e1 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1105,6 +1105,26 @@ if test "$NOTIFYDBUS_SUPPORT" = yes; then
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
+dnl -- Build appmachineid
|
||||
+AC_MSG_CHECKING(whether to build appmachineid)
|
||||
+AC_ARG_ENABLE(app-machineid,
|
||||
+ AC_HELP_STRING([--enable-app-machineid],
|
||||
+ [enable LVM system ID using app-specific machine-id]),
|
||||
+ APP_MACHINEID_SUPPORT=$enableval, APP_MACHINEID_SUPPORT=no)
|
||||
+AC_MSG_RESULT($APP_MACHINEID_SUPPORT)
|
||||
+
|
||||
+if test "$APP_MACHINEID_SUPPORT" = yes; then
|
||||
+ AC_DEFINE([APP_MACHINEID_SUPPORT], 1, [Define to 1 to include code that uses libsystemd machine-id apis.])
|
||||
+ SYSTEMD_LIBS="-lsystemd"
|
||||
+fi
|
||||
+
|
||||
+################################################################################
|
||||
+dnl -- Look for libsystemd libraries
|
||||
+if test "$APP_MACHINEID_SUPPORT" = yes; then
|
||||
+ PKG_CHECK_MODULES(APP_MACHINEID, systemd >= 234, [HAVE_APP_MACHINEID=yes], $bailout)
|
||||
+fi
|
||||
+
|
||||
+################################################################################
|
||||
|
||||
dnl -- Enable blkid wiping functionality
|
||||
AC_ARG_ENABLE(blkid_wiping,
|
||||
diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c
|
||||
index ecd50db..8991aeb 100644
|
||||
--- a/lib/commands/toolcontext.c
|
||||
+++ b/lib/commands/toolcontext.c
|
||||
@@ -41,6 +41,10 @@
|
||||
#include <syslog.h>
|
||||
#include <time.h>
|
||||
|
||||
+#ifdef APP_MACHINEID_SUPPORT
|
||||
+#include <systemd/sd-id128.h>
|
||||
+#endif
|
||||
+
|
||||
#ifdef __linux__
|
||||
# include <malloc.h>
|
||||
#endif
|
||||
@@ -129,9 +133,12 @@ static const char *_read_system_id_from_file(struct cmd_context *cmd, const char
|
||||
return system_id;
|
||||
}
|
||||
|
||||
+/* systemd-id128 new produced: f64406832c2140e8ac5422d1089aae03 */
|
||||
+#define LVM_APPLICATION_ID SD_ID128_MAKE(f6,44,06,83,2c,21,40,e8,ac,54,22,d1,08,9a,ae,03)
|
||||
+
|
||||
static const char *_system_id_from_source(struct cmd_context *cmd, const char *source)
|
||||
{
|
||||
- char filebuf[PATH_MAX];
|
||||
+ char buf[PATH_MAX];
|
||||
const char *file;
|
||||
const char *etc_str;
|
||||
const char *str;
|
||||
@@ -150,10 +157,23 @@ static const char *_system_id_from_source(struct cmd_context *cmd, const char *s
|
||||
goto out;
|
||||
}
|
||||
|
||||
+#ifdef APP_MACHINEID_SUPPORT
|
||||
+ if (!strcasecmp(source, "appmachineid")) {
|
||||
+ sd_id128_t id;
|
||||
+
|
||||
+ sd_id128_get_machine_app_specific(LVM_APPLICATION_ID, &id);
|
||||
+
|
||||
+ if (dm_snprintf(buf, PATH_MAX, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(id)) < 0)
|
||||
+ stack;
|
||||
+ system_id = system_id_from_string(cmd, buf);
|
||||
+ goto out;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
if (!strcasecmp(source, "machineid") || !strcasecmp(source, "machine-id")) {
|
||||
etc_str = find_config_tree_str(cmd, global_etc_CFG, NULL);
|
||||
- if (dm_snprintf(filebuf, sizeof(filebuf), "%s/machine-id", etc_str) != -1)
|
||||
- system_id = _read_system_id_from_file(cmd, filebuf);
|
||||
+ if (dm_snprintf(buf, sizeof(buf), "%s/machine-id", etc_str) != -1)
|
||||
+ system_id = _read_system_id_from_file(cmd, buf);
|
||||
goto out;
|
||||
}
|
||||
|
||||
diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h
|
||||
index 9cf73ce..76ebc10 100644
|
||||
--- a/lib/config/config_settings.h
|
||||
+++ b/lib/config/config_settings.h
|
||||
@@ -1273,10 +1273,12 @@ cfg(global_system_id_source_CFG, "system_id_source", global_CFG_SECTION, CFG_DEF
|
||||
" uname\n"
|
||||
" Set the system ID from the hostname (uname) of the system.\n"
|
||||
" System IDs beginning localhost are not permitted.\n"
|
||||
+ " appmachineid\n"
|
||||
+ " Use an LVM-specific derivation of the local machine-id as the\n"
|
||||
+ " system ID. See 'man machine-id'.\n"
|
||||
" machineid\n"
|
||||
- " Use the contents of the machine-id file to set the system ID.\n"
|
||||
- " Some systems create this file at installation time.\n"
|
||||
- " See 'man machine-id' and global/etc.\n"
|
||||
+ " Use the contents of the machine-id file to set the system ID\n"
|
||||
+ " (appmachineid is recommended.)\n"
|
||||
" file\n"
|
||||
" Use the contents of another file (system_id_file) to set the\n"
|
||||
" system ID.\n"
|
||||
diff --git a/man/lvmsystemid.7_main b/man/lvmsystemid.7_main
|
||||
index eac4f7b..06e7f34 100644
|
||||
--- a/man/lvmsystemid.7_main
|
||||
+++ b/man/lvmsystemid.7_main
|
||||
@@ -173,6 +173,22 @@ global {
|
||||
.fi
|
||||
.
|
||||
.TP
|
||||
+.B appmachineid
|
||||
+.br
|
||||
+
|
||||
+An LVM-specific derivation of /etc/machine-id is used as the system ID.
|
||||
+See
|
||||
+.BR machine-id (5)
|
||||
+to check if machine-id is available on the host.
|
||||
+
|
||||
+.I lvm.conf
|
||||
+.nf
|
||||
+global {
|
||||
+ system_id_source = "appmachineid"
|
||||
+}
|
||||
+.fi
|
||||
+
|
||||
+.TP
|
||||
.B machineid
|
||||
.br
|
||||
The content of /etc/machine-id is used as the system ID if available.
|
||||
@@ -181,6 +197,7 @@ See
|
||||
and
|
||||
.BR systemd-machine-id-setup (1)
|
||||
to check if machine-id is available on the host.
|
||||
+(appmachineid is recommended in place of machineid.)
|
||||
.sp
|
||||
.I lvm.conf
|
||||
.nf
|
||||
diff --git a/test/shell/system_id.sh b/test/shell/system_id.sh
|
||||
index 8814d54..8b5638a 100644
|
||||
--- a/test/shell/system_id.sh
|
||||
+++ b/test/shell/system_id.sh
|
||||
@@ -50,6 +50,17 @@ check vg_field $vg1 systemid "$SID"
|
||||
vgremove $vg1
|
||||
fi
|
||||
|
||||
+## appmachineid
|
||||
+lvm version > lvmver
|
||||
+if grep app-machineid lvmver; then
|
||||
+aux lvmconf "global/system_id_source = appmachineid"
|
||||
+lvm systemid | awk '{ print $3 }' > sid_lvm
|
||||
+vgcreate $vg1 "$dev1"
|
||||
+vgs -o systemid --noheadings $vg1 | awk '{print $1}' > sid_vg
|
||||
+diff sid_lvm sid_vg
|
||||
+vgremove $vg1
|
||||
+fi
|
||||
+
|
||||
## uname
|
||||
|
||||
SID1=$(uname -n)
|
||||
--
|
||||
1.8.3.1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,335 +0,0 @@
|
||||
From 0621739db9b751c48b8e7a6d67941aeca9fa2154 Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Wed, 24 Mar 2021 14:19:54 -0500
|
||||
Subject: [PATCH 05/11] logging: to the systemd journal
|
||||
|
||||
Configure via lvm.conf log/journal or command line --journal.
|
||||
|
||||
Possible values:
|
||||
"command" records command information.
|
||||
"output" records default command output.
|
||||
"debug" records full command debugging.
|
||||
|
||||
Multiple values can be set in lvm.conf as an array.
|
||||
One value can be set in --journal which is added to
|
||||
values set in lvm.conf
|
||||
---
|
||||
lib/commands/toolcontext.c | 30 +++++++++++++++
|
||||
lib/commands/toolcontext.h | 1 +
|
||||
lib/config/config_settings.h | 6 +++
|
||||
lib/log/log.c | 91 ++++++++++++++++++++++++++++++++++++++++++++
|
||||
lib/log/log.h | 4 ++
|
||||
lib/log/lvm-logging.h | 6 +++
|
||||
tools/args.h | 8 ++++
|
||||
tools/command-lines.in | 2 +-
|
||||
tools/lvmcmdline.c | 12 ++++++
|
||||
9 files changed, 159 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c
|
||||
index 8991aeb..f939c3e 100644
|
||||
--- a/lib/commands/toolcontext.c
|
||||
+++ b/lib/commands/toolcontext.c
|
||||
@@ -340,6 +340,33 @@ static int _parse_debug_classes(struct cmd_context *cmd)
|
||||
return debug_classes;
|
||||
}
|
||||
|
||||
+static uint32_t _parse_log_journal(struct cmd_context *cmd, int cfg, const char *cfgname)
|
||||
+{
|
||||
+ const struct dm_config_node *cn;
|
||||
+ const struct dm_config_value *cv;
|
||||
+ uint32_t fields = 0;
|
||||
+ uint32_t val;
|
||||
+
|
||||
+ if (!(cn = find_config_tree_array(cmd, cfg, NULL))) {
|
||||
+ log_debug("Unable to find configuration for log/%s.", cfgname);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ for (cv = cn->v; cv; cv = cv->next) {
|
||||
+ if (cv->type != DM_CFG_STRING) {
|
||||
+ log_verbose("log/%s contains a value which is not a string. Ignoring.", cfgname);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if ((val = log_journal_str_to_val(cv->v.str)))
|
||||
+ fields |= val;
|
||||
+ else
|
||||
+ log_verbose("Unrecognised value for log/%s: %s", cfgname, cv->v.str);
|
||||
+ }
|
||||
+
|
||||
+ return fields;
|
||||
+}
|
||||
+
|
||||
static void _init_logging(struct cmd_context *cmd)
|
||||
{
|
||||
int append = 1;
|
||||
@@ -408,6 +435,9 @@ static void _init_logging(struct cmd_context *cmd)
|
||||
init_debug_file_fields(_parse_debug_fields(cmd, log_debug_file_fields_CFG, "debug_file_fields"));
|
||||
init_debug_output_fields(_parse_debug_fields(cmd, log_debug_output_fields_CFG, "debug_output_fields"));
|
||||
|
||||
+ cmd->default_settings.journal = _parse_log_journal(cmd, log_journal_CFG, "journal");
|
||||
+ init_log_journal(cmd->default_settings.journal);
|
||||
+
|
||||
t = time(NULL);
|
||||
ctime_r(&t, &timebuf[0]);
|
||||
timebuf[24] = '\0';
|
||||
diff --git a/lib/commands/toolcontext.h b/lib/commands/toolcontext.h
|
||||
index 0cb4ad7..2ee6524 100644
|
||||
--- a/lib/commands/toolcontext.h
|
||||
+++ b/lib/commands/toolcontext.h
|
||||
@@ -41,6 +41,7 @@ struct config_info {
|
||||
int udev_sync;
|
||||
int udev_fallback;
|
||||
int issue_discards;
|
||||
+ uint32_t journal;
|
||||
const char *msg_prefix;
|
||||
const char *fmt_name;
|
||||
const char *dmeventd_executable;
|
||||
diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h
|
||||
index 76ebc10..63569bf 100644
|
||||
--- a/lib/config/config_settings.h
|
||||
+++ b/lib/config/config_settings.h
|
||||
@@ -871,6 +871,12 @@ cfg(log_syslog_CFG, "syslog", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_B
|
||||
cfg(log_file_CFG, "file", log_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Write error and debug log messages to a file specified here.\n")
|
||||
|
||||
+cfg_array(log_journal_CFG, "journal", log_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, NULL, vsn(2, 3, 12), NULL, 0, NULL,
|
||||
+ "Record lvm information in the systemd journal.\n"
|
||||
+ "command: record commands that are run.\n"
|
||||
+ "output: record default output from commands.\n"
|
||||
+ "debug: record debug messages from commands.\n")
|
||||
+
|
||||
cfg(log_overwrite_CFG, "overwrite", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_OVERWRITE, vsn(1, 0, 0), NULL, 0, NULL,
|
||||
"Overwrite the log file each time the program is run.\n")
|
||||
|
||||
diff --git a/lib/log/log.c b/lib/log/log.c
|
||||
index 53ff5b1..8ebbf94 100644
|
||||
--- a/lib/log/log.c
|
||||
+++ b/lib/log/log.c
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <syslog.h>
|
||||
#include <ctype.h>
|
||||
#include <time.h>
|
||||
+#include <systemd/sd-journal.h>
|
||||
|
||||
static FILE *_log_file;
|
||||
static char _log_file_path[PATH_MAX];
|
||||
@@ -40,6 +41,7 @@ static char _msg_prefix[30] = " ";
|
||||
static int _abort_on_internal_errors_config = 0;
|
||||
static uint32_t _debug_file_fields;
|
||||
static uint32_t _debug_output_fields;
|
||||
+static uint32_t _log_journal = 0;
|
||||
|
||||
static lvm2_log_fn_t _lvm2_log_fn = NULL;
|
||||
|
||||
@@ -455,6 +457,11 @@ void init_debug_output_fields(uint32_t debug_fields)
|
||||
_debug_output_fields = debug_fields;
|
||||
}
|
||||
|
||||
+void init_log_journal(uint32_t fields)
|
||||
+{
|
||||
+ _log_journal = fields;
|
||||
+}
|
||||
+
|
||||
static void _set_time_prefix(char *prefix, int buflen)
|
||||
{
|
||||
|
||||
@@ -609,6 +616,33 @@ static void _vprint_log(int level, const char *file, int line, int dm_errno_or_c
|
||||
}
|
||||
|
||||
log_it:
|
||||
+
|
||||
+ if (_log_journal) {
|
||||
+ int to_journal = 0;
|
||||
+
|
||||
+ /* By default the visible command output is _LOG_WARN or less. */
|
||||
+
|
||||
+ if (_log_journal & LOG_JOURNAL_DEBUG)
|
||||
+ to_journal = 1;
|
||||
+ if ((_log_journal & LOG_JOURNAL_OUTPUT) && (log_level(level) <= _LOG_WARN))
|
||||
+ to_journal = 1;
|
||||
+
|
||||
+ if (to_journal) {
|
||||
+ int prio;
|
||||
+ switch (log_level(level)) {
|
||||
+ case _LOG_ERR: prio = LOG_ERR; break;
|
||||
+ case _LOG_WARN: prio = LOG_WARNING; break;
|
||||
+ case _LOG_INFO: prio = LOG_INFO; break;
|
||||
+ case _LOG_NOTICE: prio = LOG_NOTICE; break;
|
||||
+ case _LOG_DEBUG: prio = LOG_DEBUG; break;
|
||||
+ default: prio = LOG_INFO;
|
||||
+ }
|
||||
+ va_copy(ap, orig_ap);
|
||||
+ sd_journal_printv(prio, trformat, ap);
|
||||
+ va_end(ap);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (!logged_via_report && ((verbose_level() >= level) && !_log_suppress)) {
|
||||
if (verbose_level() > _LOG_DEBUG) {
|
||||
memset(buf, 0, sizeof(buf));
|
||||
@@ -792,3 +826,60 @@ void log_set_report_object_name_and_id(const char *name, const char *id)
|
||||
_log_report.object_name = name;
|
||||
_log_report.object_id = id;
|
||||
}
|
||||
+
|
||||
+/*
|
||||
+ * TODO: log/journal=["daemon_command"]
|
||||
+ * daemon_command: record commands that are run by an lvm daemon.
|
||||
+ * (i.e. not commands run directly by a user.)
|
||||
+ * For this we need to be able to clearly identify when a command is
|
||||
+ * being run by dmeventd/lvmpolld/lvmdbusd.
|
||||
+ *
|
||||
+ * TODO: log/journal_commmand_names=["lvcreate","lvconvert"]
|
||||
+ * This would restrict log/journal=["command"] to the listed command names.
|
||||
+ * Also allow "!command" to exclude a command, e.g. ["!pvs"]
|
||||
+ *
|
||||
+ * TODO: log/journal_daemon_command_names=["lvcreate","lvconvert"]
|
||||
+ * This would restrict log/journal=["dameon_command"] to the listed command names.
|
||||
+ *
|
||||
+ * TODO: log/journal_daemon_names=["dmeventd"]
|
||||
+ * This would restrict log/journal=["daemon_command"] to commands run by
|
||||
+ * the named daemon.
|
||||
+ *
|
||||
+ * TODO: log/command_to_file=<path> would write this info to the file.
|
||||
+ *
|
||||
+ * TODO: log/debug_to_file=<path> would write full debugging to the file.
|
||||
+ * (the same effect as log/file=<path> log/level=7)
|
||||
+ */
|
||||
+
|
||||
+void log_command(const char *cmd_line, const char *cmd_name, const char *cmd_id)
|
||||
+{
|
||||
+ if (_log_journal & LOG_JOURNAL_COMMAND) {
|
||||
+
|
||||
+ /*
|
||||
+ * TODO: DAEMON=dmeventd|lvmpolld|lvmdbusd,
|
||||
+ * Could we include caller info such as libblkid, udev rule, etc?
|
||||
+ * Does systemd already record the caller for us?
|
||||
+ */
|
||||
+
|
||||
+ /* The command line, pid, and other things are automatically included. */
|
||||
+
|
||||
+ sd_journal_send("MESSAGE=lvm command %s", cmd_name,
|
||||
+ "MESSAGE_ID=3ca432788c374e4ba684b834188eca36",
|
||||
+ "LVM_CMD_NAME=%s", cmd_name,
|
||||
+ "LVM_CMD_ID=%s", cmd_id,
|
||||
+ "PRIORITY=%i", LOG_INFO,
|
||||
+ NULL);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+uint32_t log_journal_str_to_val(const char *str)
|
||||
+{
|
||||
+ if (!strcasecmp(str, "command"))
|
||||
+ return LOG_JOURNAL_COMMAND;
|
||||
+ if (!strcasecmp(str, "output"))
|
||||
+ return LOG_JOURNAL_OUTPUT;
|
||||
+ if (!strcasecmp(str, "debug"))
|
||||
+ return LOG_JOURNAL_DEBUG;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
diff --git a/lib/log/log.h b/lib/log/log.h
|
||||
index d3848a4..b5f05f2 100644
|
||||
--- a/lib/log/log.h
|
||||
+++ b/lib/log/log.h
|
||||
@@ -63,6 +63,10 @@
|
||||
#define LOG_DEBUG_FIELD_FILELINE 0x0004
|
||||
#define LOG_DEBUG_FIELD_MESSAGE 0x0008
|
||||
|
||||
+#define LOG_JOURNAL_COMMAND 0x0001
|
||||
+#define LOG_JOURNAL_OUTPUT 0x0002
|
||||
+#define LOG_JOURNAL_DEBUG 0x0004
|
||||
+
|
||||
|
||||
/*
|
||||
* Classes available for debug log messages.
|
||||
diff --git a/lib/log/lvm-logging.h b/lib/log/lvm-logging.h
|
||||
index 39108fc..fb18a41 100644
|
||||
--- a/lib/log/lvm-logging.h
|
||||
+++ b/lib/log/lvm-logging.h
|
||||
@@ -62,6 +62,12 @@ void reset_log_duplicated(void);
|
||||
void init_syslog(int facility);
|
||||
void fin_syslog(void);
|
||||
|
||||
+void init_log_journal(uint32_t fields);
|
||||
+uint32_t log_journal_str_to_val(const char *str);
|
||||
+
|
||||
+void log_command(const char *cmd_line, const char *cmd_name, const char *cmd_id);
|
||||
+
|
||||
+
|
||||
int error_message_produced(void);
|
||||
void reset_lvm_errno(int store_errmsg);
|
||||
int stored_errno(void);
|
||||
diff --git a/tools/args.h b/tools/args.h
|
||||
index 9aeec40..71db7f5 100644
|
||||
--- a/tools/args.h
|
||||
+++ b/tools/args.h
|
||||
@@ -323,6 +323,14 @@ arg(ignoreunsupported_ARG, '\0', "ignoreunsupported", 0, 0, 0,
|
||||
arg(importdevices_ARG, '\0', "importdevices", 0, 0, 0,
|
||||
"Add devices to the devices file.\n")
|
||||
|
||||
+arg(journal_ARG, '\0', "journal", string_VAL, 0, 0,
|
||||
+ "Record information in the systemd journal.\n"
|
||||
+ "This information is in addition to information\n"
|
||||
+ "enabled by the lvm.conf log/journal setting.\n"
|
||||
+ "command: record information about the command.\n"
|
||||
+ "output: record the default command output.\n"
|
||||
+ "debug: record full command debugging.\n")
|
||||
+
|
||||
arg(labelsector_ARG, '\0', "labelsector", number_VAL, 0, 0,
|
||||
"By default the PV is labelled with an LVM2 identifier in its second\n"
|
||||
"sector (sector 1). This lets you use a different sector near the\n"
|
||||
diff --git a/tools/command-lines.in b/tools/command-lines.in
|
||||
index aa3e3d9..68374c0 100644
|
||||
--- a/tools/command-lines.in
|
||||
+++ b/tools/command-lines.in
|
||||
@@ -204,7 +204,7 @@
|
||||
#
|
||||
OO_ALL: --commandprofile String, --config String, --debug,
|
||||
--driverloaded Bool, --help, --nolocking, --lockopt String, --longhelp, --profile String, --quiet,
|
||||
---verbose, --version, --yes, --test, --devicesfile String, --devices PV
|
||||
+--verbose, --version, --yes, --test, --devicesfile String, --devices PV, --journal String
|
||||
|
||||
#
|
||||
# options for pvs, lvs, vgs, fullreport
|
||||
diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c
|
||||
index 6ea5487..222cd5b 100644
|
||||
--- a/tools/lvmcmdline.c
|
||||
+++ b/tools/lvmcmdline.c
|
||||
@@ -2016,6 +2016,8 @@ out:
|
||||
log_debug("Recognised command %s (id %d / enum %d).",
|
||||
commands[best_i].command_id, best_i, commands[best_i].command_enum);
|
||||
|
||||
+ log_command(cmd->cmd_line, commands[best_i].name, commands[best_i].command_id);
|
||||
+
|
||||
return &commands[best_i];
|
||||
}
|
||||
|
||||
@@ -2404,6 +2406,15 @@ static void _get_current_output_settings_from_args(struct cmd_context *cmd)
|
||||
cmd->current_settings.verbose = 0;
|
||||
cmd->current_settings.silent = (arg_count(cmd, quiet_ARG) > 1) ? 1 : 0;
|
||||
}
|
||||
+
|
||||
+ /*
|
||||
+ * default_settings.journal is already set from config and has already been
|
||||
+ * applied using init_log_journal().
|
||||
+ * current_settings have been set to default_settings.
|
||||
+ * now --journal value adds to current_settings.
|
||||
+ */
|
||||
+ if (arg_is_set(cmd, journal_ARG))
|
||||
+ cmd->current_settings.journal |= log_journal_str_to_val(arg_str_value(cmd, journal_ARG, ""));
|
||||
}
|
||||
|
||||
static void _apply_current_output_settings(struct cmd_context *cmd)
|
||||
@@ -2413,6 +2424,7 @@ static void _apply_current_output_settings(struct cmd_context *cmd)
|
||||
init_debug_classes_logged(cmd->default_settings.debug_classes);
|
||||
init_verbose(cmd->current_settings.verbose + VERBOSE_BASE_LEVEL);
|
||||
init_silent(cmd->current_settings.silent);
|
||||
+ init_log_journal(cmd->current_settings.journal);
|
||||
}
|
||||
|
||||
static int _read_devices_list(struct cmd_context *cmd)
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,555 +0,0 @@
|
||||
From 15562a3c2761d206e47258ee11e25dac17427fce Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Fri, 26 Mar 2021 11:39:05 -0500
|
||||
Subject: [PATCH 06/11] new udev autoactivation
|
||||
|
||||
new udev rule 69-dm-lvm.rules replaces
|
||||
69-dm-lvm-meta.rules and lvm2-pvscan.service
|
||||
|
||||
udev rule calls pvscan directly on the added device
|
||||
|
||||
pvscan output indicates if a complete VG can be activated
|
||||
|
||||
udev env var LVM_VG_NAME_COMPLETE is used to pass complete
|
||||
VG name from pvscan to the udev rule
|
||||
|
||||
udev rule uses systemd-run to run vgchange -aay <vgname>
|
||||
---
|
||||
scripts/Makefile.in | 1 -
|
||||
test/shell/udev-pvscan-vgchange.sh | 403 +++++++++++++++++++++++++++++++++++++
|
||||
udev/69-dm-lvm.rules.in | 87 ++++++++
|
||||
udev/Makefile.in | 2 +-
|
||||
5 files changed, 492 insertions(+), 4 deletions(-)
|
||||
create mode 100644 test/shell/udev-pvscan-vgchange.sh
|
||||
create mode 100644 udev/69-dm-lvm.rules.in
|
||||
|
||||
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
|
||||
index 1fe88ca..60449e1 100644
|
||||
--- a/scripts/Makefile.in
|
||||
+++ b/scripts/Makefile.in
|
||||
@@ -92,7 +92,6 @@ install_systemd_generators:
|
||||
install_systemd_units: install_dbus_service
|
||||
@echo " [INSTALL] systemd_units"
|
||||
$(Q) $(INSTALL_DIR) $(systemd_unit_dir)
|
||||
- $(Q) $(INSTALL_DATA) lvm2-pvscan.service $(systemd_unit_dir)/lvm2-pvscan@.service
|
||||
ifeq ("@BUILD_DMEVENTD@", "yes")
|
||||
$(Q) $(INSTALL_DATA) dm_event_systemd_red_hat.socket $(systemd_unit_dir)/dm-event.socket
|
||||
$(Q) $(INSTALL_DATA) dm_event_systemd_red_hat.service $(systemd_unit_dir)/dm-event.service
|
||||
diff --git a/test/shell/udev-pvscan-vgchange.sh b/test/shell/udev-pvscan-vgchange.sh
|
||||
new file mode 100644
|
||||
index 0000000..c81acf0
|
||||
--- /dev/null
|
||||
+++ b/test/shell/udev-pvscan-vgchange.sh
|
||||
@@ -0,0 +1,403 @@
|
||||
+#!/usr/bin/env bash
|
||||
+
|
||||
+# Copyright (C) 2021 Red Hat, Inc. All rights reserved.
|
||||
+#
|
||||
+# This copyrighted material is made available to anyone wishing to use,
|
||||
+# modify, copy, or redistribute it subject to the terms and conditions
|
||||
+# of the GNU General Public License v.2.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program; if not, write to the Free Software Foundation,
|
||||
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
+
|
||||
+test_description='udev rule and systemd unit run vgchange'
|
||||
+
|
||||
+SKIP_WITH_LVMPOLLD=1
|
||||
+SKIP_WITH_LVMLOCKD=1
|
||||
+
|
||||
+. lib/inittest
|
||||
+
|
||||
+#
|
||||
+# $ cat /tmp/devs
|
||||
+# /dev/sdb
|
||||
+# /dev/sdc
|
||||
+# /dev/sdd
|
||||
+#
|
||||
+# Specify this file as LVM_TEST_DEVICE_LIST=/tmp/devs
|
||||
+# when running the test.
|
||||
+#
|
||||
+# This test will wipe these devices.
|
||||
+#
|
||||
+
|
||||
+if [ -z ${LVM_TEST_DEVICE_LIST+x} ]; then echo "LVM_TEST_DEVICE_LIST is unset" && skip; else echo "LVM_TEST_DEVICE_LIST is set to '$LVM_TEST_DEVICE_LIST'"; fi
|
||||
+
|
||||
+test -e "$LVM_TEST_DEVICE_LIST" || skip
|
||||
+
|
||||
+num_devs=$(cat $LVM_TEST_DEVICE_LIST | wc -l)
|
||||
+
|
||||
+RUNDIR="/run"
|
||||
+test -d "$RUNDIR" || RUNDIR="/var/run"
|
||||
+PVS_ONLINE_DIR="$RUNDIR/lvm/pvs_online"
|
||||
+VGS_ONLINE_DIR="$RUNDIR/lvm/vgs_online"
|
||||
+PVS_LOOKUP_DIR="$RUNDIR/lvm/pvs_lookup"
|
||||
+
|
||||
+_clear_online_files() {
|
||||
+ # wait till udev is finished
|
||||
+ aux udev_wait
|
||||
+ rm -f "$PVS_ONLINE_DIR"/*
|
||||
+ rm -f "$VGS_ONLINE_DIR"/*
|
||||
+ rm -f "$PVS_LOOKUP_DIR"/*
|
||||
+}
|
||||
+
|
||||
+test -d "$PVS_ONLINE_DIR" || mkdir -p "$PVS_ONLINE_DIR"
|
||||
+test -d "$VGS_ONLINE_DIR" || mkdir -p "$VGS_ONLINE_DIR"
|
||||
+test -d "$PVS_LOOKUP_DIR" || mkdir -p "$PVS_LOOKUP_DIR"
|
||||
+_clear_online_files
|
||||
+
|
||||
+aux prepare_real_devs
|
||||
+
|
||||
+aux lvmconf 'devices/dir = "/dev"'
|
||||
+aux lvmconf 'devices/use_devicesfile = 1'
|
||||
+DFDIR="$LVM_SYSTEM_DIR/devices"
|
||||
+DF="$DFDIR/system.devices"
|
||||
+mkdir $DFDIR || true
|
||||
+not ls $DF
|
||||
+
|
||||
+get_real_devs
|
||||
+
|
||||
+wipe_all() {
|
||||
+ for dev in "${REAL_DEVICES[@]}"; do
|
||||
+ wipefs -a $dev
|
||||
+ done
|
||||
+}
|
||||
+
|
||||
+# udevadm trigger runs udev rule which runs systemd-run --no-wait vgchange -aay
|
||||
+# Because of --no-wait, we need to wait for the transient systemd
|
||||
+# service to be gone before checking the effects of the vgchange.
|
||||
+
|
||||
+wait_lvm_activate() {
|
||||
+ local vgw=$1
|
||||
+ local wait=0
|
||||
+
|
||||
+ while systemctl status lvm-activate-$vgw > /dev/null && test "$wait" -le 30; do
|
||||
+ sleep .2
|
||||
+ wait=$(( wait + 1 ))
|
||||
+ done
|
||||
+}
|
||||
+
|
||||
+# Test requires 3 devs
|
||||
+test $num_devs -gt 2 || skip
|
||||
+BDEV1=$(basename "$dev1")
|
||||
+BDEV2=$(basename "$dev2")
|
||||
+BDEV3=$(basename "$dev3")
|
||||
+
|
||||
+wipe_all
|
||||
+touch $DF
|
||||
+for dev in "${REAL_DEVICES[@]}"; do
|
||||
+ pvcreate $dev
|
||||
+done
|
||||
+
|
||||
+# 1 dev, 1 vg, 1 lv
|
||||
+
|
||||
+vgcreate $vg1 "$dev1"
|
||||
+lvcreate -l1 -an -n $lv1 $vg1 "$dev1"
|
||||
+
|
||||
+PVID1=$(pvs "$dev1" --noheading -o uuid | tr -d - | awk '{print $1}')
|
||||
+
|
||||
+_clear_online_files
|
||||
+udevadm trigger --settle -c add /sys/block/$BDEV1
|
||||
+
|
||||
+wait_lvm_activate $vg1
|
||||
+
|
||||
+ls "$RUNDIR/lvm/pvs_online/$PVID1"
|
||||
+ls "$RUNDIR/lvm/vgs_online/$vg1"
|
||||
+journalctl -u lvm-activate-$vg1 | tee out || true
|
||||
+grep "now active" out
|
||||
+check lv_field $vg1/$lv1 lv_active "active"
|
||||
+
|
||||
+vgchange -an $vg1
|
||||
+vgremove -y $vg1
|
||||
+
|
||||
+
|
||||
+# 2 devs, 1 vg, 2 lvs
|
||||
+
|
||||
+vgcreate $vg2 "$dev1" "$dev2"
|
||||
+lvcreate -l1 -an -n $lv1 $vg2 "$dev1"
|
||||
+lvcreate -l1 -an -n $lv2 $vg2 "$dev2"
|
||||
+
|
||||
+PVID1=$(pvs "$dev1" --noheading -o uuid | tr -d - | awk '{print $1}')
|
||||
+PVID2=$(pvs "$dev2" --noheading -o uuid | tr -d - | awk '{print $1}')
|
||||
+
|
||||
+_clear_online_files
|
||||
+
|
||||
+udevadm trigger --settle -c add /sys/block/$BDEV1
|
||||
+ls "$RUNDIR/lvm/pvs_online/$PVID1"
|
||||
+not ls "$RUNDIR/lvm/vgs_online/$vg2"
|
||||
+journalctl -u lvm-activate-$vg2 | tee out || true
|
||||
+not grep "now active" out
|
||||
+check lv_field $vg2/$lv1 lv_active ""
|
||||
+check lv_field $vg2/$lv2 lv_active ""
|
||||
+
|
||||
+udevadm trigger --settle -c add /sys/block/$BDEV2
|
||||
+ls "$RUNDIR/lvm/pvs_online/$PVID2"
|
||||
+ls "$RUNDIR/lvm/vgs_online/$vg2"
|
||||
+
|
||||
+wait_lvm_activate $vg2
|
||||
+
|
||||
+journalctl -u lvm-activate-$vg2 | tee out || true
|
||||
+grep "now active" out
|
||||
+check lv_field $vg2/$lv1 lv_active "active"
|
||||
+check lv_field $vg2/$lv2 lv_active "active"
|
||||
+
|
||||
+vgchange -an $vg2
|
||||
+vgremove -y $vg2
|
||||
+
|
||||
+
|
||||
+# 3 devs, 1 vg, 4 lvs, concurrent pvscans
|
||||
+# (attempting to have the pvscans run concurrently and race
|
||||
+# to activate the VG)
|
||||
+
|
||||
+vgcreate $vg3 "$dev1" "$dev2" "$dev3"
|
||||
+lvcreate -l1 -an -n $lv1 $vg3 "$dev1"
|
||||
+lvcreate -l1 -an -n $lv2 $vg3 "$dev2"
|
||||
+lvcreate -l1 -an -n $lv3 $vg3 "$dev3"
|
||||
+lvcreate -l8 -an -n $lv4 -i 2 $vg3 "$dev1" "$dev2"
|
||||
+
|
||||
+PVID1=$(pvs "$dev1" --noheading -o uuid | tr -d - | awk '{print $1}')
|
||||
+PVID2=$(pvs "$dev2" --noheading -o uuid | tr -d - | awk '{print $1}')
|
||||
+PVID3=$(pvs "$dev3" --noheading -o uuid | tr -d - | awk '{print $1}')
|
||||
+
|
||||
+_clear_online_files
|
||||
+
|
||||
+udevadm trigger -c add /sys/block/$BDEV1 &
|
||||
+udevadm trigger -c add /sys/block/$BDEV2 &
|
||||
+udevadm trigger -c add /sys/block/$BDEV3
|
||||
+
|
||||
+aux udev_wait
|
||||
+wait_lvm_activate $vg3
|
||||
+
|
||||
+ls "$RUNDIR/lvm/pvs_online/$PVID1"
|
||||
+ls "$RUNDIR/lvm/pvs_online/$PVID2"
|
||||
+ls "$RUNDIR/lvm/pvs_online/$PVID3"
|
||||
+ls "$RUNDIR/lvm/vgs_online/$vg3"
|
||||
+journalctl -u lvm-activate-$vg3 | tee out || true
|
||||
+grep "now active" out
|
||||
+check lv_field $vg3/$lv1 lv_active "active"
|
||||
+check lv_field $vg3/$lv2 lv_active "active"
|
||||
+check lv_field $vg3/$lv3 lv_active "active"
|
||||
+check lv_field $vg3/$lv4 lv_active "active"
|
||||
+
|
||||
+vgchange -an $vg3
|
||||
+vgremove -y $vg3
|
||||
+
|
||||
+
|
||||
+# 3 devs, 1 vg, 4 lvs, concurrent pvscans, metadata on only 1 PV
|
||||
+
|
||||
+wipe_all
|
||||
+rm $DF
|
||||
+touch $DF
|
||||
+pvcreate --metadatacopies 0 "$dev1"
|
||||
+pvcreate --metadatacopies 0 "$dev2"
|
||||
+pvcreate "$dev3"
|
||||
+
|
||||
+vgcreate $vg4 "$dev1" "$dev2" "$dev3"
|
||||
+lvcreate -l1 -an -n $lv1 $vg4 "$dev1"
|
||||
+lvcreate -l1 -an -n $lv2 $vg4 "$dev2"
|
||||
+lvcreate -l1 -an -n $lv3 $vg4 "$dev3"
|
||||
+lvcreate -l8 -an -n $lv4 -i 2 $vg4 "$dev1" "$dev2"
|
||||
+
|
||||
+PVID1=$(pvs "$dev1" --noheading -o uuid | tr -d - | awk '{print $1}')
|
||||
+PVID2=$(pvs "$dev2" --noheading -o uuid | tr -d - | awk '{print $1}')
|
||||
+PVID3=$(pvs "$dev3" --noheading -o uuid | tr -d - | awk '{print $1}')
|
||||
+
|
||||
+_clear_online_files
|
||||
+
|
||||
+udevadm trigger -c add /sys/block/$BDEV1 &
|
||||
+udevadm trigger -c add /sys/block/$BDEV2 &
|
||||
+udevadm trigger -c add /sys/block/$BDEV3
|
||||
+
|
||||
+aux udev_wait
|
||||
+wait_lvm_activate $vg4
|
||||
+
|
||||
+ls "$RUNDIR/lvm/pvs_online/$PVID1"
|
||||
+ls "$RUNDIR/lvm/pvs_online/$PVID2"
|
||||
+ls "$RUNDIR/lvm/pvs_online/$PVID3"
|
||||
+ls "$RUNDIR/lvm/vgs_online/$vg4"
|
||||
+journalctl -u lvm-activate-$vg4 | tee out || true
|
||||
+grep "now active" out
|
||||
+check lv_field $vg4/$lv1 lv_active "active"
|
||||
+check lv_field $vg4/$lv2 lv_active "active"
|
||||
+check lv_field $vg4/$lv3 lv_active "active"
|
||||
+check lv_field $vg4/$lv4 lv_active "active"
|
||||
+
|
||||
+vgchange -an $vg4
|
||||
+vgremove -y $vg4
|
||||
+
|
||||
+
|
||||
+# 3 devs, 3 vgs, 2 lvs in each vg, concurrent pvscans
|
||||
+
|
||||
+wipe_all
|
||||
+rm $DF
|
||||
+touch $DF
|
||||
+
|
||||
+vgcreate $vg5 "$dev1"
|
||||
+vgcreate $vg6 "$dev2"
|
||||
+vgcreate $vg7 "$dev3"
|
||||
+lvcreate -l1 -an -n $lv1 $vg5
|
||||
+lvcreate -l1 -an -n $lv2 $vg5
|
||||
+lvcreate -l1 -an -n $lv1 $vg6
|
||||
+lvcreate -l1 -an -n $lv2 $vg6
|
||||
+lvcreate -l1 -an -n $lv1 $vg7
|
||||
+lvcreate -l1 -an -n $lv2 $vg7
|
||||
+
|
||||
+_clear_online_files
|
||||
+
|
||||
+udevadm trigger -c add /sys/block/$BDEV1 &
|
||||
+udevadm trigger -c add /sys/block/$BDEV2 &
|
||||
+udevadm trigger -c add /sys/block/$BDEV3
|
||||
+
|
||||
+aux udev_wait
|
||||
+wait_lvm_activate $vg5
|
||||
+wait_lvm_activate $vg6
|
||||
+wait_lvm_activate $vg7
|
||||
+
|
||||
+ls "$RUNDIR/lvm/vgs_online/$vg5"
|
||||
+ls "$RUNDIR/lvm/vgs_online/$vg6"
|
||||
+ls "$RUNDIR/lvm/vgs_online/$vg7"
|
||||
+journalctl -u lvm-activate-$vg5 | tee out || true
|
||||
+grep "now active" out
|
||||
+journalctl -u lvm-activate-$vg6 | tee out || true
|
||||
+grep "now active" out
|
||||
+journalctl -u lvm-activate-$vg7 | tee out || true
|
||||
+grep "now active" out
|
||||
+check lv_field $vg5/$lv1 lv_active "active"
|
||||
+check lv_field $vg5/$lv2 lv_active "active"
|
||||
+check lv_field $vg6/$lv1 lv_active "active"
|
||||
+check lv_field $vg6/$lv2 lv_active "active"
|
||||
+check lv_field $vg7/$lv1 lv_active "active"
|
||||
+check lv_field $vg7/$lv2 lv_active "active"
|
||||
+
|
||||
+vgchange -an $vg5
|
||||
+vgremove -y $vg5
|
||||
+vgchange -an $vg6
|
||||
+vgremove -y $vg6
|
||||
+vgchange -an $vg7
|
||||
+vgremove -y $vg7
|
||||
+
|
||||
+# 3 devs, 1 vg, 1000 LVs
|
||||
+
|
||||
+wipe_all
|
||||
+rm $DF
|
||||
+touch $DF
|
||||
+pvcreate --metadatacopies 0 "$dev1"
|
||||
+pvcreate "$dev2"
|
||||
+pvcreate "$dev3"
|
||||
+vgcreate -s 128K $vg8 "$dev1" "$dev2" "$dev3"
|
||||
+
|
||||
+# Number of LVs to create
|
||||
+TEST_DEVS=1000
|
||||
+# On low-memory boxes let's not stress too much
|
||||
+test "$(aux total_mem)" -gt 524288 || TEST_DEVS=256
|
||||
+
|
||||
+vgcfgbackup -f data $vg8
|
||||
+
|
||||
+# Generate a lot of devices (size of 1 extent)
|
||||
+awk -v TEST_DEVS=$TEST_DEVS '/^\t\}/ {
|
||||
+ printf("\t}\n\tlogical_volumes {\n");
|
||||
+ cnt=0;
|
||||
+ for (i = 0; i < TEST_DEVS; i++) {
|
||||
+ printf("\t\tlvol%06d {\n", i);
|
||||
+ printf("\t\t\tid = \"%06d-1111-2222-3333-2222-1111-%06d\"\n", i, i);
|
||||
+ print "\t\t\tstatus = [\"READ\", \"WRITE\", \"VISIBLE\"]";
|
||||
+ print "\t\t\tsegment_count = 1";
|
||||
+ print "\t\t\tsegment1 {";
|
||||
+ print "\t\t\t\tstart_extent = 0";
|
||||
+ print "\t\t\t\textent_count = 1";
|
||||
+ print "\t\t\t\ttype = \"striped\"";
|
||||
+ print "\t\t\t\tstripe_count = 1";
|
||||
+ print "\t\t\t\tstripes = [";
|
||||
+ print "\t\t\t\t\t\"pv0\", " cnt++;
|
||||
+ printf("\t\t\t\t]\n\t\t\t}\n\t\t}\n");
|
||||
+ }
|
||||
+ }
|
||||
+ {print}
|
||||
+' data >data_new
|
||||
+
|
||||
+vgcfgrestore -f data_new $vg8
|
||||
+
|
||||
+_clear_online_files
|
||||
+
|
||||
+udevadm trigger -c add /sys/block/$BDEV1 &
|
||||
+udevadm trigger -c add /sys/block/$BDEV2 &
|
||||
+udevadm trigger -c add /sys/block/$BDEV3
|
||||
+
|
||||
+aux udev_wait
|
||||
+wait_lvm_activate $vg8
|
||||
+
|
||||
+ls "$RUNDIR/lvm/vgs_online/$vg8"
|
||||
+journalctl -u lvm-activate-$vg8 | tee out || true
|
||||
+grep "now active" out
|
||||
+
|
||||
+num_active=$(lvs $vg8 --noheading -o active | grep active | wc -l)
|
||||
+
|
||||
+test $num_active -eq $TEST_DEVS
|
||||
+
|
||||
+vgchange -an $vg8
|
||||
+vgremove -y $vg8
|
||||
+
|
||||
+# 1 pv on an md dev, 1 vg
|
||||
+
|
||||
+wait_md_create() {
|
||||
+ local md=$1
|
||||
+
|
||||
+ while :; do
|
||||
+ if ! grep "$(basename $md)" /proc/mdstat; then
|
||||
+ echo "$md not ready"
|
||||
+ cat /proc/mdstat
|
||||
+ sleep 2
|
||||
+ else
|
||||
+ break
|
||||
+ fi
|
||||
+ done
|
||||
+ echo "$md" > WAIT_MD_DEV
|
||||
+}
|
||||
+
|
||||
+test -f /proc/mdstat && grep -q raid1 /proc/mdstat || \
|
||||
+ modprobe raid1 || skip
|
||||
+
|
||||
+mddev="/dev/md33"
|
||||
+not grep $mddev /proc/mdstat || skip
|
||||
+
|
||||
+wipe_all
|
||||
+rm $DF
|
||||
+touch $DF
|
||||
+
|
||||
+mdadm --create --metadata=1.0 "$mddev" --level 1 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
|
||||
+wait_md_create "$mddev"
|
||||
+vgcreate $vg9 "$mddev"
|
||||
+
|
||||
+PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
|
||||
+BDEVMD=$(basename "$mddev")
|
||||
+
|
||||
+lvcreate -l1 -an -n $lv1 $vg9
|
||||
+lvcreate -l1 -an -n $lv2 $vg9
|
||||
+
|
||||
+_clear_online_files
|
||||
+
|
||||
+udevadm trigger --settle -c add /sys/block/$BDEVMD
|
||||
+
|
||||
+wait_lvm_activate $vg9
|
||||
+
|
||||
+ls "$RUNDIR/lvm/vgs_online/$vg9"
|
||||
+journalctl -u lvm-activate-$vg9 | tee out || true
|
||||
+grep "now active" out
|
||||
+check lv_field $vg9/$lv1 lv_active "active"
|
||||
+check lv_field $vg9/$lv2 lv_active "active"
|
||||
+
|
||||
+vgchange -an $vg9
|
||||
+vgremove -y $vg9
|
||||
+
|
||||
+mdadm --stop "$mddev"
|
||||
+aux udev_wait
|
||||
+wipe_all
|
||||
+
|
||||
diff --git a/udev/69-dm-lvm.rules.in b/udev/69-dm-lvm.rules.in
|
||||
new file mode 100644
|
||||
index 0000000..03c8fbb
|
||||
--- /dev/null
|
||||
+++ b/udev/69-dm-lvm.rules.in
|
||||
@@ -0,0 +1,87 @@
|
||||
+# Copyright (C) 2012,2021 Red Hat, Inc. All rights reserved.
|
||||
+#
|
||||
+# This file is part of LVM.
|
||||
+#
|
||||
+# This rule requires blkid to be called on block devices before so only devices
|
||||
+# used as LVM PVs are processed (ID_FS_TYPE="LVM2_member").
|
||||
+
|
||||
+SUBSYSTEM!="block", GOTO="lvm_end"
|
||||
+(LVM_EXEC_RULE)
|
||||
+
|
||||
+ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="lvm_end"
|
||||
+
|
||||
+# Only process devices already marked as a PV - this requires blkid to be called before.
|
||||
+ENV{ID_FS_TYPE}!="LVM2_member", GOTO="lvm_end"
|
||||
+ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="lvm_end"
|
||||
+ACTION=="remove", GOTO="lvm_end"
|
||||
+
|
||||
+# Create /dev/disk/by-id/lvm-pv-uuid-<PV_UUID> symlink for each PV
|
||||
+ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-id/lvm-pv-uuid-$env{ID_FS_UUID_ENC}"
|
||||
+
|
||||
+# If the PV is a special device listed below, scan only if the device is
|
||||
+# properly activated. These devices are not usable after an ADD event,
|
||||
+# but they require an extra setup and they are ready after a CHANGE event.
|
||||
+# Also support coldplugging with ADD event but only if the device is already
|
||||
+# properly activated.
|
||||
+# This logic should be eventually moved to rules where those particular
|
||||
+# devices are processed primarily (MD and loop).
|
||||
+
|
||||
+# DM device:
|
||||
+KERNEL!="dm-[0-9]*", GOTO="next"
|
||||
+ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", ENV{DM_ACTIVATION}=="1", GOTO="lvm_scan"
|
||||
+GOTO="lvm_end"
|
||||
+
|
||||
+# MD device:
|
||||
+LABEL="next"
|
||||
+KERNEL!="md[0-9]*", GOTO="next"
|
||||
+IMPORT{db}="LVM_MD_PV_ACTIVATED"
|
||||
+ACTION=="add", ENV{LVM_MD_PV_ACTIVATED}=="1", GOTO="lvm_scan"
|
||||
+ACTION=="change", ENV{LVM_MD_PV_ACTIVATED}!="1", TEST=="md/array_state", ENV{LVM_MD_PV_ACTIVATED}="1", GOTO="lvm_scan"
|
||||
+ACTION=="add", KERNEL=="md[0-9]*p[0-9]*", GOTO="lvm_scan"
|
||||
+ENV{LVM_MD_PV_ACTIVATED}!="1", ENV{SYSTEMD_READY}="0"
|
||||
+GOTO="lvm_end"
|
||||
+
|
||||
+# Loop device:
|
||||
+LABEL="next"
|
||||
+KERNEL!="loop[0-9]*", GOTO="next"
|
||||
+ACTION=="add", ENV{LVM_LOOP_PV_ACTIVATED}=="1", GOTO="lvm_scan"
|
||||
+ACTION=="change", ENV{LVM_LOOP_PV_ACTIVATED}!="1", TEST=="loop/backing_file", ENV{LVM_LOOP_PV_ACTIVATED}="1", GOTO="lvm_scan"
|
||||
+ENV{LVM_LOOP_PV_ACTIVATED}!="1", ENV{SYSTEMD_READY}="0"
|
||||
+GOTO="lvm_end"
|
||||
+
|
||||
+LABEL="next"
|
||||
+ACTION!="add", GOTO="lvm_end"
|
||||
+
|
||||
+LABEL="lvm_scan"
|
||||
+
|
||||
+ENV{SYSTEMD_READY}="1"
|
||||
+
|
||||
+# pvscan will check if this device completes a VG,
|
||||
+# i.e. all PVs in the VG are now present with the
|
||||
+# arrival of this PV. If so, it prints to stdout:
|
||||
+# LVM_VG_NAME_COMPLETE='foo'
|
||||
+#
|
||||
+# When the VG is complete it can be activated, so
|
||||
+# vgchange -aay <vgname> is run. It is run via
|
||||
+# systemd since it can take longer to run than
|
||||
+# udev wants to block when processing rules.
|
||||
+# (if there are hundreds of LVs to activate,
|
||||
+# the vgchange can take many seconds.)
|
||||
+#
|
||||
+# pvscan only reads the single device specified,
|
||||
+# and uses temp files under /run/lvm to check if
|
||||
+# other PVs in the VG are present.
|
||||
+#
|
||||
+# If event_activation=0 in lvm.conf, this pvscan
|
||||
+# (using checkcomplete) will do nothing, so that
|
||||
+# no event-based autoactivation will be happen.
|
||||
+#
|
||||
+# TODO: adjust the output of vgchange -aay so that
|
||||
+# it's better suited to appearing in the journal.
|
||||
+
|
||||
+IMPORT{program}="(LVM_EXEC)/lvm pvscan --cache --listvg --checkcomplete --vgonline --udevoutput --journal=output $env{DEVNAME}"
|
||||
+ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run --no-block --property DefaultDependencies=no --unit lvm-activate-$env{LVM_VG_NAME_COMPLETE} lvm vgchange -aay $env{LVM_VG_NAME_COMPLETE}"
|
||||
+GOTO="lvm_end"
|
||||
+
|
||||
+LABEL="lvm_end"
|
||||
+
|
||||
diff --git a/udev/Makefile.in b/udev/Makefile.in
|
||||
index e32cba9..e777dda 100644
|
||||
--- a/udev/Makefile.in
|
||||
+++ b/udev/Makefile.in
|
||||
@@ -18,7 +18,7 @@ top_builddir = @top_builddir@
|
||||
include $(top_builddir)/make.tmpl
|
||||
|
||||
DM_RULES=10-dm.rules 13-dm-disk.rules 95-dm-notify.rules
|
||||
-LVM_RULES=11-dm-lvm.rules 69-dm-lvm-metad.rules
|
||||
+LVM_RULES=11-dm-lvm.rules 69-dm-lvm.rules
|
||||
|
||||
DM_DIR=$(shell $(GREP) "\#define DM_DIR" $(top_srcdir)/libdm/misc/dm-ioctl.h | $(AWK) '{print $$3}')
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,184 +0,0 @@
|
||||
From 9dc9a14d41d5c91892bc03024cc80c742827baa3 Mon Sep 17 00:00:00 2001
|
||||
From: Marian Csontos <mcsontos@redhat.com>
|
||||
Date: Mon, 26 Apr 2021 14:27:05 +0200
|
||||
Subject: [PATCH 07/11] configure: update
|
||||
|
||||
---
|
||||
configure | 112 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
include/configure.h.in | 3 ++
|
||||
2 files changed, 115 insertions(+)
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index c2d2cff..0147902 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -774,6 +774,10 @@ UDEV_LIBS
|
||||
UDEV_CFLAGS
|
||||
SYSTEMD_LIBS
|
||||
SYSTEMD_CFLAGS
|
||||
+BLKID_LIBS
|
||||
+BLKID_CFLAGS
|
||||
+APP_MACHINEID_LIBS
|
||||
+APP_MACHINEID_CFLAGS
|
||||
NOTIFY_DBUS_LIBS
|
||||
NOTIFY_DBUS_CFLAGS
|
||||
BLKID_LIBS
|
||||
@@ -957,6 +961,7 @@ enable_use_lvmpolld
|
||||
with_lvmpolld_pidfile
|
||||
enable_dmfilemapd
|
||||
enable_notify_dbus
|
||||
+enable_app_machineid
|
||||
enable_blkid_wiping
|
||||
enable_udev_systemd_background_jobs
|
||||
enable_udev_sync
|
||||
@@ -1027,6 +1032,10 @@ LOCKD_DLM_CONTROL_CFLAGS
|
||||
LOCKD_DLM_CONTROL_LIBS
|
||||
LOCKD_IDM_CFLAGS
|
||||
LOCKD_IDM_LIBS
|
||||
+NOTIFY_DBUS_CFLAGS
|
||||
+NOTIFY_DBUS_LIBS
|
||||
+APP_MACHINEID_CFLAGS
|
||||
+APP_MACHINEID_LIBS
|
||||
BLKID_CFLAGS
|
||||
BLKID_LIBS
|
||||
NOTIFY_DBUS_CFLAGS
|
||||
@@ -1691,6 +1700,7 @@ Optional Features:
|
||||
--disable-use-lvmpolld disable usage of LVM Poll Daemon
|
||||
--enable-dmfilemapd enable the dmstats filemap daemon
|
||||
--enable-notify-dbus enable LVM notification using dbus
|
||||
+ --enable-app-machineid enable LVM system ID using app-specific machine-id
|
||||
--disable-blkid_wiping disable libblkid detection of signatures when wiping
|
||||
and use native code instead
|
||||
--disable-udev-systemd-background-jobs
|
||||
@@ -1853,6 +1863,13 @@ Some influential environment variables:
|
||||
C compiler flags for NOTIFY_DBUS, overriding pkg-config
|
||||
NOTIFY_DBUS_LIBS
|
||||
linker flags for NOTIFY_DBUS, overriding pkg-config
|
||||
+ APP_MACHINEID_CFLAGS
|
||||
+ C compiler flags for APP_MACHINEID, overriding pkg-config
|
||||
+ APP_MACHINEID_LIBS
|
||||
+ linker flags for APP_MACHINEID, overriding pkg-config
|
||||
+ BLKID_CFLAGS
|
||||
+ C compiler flags for BLKID, overriding pkg-config
|
||||
+ BLKID_LIBS linker flags for BLKID, overriding pkg-config
|
||||
SYSTEMD_CFLAGS
|
||||
C compiler flags for SYSTEMD, overriding pkg-config
|
||||
SYSTEMD_LIBS
|
||||
@@ -11589,6 +11606,101 @@ fi
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build appmachineid" >&5
|
||||
+$as_echo_n "checking whether to build appmachineid... " >&6; }
|
||||
+# Check whether --enable-app-machineid was given.
|
||||
+if test "${enable_app_machineid+set}" = set; then :
|
||||
+ enableval=$enable_app_machineid; APP_MACHINEID_SUPPORT=$enableval
|
||||
+else
|
||||
+ APP_MACHINEID_SUPPORT=no
|
||||
+fi
|
||||
+
|
||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $APP_MACHINEID_SUPPORT" >&5
|
||||
+$as_echo "$APP_MACHINEID_SUPPORT" >&6; }
|
||||
+
|
||||
+if test "$APP_MACHINEID_SUPPORT" = yes; then
|
||||
+
|
||||
+$as_echo "#define APP_MACHINEID_SUPPORT 1" >>confdefs.h
|
||||
+
|
||||
+ SYSTEMD_LIBS="-lsystemd"
|
||||
+fi
|
||||
+
|
||||
+################################################################################
|
||||
+if test "$APP_MACHINEID_SUPPORT" = yes; then
|
||||
+
|
||||
+pkg_failed=no
|
||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for APP_MACHINEID" >&5
|
||||
+$as_echo_n "checking for APP_MACHINEID... " >&6; }
|
||||
+
|
||||
+if test -n "$APP_MACHINEID_CFLAGS"; then
|
||||
+ pkg_cv_APP_MACHINEID_CFLAGS="$APP_MACHINEID_CFLAGS"
|
||||
+ elif test -n "$PKG_CONFIG"; then
|
||||
+ if test -n "$PKG_CONFIG" && \
|
||||
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"systemd >= 234\""; } >&5
|
||||
+ ($PKG_CONFIG --exists --print-errors "systemd >= 234") 2>&5
|
||||
+ ac_status=$?
|
||||
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
+ test $ac_status = 0; }; then
|
||||
+ pkg_cv_APP_MACHINEID_CFLAGS=`$PKG_CONFIG --cflags "systemd >= 234" 2>/dev/null`
|
||||
+ test "x$?" != "x0" && pkg_failed=yes
|
||||
+else
|
||||
+ pkg_failed=yes
|
||||
+fi
|
||||
+ else
|
||||
+ pkg_failed=untried
|
||||
+fi
|
||||
+if test -n "$APP_MACHINEID_LIBS"; then
|
||||
+ pkg_cv_APP_MACHINEID_LIBS="$APP_MACHINEID_LIBS"
|
||||
+ elif test -n "$PKG_CONFIG"; then
|
||||
+ if test -n "$PKG_CONFIG" && \
|
||||
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"systemd >= 234\""; } >&5
|
||||
+ ($PKG_CONFIG --exists --print-errors "systemd >= 234") 2>&5
|
||||
+ ac_status=$?
|
||||
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
+ test $ac_status = 0; }; then
|
||||
+ pkg_cv_APP_MACHINEID_LIBS=`$PKG_CONFIG --libs "systemd >= 234" 2>/dev/null`
|
||||
+ test "x$?" != "x0" && pkg_failed=yes
|
||||
+else
|
||||
+ pkg_failed=yes
|
||||
+fi
|
||||
+ else
|
||||
+ pkg_failed=untried
|
||||
+fi
|
||||
+
|
||||
+
|
||||
+
|
||||
+if test $pkg_failed = yes; then
|
||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
+$as_echo "no" >&6; }
|
||||
+
|
||||
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
|
||||
+ _pkg_short_errors_supported=yes
|
||||
+else
|
||||
+ _pkg_short_errors_supported=no
|
||||
+fi
|
||||
+ if test $_pkg_short_errors_supported = yes; then
|
||||
+ APP_MACHINEID_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "systemd >= 234" 2>&1`
|
||||
+ else
|
||||
+ APP_MACHINEID_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "systemd >= 234" 2>&1`
|
||||
+ fi
|
||||
+ # Put the nasty error message in config.log where it belongs
|
||||
+ echo "$APP_MACHINEID_PKG_ERRORS" >&5
|
||||
+
|
||||
+ $bailout
|
||||
+elif test $pkg_failed = untried; then
|
||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
+$as_echo "no" >&6; }
|
||||
+ $bailout
|
||||
+else
|
||||
+ APP_MACHINEID_CFLAGS=$pkg_cv_APP_MACHINEID_CFLAGS
|
||||
+ APP_MACHINEID_LIBS=$pkg_cv_APP_MACHINEID_LIBS
|
||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
+$as_echo "yes" >&6; }
|
||||
+ HAVE_APP_MACHINEID=yes
|
||||
+fi
|
||||
+fi
|
||||
+
|
||||
+################################################################################
|
||||
|
||||
# Check whether --enable-blkid_wiping was given.
|
||||
if test "${enable_blkid_wiping+set}" = set; then :
|
||||
diff --git a/include/configure.h.in b/include/configure.h.in
|
||||
index 55d18bd..f3060bc 100644
|
||||
--- a/include/configure.h.in
|
||||
+++ b/include/configure.h.in
|
||||
@@ -1,5 +1,8 @@
|
||||
/* include/configure.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
+/* Define to 1 to include code that uses libsystemd machine-id apis. */
|
||||
+#undef APP_MACHINEID_SUPPORT
|
||||
+
|
||||
/* Define to 1 to use libblkid detection of signatures when wiping. */
|
||||
#undef BLKID_WIPING_SUPPORT
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,290 +0,0 @@
|
||||
From 7dff68f6d02afb1174b13c36865d4000cf63aff7 Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Thu, 1 Apr 2021 12:08:58 -0500
|
||||
Subject: [PATCH 08/11] add dracut files
|
||||
|
||||
pvscan-udev-initrd.sh is shell wrapper around the
|
||||
pvscan command for use in the initrd lvm udev rule.
|
||||
It finds the intersection of complete VG/LVs reported
|
||||
by pvscan, and the VG/LVs specified on boot cmdline.
|
||||
The resulting VG or LVs are printed as env-vars that
|
||||
the udev rule can IMPORT, and pass to vgchange/lvchange.
|
||||
|
||||
64-lvm.rules calls pvscan-udev-initrd.sh/pvscan to scan
|
||||
the PV to check if any VG or LVs are complete given the
|
||||
new device. The pvscan will only ever read the single
|
||||
device triggering the uevent. If any VG or LVs are
|
||||
complete, the udev rule uses systemd-run to run a
|
||||
vgchange or lvchange command to activate the complete
|
||||
VG or LVs. (Running vgchange or lvchange directly may
|
||||
take longer than udev likes, so systemd-run --no-block
|
||||
is used.)
|
||||
---
|
||||
dracut/64-lvm.rules | 44 +++++++++++++++++
|
||||
dracut/module-setup.sh | 112 +++++++++++++++++++++++++++++++++++++++++++
|
||||
dracut/parse-lvm.sh | 18 +++++++
|
||||
dracut/pvscan-udev-initrd.sh | 57 ++++++++++++++++++++++
|
||||
4 files changed, 231 insertions(+)
|
||||
create mode 100644 dracut/64-lvm.rules
|
||||
create mode 100755 dracut/module-setup.sh
|
||||
create mode 100755 dracut/parse-lvm.sh
|
||||
create mode 100755 dracut/pvscan-udev-initrd.sh
|
||||
|
||||
diff --git a/dracut/64-lvm.rules b/dracut/64-lvm.rules
|
||||
new file mode 100644
|
||||
index 0000000..174af1d
|
||||
--- /dev/null
|
||||
+++ b/dracut/64-lvm.rules
|
||||
@@ -0,0 +1,44 @@
|
||||
+# Copyright 2008,2021 Red Hat, Inc.
|
||||
+#
|
||||
+# Jeremy Katz <katzj@redhat.com>
|
||||
+
|
||||
+SUBSYSTEM!="block", GOTO="lvm_end"
|
||||
+ACTION!="add|change", GOTO="lvm_end"
|
||||
+# Also don't process disks that are slated to be a multipath device
|
||||
+ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="lvm_end"
|
||||
+KERNEL=="dm-[0-9]*", ACTION=="add", GOTO="lvm_end"
|
||||
+ENV{ID_FS_TYPE}!="LVM2_member", GOTO="lvm_end"
|
||||
+
|
||||
+PROGRAM=="/bin/sh -c 'for i in $sys/$devpath/holders/dm-[0-9]*; do [ -e $$i ] && exit 0; done; exit 1;' ", \
|
||||
+ GOTO="lvm_end"
|
||||
+
|
||||
+# pvscan-udev-initrd.sh is a wrapper that calls pvscan and prints
|
||||
+# LVM_VG_NAME_COMPLETE='...'
|
||||
+# LVM_LV_NAMES_COMPLETE='...'
|
||||
+# if the given device completes a VG or LVs listed in
|
||||
+# rd.lvm.vg or rd.lvm.lv
|
||||
+#
|
||||
+# If a VG or LVs are completed by the device, but are not
|
||||
+# listed in rd.lvm.vg/lv, then they are not printed
|
||||
+# (we don't want to activate VGs/LVs that are not specified.)
|
||||
+#
|
||||
+# If no VG or LVs are completed by the device, then
|
||||
+# nothing is printed.
|
||||
+#
|
||||
+# LVs may be complete and activated before the VG is complete,
|
||||
+# i.e. the entire VG is not necessary to activate LVs in it.
|
||||
+#
|
||||
+# If multiple LV names are completed from one device,
|
||||
+# e.g. LVM_LV_NAMES_COMPLETE='vg/lv1 vg/lv2 vg/lv3'
|
||||
+# they will be activated by one lvchange command.
|
||||
+
|
||||
+IMPORT{program}="pvscan-udev-initrd.sh $env{DEVNAME}"
|
||||
+
|
||||
+# systemd services are used to run vgchange/lvchange
|
||||
+# because the lvm activation commands can run for longer
|
||||
+# than udev will tolerate.
|
||||
+
|
||||
+ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run --no-block --property DefaultDependencies=no /sbin/lvm vgchange -ay --yes --ignoremonitoring --poll n --sysinit $env{LVM_VG_NAME_COMPLETE}"
|
||||
+ENV{LVM_LV_NAMES_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run --no-block --property DefaultDependencies=no /sbin/lvm lvchange -ay --yes -K --ignoremonitoring --poll n --sysinit $env{LVM_LV_NAMES_COMPLETE}"
|
||||
+
|
||||
+LABEL="lvm_end"
|
||||
diff --git a/dracut/module-setup.sh b/dracut/module-setup.sh
|
||||
new file mode 100755
|
||||
index 0000000..51d9cd3
|
||||
--- /dev/null
|
||||
+++ b/dracut/module-setup.sh
|
||||
@@ -0,0 +1,112 @@
|
||||
+#!/bin/bash
|
||||
+
|
||||
+# called by dracut
|
||||
+check() {
|
||||
+ # No point trying to support lvm if the binaries are missing
|
||||
+ require_binaries lvm || return 1
|
||||
+
|
||||
+ [[ $hostonly ]] || [[ $mount_needs ]] && {
|
||||
+ for fs in "${host_fs_types[@]}"; do
|
||||
+ [[ $fs = LVM*_member ]] && return 0
|
||||
+ done
|
||||
+ return 255
|
||||
+ }
|
||||
+
|
||||
+ return 0
|
||||
+}
|
||||
+
|
||||
+# called by dracut
|
||||
+depends() {
|
||||
+ # We depend on dm_mod being loaded
|
||||
+ echo rootfs-block dm
|
||||
+ return 0
|
||||
+}
|
||||
+
|
||||
+# called by dracut
|
||||
+cmdline() {
|
||||
+ local _activated
|
||||
+ declare -A _activated
|
||||
+
|
||||
+ for dev in "${!host_fs_types[@]}"; do
|
||||
+ [ -e /sys/block/${dev#/dev/}/dm/name ] || continue
|
||||
+ [ -e /sys/block/${dev#/dev/}/dm/uuid ] || continue
|
||||
+ uuid=$(</sys/block/${dev#/dev/}/dm/uuid)
|
||||
+ [[ "${uuid#LVM-}" == "$uuid" ]] && continue
|
||||
+ dev=$(</sys/block/${dev#/dev/}/dm/name)
|
||||
+ eval $(dmsetup splitname --nameprefixes --noheadings --rows "$dev" 2>/dev/null)
|
||||
+ [[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || return 1
|
||||
+ if ! [[ ${_activated[${DM_VG_NAME}/${DM_LV_NAME}]} ]]; then
|
||||
+ printf " rd.lvm.lv=%s " "${DM_VG_NAME}/${DM_LV_NAME} "
|
||||
+ _activated["${DM_VG_NAME}/${DM_LV_NAME}"]=1
|
||||
+ fi
|
||||
+ done
|
||||
+}
|
||||
+
|
||||
+installkernel() {
|
||||
+ hostonly='' instmods dm-snapshot
|
||||
+}
|
||||
+
|
||||
+# called by dracut
|
||||
+install() {
|
||||
+ local _i
|
||||
+
|
||||
+ inst lvm
|
||||
+
|
||||
+ if [[ $hostonly_cmdline == "yes" ]]; then
|
||||
+ local _lvmconf=$(cmdline)
|
||||
+ [[ $_lvmconf ]] && printf "%s\n" "$_lvmconf" >> "${initdir}/etc/cmdline.d/90lvm.conf"
|
||||
+ fi
|
||||
+
|
||||
+ inst_rules "$moddir/64-lvm.rules"
|
||||
+
|
||||
+ if [[ $hostonly ]] || [[ $lvmconf = "yes" ]]; then
|
||||
+ if [ -f $dracutsysrootdir/etc/lvm/lvm.conf ]; then
|
||||
+ inst_simple -H /etc/lvm/lvm.conf
|
||||
+ fi
|
||||
+
|
||||
+ export LVM_SUPPRESS_FD_WARNINGS=1
|
||||
+ # Also install any files needed for LVM system id support.
|
||||
+ if [ -f $dracutsysrootdir/etc/lvm/lvmlocal.conf ]; then
|
||||
+ inst_simple -H /etc/lvm/lvmlocal.conf
|
||||
+ fi
|
||||
+ eval $(lvm dumpconfig global/system_id_source &>/dev/null)
|
||||
+ if [ "$system_id_source" == "file" ]; then
|
||||
+ eval $(lvm dumpconfig global/system_id_file)
|
||||
+ if [ -f "$system_id_file" ]; then
|
||||
+ inst_simple -H $system_id_file
|
||||
+ fi
|
||||
+ fi
|
||||
+ unset LVM_SUPPRESS_FD_WARNINGS
|
||||
+ fi
|
||||
+
|
||||
+ inst_rules 11-dm-lvm.rules
|
||||
+
|
||||
+ inst_script "$moddir/pvscan-udev-initrd.sh" /usr/lib/udev/pvscan-udev-initrd.sh
|
||||
+ inst_hook cmdline 30 "$moddir/parse-lvm.sh"
|
||||
+
|
||||
+ inst_libdir_file "libdevmapper-event-lvm*.so"
|
||||
+
|
||||
+ if [[ $hostonly ]] && type -P lvs &>/dev/null; then
|
||||
+ for dev in "${!host_fs_types[@]}"; do
|
||||
+ [ -e /sys/block/${dev#/dev/}/dm/name ] || continue
|
||||
+ dev=$(</sys/block/${dev#/dev/}/dm/name)
|
||||
+ eval $(dmsetup splitname --nameprefixes --noheadings --rows "$dev" 2>/dev/null)
|
||||
+ [[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || continue
|
||||
+ case "$(lvs --noheadings -o segtype ${DM_VG_NAME} 2>/dev/null)" in
|
||||
+ *thin*|*cache*|*era*)
|
||||
+ inst_multiple -o thin_dump thin_restore thin_check thin_repair \
|
||||
+ cache_dump cache_restore cache_check cache_repair \
|
||||
+ era_check era_dump era_invalidate era_restore
|
||||
+ break;;
|
||||
+ esac
|
||||
+ done
|
||||
+ fi
|
||||
+
|
||||
+ if ! [[ $hostonly ]]; then
|
||||
+ inst_multiple -o thin_dump thin_restore thin_check thin_repair \
|
||||
+ cache_dump cache_restore cache_check cache_repair \
|
||||
+ era_check era_dump era_invalidate era_restore
|
||||
+ fi
|
||||
+
|
||||
+ dracut_need_initqueue
|
||||
+}
|
||||
diff --git a/dracut/parse-lvm.sh b/dracut/parse-lvm.sh
|
||||
new file mode 100755
|
||||
index 0000000..8236050
|
||||
--- /dev/null
|
||||
+++ b/dracut/parse-lvm.sh
|
||||
@@ -0,0 +1,18 @@
|
||||
+#!/bin/sh
|
||||
+
|
||||
+if [ -e /etc/lvm/lvm.conf ] && ! getargbool 1 rd.lvm.conf -d -n rd_NO_LVMCONF; then
|
||||
+ rm -f -- /etc/lvm/lvm.conf
|
||||
+fi
|
||||
+
|
||||
+LV_DEVS="$(getargs rd.lvm.vg -d rd_LVM_VG=) $(getargs rd.lvm.lv -d rd_LVM_LV=)"
|
||||
+
|
||||
+if ! getargbool 1 rd.lvm -d -n rd_NO_LVM \
|
||||
+ || ( [ -z "$LV_DEVS" ] && ! getargbool 0 rd.auto ); then
|
||||
+ info "rd.lvm=0: removing LVM activation"
|
||||
+ rm -f -- /etc/udev/rules.d/64-lvm*.rules
|
||||
+else
|
||||
+ for dev in $LV_DEVS; do
|
||||
+ wait_for_dev -n "/dev/$dev"
|
||||
+ done
|
||||
+fi
|
||||
+
|
||||
diff --git a/dracut/pvscan-udev-initrd.sh b/dracut/pvscan-udev-initrd.sh
|
||||
new file mode 100755
|
||||
index 0000000..1743771
|
||||
--- /dev/null
|
||||
+++ b/dracut/pvscan-udev-initrd.sh
|
||||
@@ -0,0 +1,57 @@
|
||||
+#!/bin/sh
|
||||
+
|
||||
+# pvscan wrapper called by initrd lvm udev rule to find the
|
||||
+# intersection of complete VGs/LVs found by pvscan and the
|
||||
+# requested VGs/LVs from the cmdline.
|
||||
+#
|
||||
+# Used in 64-lvm.rules as:
|
||||
+# IMPORT{program}="pvscan-udev-initrd.sh $env{DEVNAME}"
|
||||
+#
|
||||
+# See /usr/lib/dracut/modules.d/90lvm/64-lvm.rules
|
||||
+
|
||||
+dev=$1
|
||||
+
|
||||
+type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
|
||||
+
|
||||
+
|
||||
+VGS=$(getargs rd.lvm.vg -d rd_LVM_VG=)
|
||||
+LVS=$(getargs rd.lvm.lv -d rd_LVM_LV=)
|
||||
+
|
||||
+IFS=' '
|
||||
+
|
||||
+# pvscan will produce a single VG line, and one or more LV lines.
|
||||
+# VG <name> complete
|
||||
+# VG <name> incomplete
|
||||
+# LV <name> complete
|
||||
+# LV <name> incomplete
|
||||
+#
|
||||
+# LV names are printed as vgname/lvname.
|
||||
+# We only care about the complete items.
|
||||
+# Each pvscan will produce a single VG line,
|
||||
+# and may produce zero, one or more LV lines.
|
||||
+
|
||||
+PVSCAN=$(/sbin/lvm pvscan --cache --listlvs --checkcomplete --journal output --config 'global/event_activation=1' $dev)
|
||||
+
|
||||
+read -r -a VGSARRAY <<< "$VGS"
|
||||
+
|
||||
+for VG in "${VGSARRAY[@]}"
|
||||
+do
|
||||
+ if strstr "$PVSCAN" "VG $VG complete" ; then
|
||||
+ echo LVM_VG_NAME_COMPLETE=\'"$VG"\'
|
||||
+ fi
|
||||
+done
|
||||
+
|
||||
+# Combine all matching LVs into a single print containing them all,
|
||||
+# e.g. LVM_LV_NAMES_COMPLETE='vg/lv1 vg/lv2'
|
||||
+
|
||||
+read -r -a LVSARRAY <<< "$LVS"
|
||||
+
|
||||
+echo -n LVM_LV_NAMES_COMPLETE=\'
|
||||
+for LV in "${LVSARRAY[@]}"
|
||||
+do
|
||||
+ if strstr "$PVSCAN" "LV $LV complete" ; then
|
||||
+ echo -n "$LV "
|
||||
+ fi
|
||||
+done
|
||||
+echo \'
|
||||
+
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,31 +0,0 @@
|
||||
From de86234888bea4b994fd49776915c28a4d7f02b5 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Wed, 2 Jun 2021 17:17:40 +0200
|
||||
Subject: [PATCH 09/11] lvmdbusd: Use ID_FS_TYPE UDev property in udevwatch
|
||||
|
||||
'.ID_FS_TYPE_NEW' is a custom property added by an LVM UDev rule
|
||||
which is now being removed and 'ID_FS_TYPE' has the same value.
|
||||
|
||||
Signed-off-by: Vojtech Trefny <vtrefny@redhat.com>
|
||||
---
|
||||
daemons/lvmdbusd/udevwatch.py | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/daemons/lvmdbusd/udevwatch.py b/daemons/lvmdbusd/udevwatch.py
|
||||
index b53b180..f9b3e4a 100644
|
||||
--- a/daemons/lvmdbusd/udevwatch.py
|
||||
+++ b/daemons/lvmdbusd/udevwatch.py
|
||||
@@ -52,8 +52,8 @@ def filter_event(action, device):
|
||||
# when appropriate.
|
||||
refresh = False
|
||||
|
||||
- if '.ID_FS_TYPE_NEW' in device:
|
||||
- fs_type_new = device['.ID_FS_TYPE_NEW']
|
||||
+ if 'ID_FS_TYPE' in device:
|
||||
+ fs_type_new = device['ID_FS_TYPE']
|
||||
|
||||
if 'LVM' in fs_type_new:
|
||||
refresh = True
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,31 +0,0 @@
|
||||
From d45b26023747c1da95e18753a45b31e47090aa40 Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Thu, 22 Jul 2021 13:27:35 -0500
|
||||
Subject: [PATCH 10/11] udev vgchange: skip hints and keep transient service
|
||||
record
|
||||
|
||||
Using hints with vgchange in the udev rule is not helpful because
|
||||
repeated pvscans during startup are constantly invalidating hints.
|
||||
|
||||
Use -r with systemd-run so that the transient service used to
|
||||
run vgchange remains visible and can be inspected.
|
||||
---
|
||||
udev/69-dm-lvm.rules.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/udev/69-dm-lvm.rules.in b/udev/69-dm-lvm.rules.in
|
||||
index 03c8fbb..70f2b37 100644
|
||||
--- a/udev/69-dm-lvm.rules.in
|
||||
+++ b/udev/69-dm-lvm.rules.in
|
||||
@@ -80,7 +80,7 @@ ENV{SYSTEMD_READY}="1"
|
||||
# it's better suited to appearing in the journal.
|
||||
|
||||
IMPORT{program}="(LVM_EXEC)/lvm pvscan --cache --listvg --checkcomplete --vgonline --udevoutput --journal=output $env{DEVNAME}"
|
||||
-ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run --no-block --property DefaultDependencies=no --unit lvm-activate-$env{LVM_VG_NAME_COMPLETE} lvm vgchange -aay $env{LVM_VG_NAME_COMPLETE}"
|
||||
+ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run -r --no-block --property DefaultDependencies=no --unit lvm-activate-$env{LVM_VG_NAME_COMPLETE} lvm vgchange -aay --config devices/hints=none $env{LVM_VG_NAME_COMPLETE}"
|
||||
GOTO="lvm_end"
|
||||
|
||||
LABEL="lvm_end"
|
||||
--
|
||||
1.8.3.1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,25 +0,0 @@
|
||||
From 929e36ebfe991e01d6b341c5c8b4e6ad61cb26e2 Mon Sep 17 00:00:00 2001
|
||||
From: Marian Csontos <mcsontos@redhat.com>
|
||||
Date: Wed, 11 Aug 2021 19:19:19 +0200
|
||||
Subject: [PATCH] test: Fix system_id test
|
||||
|
||||
---
|
||||
test/shell/system_id.sh | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/test/shell/system_id.sh b/test/shell/system_id.sh
|
||||
index 8b5638a..4dc167d 100644
|
||||
--- a/test/shell/system_id.sh
|
||||
+++ b/test/shell/system_id.sh
|
||||
@@ -38,7 +38,7 @@ check vg_field $vg1 systemid "$SID"
|
||||
vgremove $vg1
|
||||
|
||||
# FIXME - print 'life' config data
|
||||
-eval "$(lvmconfig global/etc 2>/dev/null || lvmconfig --type default global/etc)"
|
||||
+eval "$({ lvmconfig global/etc 2>/dev/null || lvmconfig --type default global/etc; } | sed 's/^\s*#\s*//')"
|
||||
|
||||
## machineid
|
||||
if [ -e "$etc/machine-id" ]; then
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,17 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAABAgAGBQJhE+77AAoJELkRJDHlCQOfpEYP/0nuaspSTyABSJifvLkVkKqX
|
||||
zR+s1WsKbDUEA4r8iIaZXfiB0Eo62laHoZxVV2FBaFdO73AecwMs7GJ9E4eky6Dr
|
||||
KIMJcYcv2iP/2om+PLdQDV89U+Y1CL4l77tvM9UZrkyHxIy8+mHo+4BWZeDxK2sT
|
||||
WwSwUo1qJ4upeys8YMTL7XX4bU7NCl8st+gCoAIxzesgiP85NjAAXCdj4Q7kb3Lx
|
||||
MwG9JNsnjs+XVIB+xvrB+IeJKU6PBVqGAtV8l29D8SnTohl9kT3AePB2LBnKTlzS
|
||||
EmHRnyM1cwOLJGuP26m+pXbTtW8jXUOGbcpzApGmQPVxnLYKqhvcgAs9rXfXdKNg
|
||||
B0CC01uTveHXcpL/xwQdag9aMx9yNGUb6KizWWHOupg0+q2ULtFauDvfGdK3n9CN
|
||||
uumHZMWslpGgstM2CU7cbDO/LrujMQjQ5r6ULofg5DDeVqIze05DDB7VeDHAOHyV
|
||||
MtJPOKGsAopdqAmkzoE2QoAHrXGqe86W/zCxYbjLKWtz7lhClZldyes499n0zdET
|
||||
xpliWbW4x6SpalnfY8iBdqOWDetdW2qbykR0ZL/rC460e/Zl/mDxQyZm4DPqJzTM
|
||||
0j3b5LhX48hrOz3NzLT5zBmjUWDB6gW9PYNqA0B9Zts1nyJySzD9WFsU+CMrl7Ea
|
||||
aqguG+5zGYgU6OhbiSbn
|
||||
=1259
|
||||
-----END PGP SIGNATURE-----
|
17
LVM2.2.03.14.tgz.asc
Normal file
17
LVM2.2.03.14.tgz.asc
Normal file
@ -0,0 +1,17 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAABAgAGBQJhb+6rAAoJELkRJDHlCQOfBO4P/3d0ccQfFany0wbXfYRuS+1G
|
||||
HYc0S5LPyhhhTIKRGpBOCEGnSwPlUxcP6mnxhwfrcDOYLl4z9Pj1NGnaYoQxpCHw
|
||||
fQ4Lzzr6Fdt5TFIkGiVSbQynh/ybyOxfTuD5fMzWmEKrJ1ZNhTv0sDOqPoqLrS8o
|
||||
W4C573IW9BEGN7CeHTcbcdpnUwt4GGsbsR2S5fGdKUo0Jw/PTY67wiCCTM0F92Qp
|
||||
S3fkPQ+GWagXTTecrX5MeFjMrQIk3cOMBDvxccHMthzDEyjNtGoOJfmZV66eMzs2
|
||||
XDW0r6t/h5tX535QOWEjqazYavfUcTQn99+0X4dwbVxVa9h1baKo9bhOM4k7PyOx
|
||||
XUXDiZYVvsCP/W+Sr69rxOSbzhClg3Y/8riw5Ttf2ygXdUgI7ce0Rnc8irslJCwJ
|
||||
PyYKFMDxHDaor4LbRJL3ZpaWopoARkRKGJYMsU8VOHDPf0cIfN1JdbOiatqj5CQz
|
||||
DfCKWzxqz88ZM8GyHxSHZ6bRtEOM6RtCiIONn66AgMHxObKxZ3604BFvv2jaJiVt
|
||||
MvditBmlvjYaPjNjomSwxgdhs5gkbERJH7kkXgB8RNR2UIPNZhcTSd1xLrkeRpP2
|
||||
jt7kUR0NR4lab8qal8paIyQLSrcBTsngAI9EYxIgwN1gLcUWfxDJOOJt4tyrqy5v
|
||||
qcvHOjD884RQSdTYXfe0
|
||||
=VTpu
|
||||
-----END PGP SIGNATURE-----
|
159
lvm2.spec
159
lvm2.spec
@ -1,8 +1,7 @@
|
||||
%global device_mapper_version 1.02.179
|
||||
%global device_mapper_version 1.02.181
|
||||
|
||||
%global enable_cache 1
|
||||
%global enable_cluster 1
|
||||
%global enable_cmirror 0
|
||||
%global enable_lvmdbusd 1
|
||||
%global enable_lvmlockd 1
|
||||
%global enable_lvmpolld 1
|
||||
@ -31,7 +30,6 @@
|
||||
%if 0%{?rhel} && 0%{?rhel} <= 8
|
||||
%ifnarch i686 x86_64 ppc64le s390x
|
||||
%global enable_cluster 0
|
||||
%global enable_cmirror 0
|
||||
%global enable_lockd_dlm 0
|
||||
%endif
|
||||
|
||||
@ -42,9 +40,6 @@
|
||||
|
||||
%if %{enable_cluster}
|
||||
%global configure_cluster --with-cluster=internal
|
||||
%if %{enable_cmirror}
|
||||
%global configure_cmirror --enable-cmirrord
|
||||
%endif
|
||||
%else
|
||||
%global configure_cluster --with-cluster=internal
|
||||
%endif
|
||||
@ -57,24 +52,12 @@ Name: lvm2
|
||||
%if 0%{?rhel}
|
||||
Epoch: %{rhel}
|
||||
%endif
|
||||
Version: 2.03.13
|
||||
Version: 2.03.14
|
||||
Release: 1%{?dist}
|
||||
License: GPLv2
|
||||
URL: http://sourceware.org/lvm2
|
||||
Source0: ftp://sourceware.org/pub/lvm2/releases/LVM2.%{version}.tgz
|
||||
Patch1: lvm2-set-default-preferred_names.patch
|
||||
Patch2: 0001-config-comment-all-default-settings.patch
|
||||
Patch3: 0002-config-change-default-use_devicesfile-to-1.patch
|
||||
Patch4: 0003-system_id-new-appmachineid-option.patch
|
||||
Patch5: 0004-pvscan-add-options-listlvs-listvg-checkcomplete.patch
|
||||
Patch6: 0005-logging-to-the-systemd-journal.patch
|
||||
Patch7: 0006-new-udev-autoactivation.patch
|
||||
Patch8: 0007-configure-update.patch
|
||||
Patch9: 0008-add-dracut-files.patch
|
||||
Patch10: 0009-lvmdbusd-Use-ID_FS_TYPE-UDev-property-in-udevwatch.patch
|
||||
Patch11: 0010-udev-vgchange-skip-hints-and-keep-transient-service-.patch
|
||||
Patch12: 0011-make-generate.patch
|
||||
Patch13: 0012-test-Fix-system_id-test.patch
|
||||
|
||||
BuildRequires: make
|
||||
BuildRequires: gcc
|
||||
@ -132,18 +115,6 @@ or more physical volumes and creating one or more logical volumes
|
||||
%prep
|
||||
%setup -q -n LVM2.%{version}
|
||||
%patch1 -p1 -b .backup1
|
||||
%patch2 -p1 -b .backup2
|
||||
%patch3 -p1 -b .backup3
|
||||
%patch4 -p1 -b .backup4
|
||||
%patch5 -p1 -b .backup5
|
||||
%patch6 -p1 -b .backup6
|
||||
%patch7 -p1 -b .backup7
|
||||
%patch8 -p1 -b .backup8
|
||||
%patch9 -p1 -b .backup9
|
||||
%patch10 -p1 -b .backup10
|
||||
%patch11 -p1 -b .backup11
|
||||
%patch12 -p1 -b .backup12
|
||||
%patch13 -p1 -b .backup13
|
||||
|
||||
%build
|
||||
%global _default_pid_dir /run
|
||||
@ -153,48 +124,59 @@ or more physical volumes and creating one or more logical volumes
|
||||
|
||||
%global _udevdir %{_prefix}/lib/udev/rules.d
|
||||
|
||||
%global configure_udev --with-udevdir=%{_udevdir} --enable-udev_sync
|
||||
|
||||
%if %{enable_cache}
|
||||
%global configure_cache --with-cache=internal
|
||||
%endif
|
||||
|
||||
%configure \
|
||||
--with-default-dm-run-dir=%{_default_dm_run_dir} \
|
||||
--with-default-run-dir=%{_default_run_dir} \
|
||||
--with-default-pid-dir=%{_default_pid_dir} \
|
||||
--with-default-locking-dir=%{_default_locking_dir} \
|
||||
--with-usrlibdir=%{_libdir} \
|
||||
--enable-fsadm \
|
||||
--enable-write_install \
|
||||
--with-user= \
|
||||
--with-group= \
|
||||
--with-device-uid=0 \
|
||||
--with-device-gid=6 \
|
||||
--with-device-mode=0660 \
|
||||
--enable-pkgconfig \
|
||||
--enable-cmdlib \
|
||||
--enable-dmeventd \
|
||||
--enable-blkid_wiping \
|
||||
%{?configure_cluster} \
|
||||
--with-udevdir=%{_udevdir} --enable-udev_sync \
|
||||
%if %{enable_thin}
|
||||
%global configure_thin --with-thin=internal
|
||||
--with-thin=internal \
|
||||
%endif
|
||||
%if %{enable_cache}
|
||||
--with-cache=internal \
|
||||
%endif
|
||||
%if %{enable_lvmpolld}
|
||||
--enable-lvmpolld \
|
||||
%endif
|
||||
|
||||
%if %{enable_lockd_dlm}
|
||||
%global configure_lockd_dlm --enable-lvmlockd-dlm --enable-lvmlockd-dlmcontrol
|
||||
--enable-lvmlockd-dlm --enable-lvmlockd-dlmcontrol \
|
||||
%endif
|
||||
%if %{enable_lockd_sanlock}
|
||||
%global configure_lockd_sanlock --enable-lvmlockd-sanlock
|
||||
--enable-lvmlockd-sanlock \
|
||||
%endif
|
||||
|
||||
%if %{enable_lvmpolld}
|
||||
%global configure_lvmpolld --enable-lvmpolld
|
||||
%endif
|
||||
|
||||
%if %{enable_lvmdbusd}
|
||||
%global configure_lvmdbusd --enable-dbus-service --enable-notify-dbus
|
||||
--enable-dbus-service --enable-notify-dbus \
|
||||
%endif
|
||||
|
||||
%if %{enable_dmfilemapd}
|
||||
%global configure_dmfilemapd --enable-dmfilemapd
|
||||
--enable-dmfilemapd \
|
||||
%endif
|
||||
|
||||
%if %{enable_vdo}
|
||||
%global configure_vdo --with-vdo=internal --with-vdo-format=%{_bindir}/vdoformat
|
||||
%endif
|
||||
|
||||
%if %{enable_writecache}
|
||||
%global configure_writecache --with-writecache=internal
|
||||
--with-writecache=internal \
|
||||
%endif
|
||||
%if %{enable_vdo}
|
||||
--with-vdo=internal --with-vdo-format=%{_bindir}/vdoformat \
|
||||
%endif
|
||||
|
||||
%if %{enable_integrity}
|
||||
%global configure_integrity --with-integrity=internal
|
||||
--with-integrity=internal \
|
||||
%endif
|
||||
|
||||
%configure --with-default-dm-run-dir=%{_default_dm_run_dir} --with-default-run-dir=%{_default_run_dir} --with-default-pid-dir=%{_default_pid_dir} --with-default-locking-dir=%{_default_locking_dir} --with-usrlibdir=%{_libdir} --enable-fsadm --enable-write_install --with-user= --with-group= --with-device-uid=0 --with-device-gid=6 --with-device-mode=0660 --enable-pkgconfig --enable-cmdlib --enable-dmeventd --enable-blkid_wiping %{?configure_cluster} %{?configure_cmirror} %{?configure_udev} %{?configure_thin} %{?configure_cache} %{?configure_lvmpolld} %{?configure_lockd_dlm} %{?configure_lockd_sanlock} %{?configure_lvmdbusd} %{?configure_dmfilemapd} %{?configure_writecache} %{?configure_vdo} %{?configure_integrity} --disable-silent-rules --enable-app-machineid --enable-editline --disable-readline
|
||||
--disable-silent-rules \
|
||||
--enable-app-machineid \
|
||||
--enable-editline \
|
||||
--disable-readline
|
||||
|
||||
%make_build
|
||||
|
||||
@ -262,7 +244,7 @@ systemctl start lvm2-lvmpolld.socket >/dev/null 2>&1 || :
|
||||
%if %{enable_lvmpolld}
|
||||
%{_sbindir}/lvmpolld
|
||||
%endif
|
||||
%{_sbindir}/vdoimport
|
||||
%{_sbindir}/lvm_import_vdo
|
||||
|
||||
# Other files
|
||||
%defattr(444,root,root,-)
|
||||
@ -348,7 +330,7 @@ systemctl start lvm2-lvmpolld.socket >/dev/null 2>&1 || :
|
||||
%{_mandir}/man8/pvresize.8.gz
|
||||
%{_mandir}/man8/pvs.8.gz
|
||||
%{_mandir}/man8/pvscan.8.gz
|
||||
%{_mandir}/man8/vdoimport.8.gz
|
||||
%{_mandir}/man8/lvm_import_vdo.8.gz
|
||||
%{_mandir}/man8/vgcfgbackup.8.gz
|
||||
%{_mandir}/man8/vgcfgrestore.8.gz
|
||||
%{_mandir}/man8/vgchange.8.gz
|
||||
@ -499,57 +481,6 @@ LVM commands use lvmlockd to coordinate access to shared storage.
|
||||
|
||||
%endif
|
||||
|
||||
###############################################################################
|
||||
# Cluster mirror subpackage
|
||||
# The 'clvm' OCF script to manage cmirrord instance is part of resource-agents.
|
||||
###############################################################################
|
||||
%if %{enable_cluster}
|
||||
%if %{enable_cmirror}
|
||||
|
||||
%package -n cmirror
|
||||
Summary: Daemon for device-mapper-based clustered mirrors
|
||||
Requires: corosync >= %{corosync_version}
|
||||
Requires: device-mapper = %{?epoch}:%{device_mapper_version}-%{release}
|
||||
Requires: resource-agents >= %{resource_agents_version}
|
||||
|
||||
%description -n cmirror
|
||||
Daemon providing device-mapper-based mirrors in a shared-storage cluster.
|
||||
|
||||
%files -n cmirror
|
||||
%defattr(555,root,root,-)
|
||||
%{_sbindir}/cmirrord
|
||||
%attr(444, -, -) %{_mandir}/man8/cmirrord.8.gz
|
||||
|
||||
##############################################################################
|
||||
# Cmirror-standalone subpackage
|
||||
##############################################################################
|
||||
%package -n cmirror-standalone
|
||||
Summary: Additional files to support device-mapper-based clustered mirrors in standalone mode
|
||||
License: GPLv2
|
||||
Requires: cmirror >= %{?epoch}:%{version}-%{release}
|
||||
|
||||
%description -n cmirror-standalone
|
||||
|
||||
Additional files needed to run daemon for device-mapper-based clustered
|
||||
mirrors in standalone mode as a service without cluster resource manager
|
||||
involvement (e.g. pacemaker).
|
||||
|
||||
%post -n cmirror-standalone
|
||||
%systemd_post lvm2-cmirrord.service
|
||||
|
||||
%preun -n cmirror-standalone
|
||||
%systemd_preun lvm2-cmirrord.service
|
||||
|
||||
%postun -n cmirror-standalone
|
||||
%systemd_postun lvm2-cmirrord.service
|
||||
|
||||
%files -n cmirror-standalone
|
||||
%defattr(444,root,root,-)
|
||||
%{_unitdir}/lvm2-cmirrord.service
|
||||
|
||||
%endif
|
||||
%endif
|
||||
|
||||
##############################################################################
|
||||
# LVM D-Bus daemon
|
||||
##############################################################################
|
||||
@ -754,6 +685,10 @@ An extensive functional testsuite for LVM2.
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Wed Oct 20 2021 Marian Csontos <mcsontos@redhat.com> - 2.03.14-1
|
||||
- Update to upstream version 2.03.14.
|
||||
- See WHATS_NEW and WHATS_NEW_DM for more information.
|
||||
|
||||
* Wed Aug 11 2021 Marian Csontos <mcsontos@redhat.com> - 2.03.13-1
|
||||
- Update to upstream version 2.03.13.
|
||||
- Change in obtain_devices_list_from_udev default.
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (LVM2.2.03.13.tgz) = 8b4fb6da5dd46ddeb754436189072bea79be594fab6d57d9be63c6ce3e3cb68d38601a2c031c493681321281cfb1f1459ace19974c00beb569364f44863cfc4a
|
||||
SHA512 (LVM2.2.03.14.tgz) = 6a93bed1d5cf36f0f48d4d413d028b0e480cd4fc20e25d173770a892f265d2a0cc68d01a720b1513469953649e989532cd0c45f9538f92a4190eb3dc4555857d
|
||||
|
Loading…
Reference in New Issue
Block a user