1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-02 01:18:26 +03:00

config: editing descriptions

Update wording and formatting.
This commit is contained in:
David Teigland 2015-04-10 16:41:54 -05:00
parent 2872e8c289
commit b851b74cba

View File

@ -123,7 +123,8 @@ cfg_runtime(config_profile_dir_CFG, "profile_dir", config_CFG_SECTION, 0, CFG_TY
"Directory where LVM looks for configuration profiles.\n") "Directory where LVM looks for configuration profiles.\n")
cfg(devices_dir_CFG, "dir", devices_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_DEV_DIR, vsn(1, 0, 0), cfg(devices_dir_CFG, "dir", devices_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_DEV_DIR, vsn(1, 0, 0),
"Where do you want your volume groups to appear ?") "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, 0, CFG_TYPE_STRING, "#S/dev", vsn(1, 0, 0), cfg_array(devices_scan_CFG, "scan", devices_CFG_SECTION, 0, CFG_TYPE_STRING, "#S/dev", vsn(1, 0, 0),
"An array of directories that contain the device nodes you wish\n" "An array of directories that contain the device nodes you wish\n"
@ -138,18 +139,20 @@ cfg(devices_obtain_device_list_from_udev_CFG, "obtain_device_list_from_udev", de
"subdirectories found in the device directory. This setting is applied\n" "subdirectories found in the device directory. This setting is applied\n"
"to udev-managed device directory only, other directories will be scanned\n" "to udev-managed device directory only, other directories will be scanned\n"
"fully. LVM needs to be compiled with udev support for this setting to\n" "fully. LVM needs to be compiled with udev support for this setting to\n"
"take effect. N.B. Any device node or symlink not managed by udev in\n" "take effect. Any device node or symlink not managed by udev in udev\n"
"udev directory will be ignored with this setting on.\n") "directory will be ignored with this setting on.\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), 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),
"Select external device information source to use for further and more\n" "Select external device information source to use for\n"
"detailed device determination. Some information may already be available\n" "further and more detailed device determination. Some\n"
"in the system and LVM can use this information to determine the exact\n" "information may already be available in the system and\n"
"type or use of the device it processes. Using existing external device\n" "LVM can use this information to determine the exact type\n"
"information source can speed up device processing as LVM does not need\n" "or use of the device it processes. Using existing external\n"
"to run its own native routines to acquire this information. For example,\n" "device information source can speed up device processing\n"
"such information is used to drive LVM filtering like MD component\n" "as LVM does not need to run its own native routines to acquire\n"
"detection, multipath component detection, partition detection and others.\n" "this information. For example, such information is used to\n"
"drive LVM filtering like MD component detection, multipath\n"
"component detection, partition detection and others.\n"
"Possible options are: none, udev.\n" "Possible options are: none, udev.\n"
"none - No external device information source is used.\n" "none - No external device information source is used.\n"
"udev - Reuse existing udev database records. Applicable\n" "udev - Reuse existing udev database records. Applicable\n"
@ -157,84 +160,74 @@ cfg(devices_external_device_info_source_CFG, "external_device_info_source", devi
cfg_array(devices_preferred_names_CFG, "preferred_names", devices_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 2, 19), cfg_array(devices_preferred_names_CFG, "preferred_names", devices_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 2, 19),
"If several entries in the scanned directories correspond to the\n" "If several entries in the scanned directories correspond to the\n"
"same block device and the tools need to display a name for device,\n" "same block device and the tools need to display a name for the device,\n"
"all the pathnames are matched against each item in the following\n" "all the path names are matched against each item in this list of\n"
"list of regular expressions in turn and the first match is used.\n" "regular expressions. The first match is used.\n"
"Try to avoid using undescriptive /dev/dm-N names, if present.\n" "Try to avoid using undescriptive /dev/dm-N names, if present.\n"
"In case no prefererred name matches or if preferred_names are not\n" "If no preferred name matches, or if preferred_names are not\n"
"defined at all, builtin rules are used to determine the preference.\n" "defined, built-in rules are used until one produces a preference.\n"
"The first builtin rule checks path prefixes and it gives preference\n" "Rule 1 checks path prefixes and gives preference in this order:\n"
"based on this ordering (where /dev depends on devices/dev setting):\n" "/dev/mapper, /dev/disk, /dev/dm-*, /dev/block (/dev from devices/dev)\n"
"/dev/mapper > /dev/disk > /dev/dm-* > /dev/block\n" "Rule 2 prefers the path with the least slashes.\n"
"If the ordering above cannot be applied, the path with fewer slashes\n" "Rule 3 prefers a symlink.\n"
"gets preference then.\n" "Rule 4 prefers the path with least value in lexicographical order.\n"
"If the number of slashes is the same, a symlink gets preference.\n"
"Finally, if all the rules mentioned above are not applicable,\n"
"lexicographical order is used over paths and the smallest one\n"
"of all gets preference.\n"
"Example:\n" "Example:\n"
"preferred_names = [ \"^/dev/mpath/\", \"^/dev/mapper/mpath\", \"^/dev/[hs]d\" ]\n") "preferred_names = [ \"^/dev/mpath/\", \"^/dev/mapper/mpath\", \"^/dev/[hs]d\" ]\n")
cfg_array(devices_filter_CFG, "filter", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), cfg_array(devices_filter_CFG, "filter", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0),
"A filter that tells LVM to only use a restricted set of devices.\n" "Patterns used to accept or reject devices found by a scan.\n"
"The filter consists of an array of regular expressions. These\n" "Patterns are regular expressions delimited by any character\n"
"expressions can be delimited by a character of your choice, and\n" "and preceded by 'a' for accept or 'r' for reject.\n"
"prefixed with either an 'a' (for accept) or 'r' (for reject).\n" "The list is traversed in order, and the first regex that matches\n"
"The first expression found to match a device name determines if\n" "determines if the device is accepted or rejected (ignored).\n"
"the device will be accepted or rejected (ignored). Devices that\n" "Devices that don't match any patterns are accepted.\n"
"don't match any patterns are accepted.\n" "If there are several names for the same device, e.g. from symlinks,\n"
"Be careful if there there are symbolic links or multiple filesystem\n" "the first pattern matching any of the names determines if the\n"
"entries for the same device as each name is checked separately against\n" "device is accepted or rejected (depending on whether the first\n"
"the list of patterns. The effect is that if the first pattern in the\n" "matching pattern is 'a' or 'r'.)\n"
"list to match a name is an 'a' pattern for any of the names, the device\n" "Run vgscan after changing the filter to regenerate the cache.\n"
"is accepted; otherwise if the first pattern in the list to match a name\n" "See the use_lvmetad comment for a special case regarding filters.\n"
"is an 'r' pattern for any of the names it is rejected; otherwise it is\n" "Example:\n"
"accepted.\n" "Accept every block device.\n"
"Don't have more than one filter line active at once: only one gets used.\n"
"Run vgscan after you change this parameter to ensure that\n"
"the cache file gets regenerated (see below).\n"
"If it doesn't do what you expect, check the output of 'vgscan -vvvv'.\n"
"If lvmetad is used, then see \"A note about device filtering while\n"
"lvmetad is used\" comment that is attached to global/use_lvmetad setting.\n"
"Examples:\n"
"By default we accept every block device:\n"
"filter = [ \"a/.*/\" ]\n" "filter = [ \"a/.*/\" ]\n"
"Exclude the cdrom drive:\n" "Example:\n"
"Reject the cdrom drive.\n"
"filter = [ \"r|/dev/cdrom|\" ]\n" "filter = [ \"r|/dev/cdrom|\" ]\n"
"When testing I like to work with just loopback devices:\n" "Example:\n"
"Work with just loopback devices, e.g. for testing.\n"
"filter = [ \"a/loop/\", \"r/.*/\" ]\n" "filter = [ \"a/loop/\", \"r/.*/\" ]\n"
"Or maybe all loops and ide drives except hdc:\n" "Example:\n"
"Accept all loop devices and ide drives except hdc.\n"
"filter =[ \"a|loop|\", \"r|/dev/hdc|\", \"a|/dev/ide|\", \"r|.*|\" ]\n" "filter =[ \"a|loop|\", \"r|/dev/hdc|\", \"a|/dev/ide|\", \"r|.*|\" ]\n"
"Use anchors if you want to be really specific:\n" "Example:\n"
"Use anchors to be very specific.\n"
"filter = [ \"a|^/dev/hda8$|\", \"r/.*/\" ]\n") "filter = [ \"a|^/dev/hda8$|\", \"r/.*/\" ]\n")
cfg_array(devices_global_filter_CFG, "global_filter", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(2, 2, 98), cfg_array(devices_global_filter_CFG, "global_filter", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(2, 2, 98),
"Since filter is often overridden from command line, it is not suitable\n" "Since filter is often overridden from the command line,\n"
"for system-wide device filtering (udev rules, lvmetad). To hide devices\n" "it is not suitable for system-wide device filtering,\n"
"from LVM-specific udev processing and/or from lvmetad, you need to set\n" "e.g. udev rules and lvmetad. To hide devices from LVM-specific\n"
"global_filter. The syntax is the same as for normal filter\n" "udev processing and lvmetad, use global_filter.\n"
"above. Devices that fail the global_filter are not even opened by LVM.\n") "The syntax is the same as devices/filter above.\n"
"Devices rejected by global_filter are not opened by LVM.\n")
cfg_runtime(devices_cache_CFG, "cache", devices_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(1, 0, 0), cfg_runtime(devices_cache_CFG, "cache", devices_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(1, 0, 0),
"This setting has been replaced by the cache_dir setting.\n") "This setting has been replaced by the devices/cache_dir setting.\n")
cfg_runtime(devices_cache_dir_CFG, "cache_dir", devices_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(1, 2, 19), cfg_runtime(devices_cache_dir_CFG, "cache_dir", devices_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(1, 2, 19),
"The results of the filtering are cached on disk to avoid\n" "The results of filtering are cached on disk to avoid\n"
"rescanning dud devices (which can take a very long time).\n" "rescanning dud devices (which can take a very long time).\n"
"By default this cache is stored in a file named .cache\n" "By default this cache is stored in a file named .cache\n"
"in the directory specified by this setting.\n" "in the directory specified by this setting.\n"
"It is safe to delete the contents: the tools regenerate it.\n" "It is safe to delete this file; the tools regenerate it.\n"
"(The old setting 'cache' is still respected if neither of\n" "If obtain_device_list_from_udev is enabled, the list of devices\n"
"these new ones is present.)\n" "is obtained from udev and any existing .cache file is removed.\n")
"N.B. If obtain_device_list_from_udev is set to 1 the list of\n"
"devices is instead obtained from udev and any existing .cache\n"
"file is removed.\n")
cfg(devices_cache_file_prefix_CFG, "cache_file_prefix", devices_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, DEFAULT_CACHE_FILE_PREFIX, vsn(1, 2, 19), cfg(devices_cache_file_prefix_CFG, "cache_file_prefix", devices_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, DEFAULT_CACHE_FILE_PREFIX, vsn(1, 2, 19),
"A prefix used before the .cache file name.\n") "A prefix used before the .cache file name. See devices/cache_dir.\n")
cfg(devices_write_cache_state_CFG, "write_cache_state", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(1, 0, 0), cfg(devices_write_cache_state_CFG, "write_cache_state", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(1, 0, 0),
"Enable/disable writing the cache file.\n") "Enable/disable writing the cache file. See devices/cache_dir.\n")
cfg_array(devices_types_CFG, "types", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_INT | CFG_TYPE_STRING, NULL, vsn(1, 0, 0), cfg_array(devices_types_CFG, "types", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_INT | CFG_TYPE_STRING, NULL, vsn(1, 0, 0),
"List of pairs of additional acceptable block device types found\n" "List of pairs of additional acceptable block device types found\n"
@ -243,15 +236,18 @@ cfg_array(devices_types_CFG, "types", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED
"types = [ \"fd\", 16 ]\n") "types = [ \"fd\", 16 ]\n")
cfg(devices_sysfs_scan_CFG, "sysfs_scan", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SYSFS_SCAN, vsn(1, 0, 8), cfg(devices_sysfs_scan_CFG, "sysfs_scan", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SYSFS_SCAN, vsn(1, 0, 8),
"If sysfs is mounted (2.6 kernels) restrict device scanning to\n" "Restrict device scanning to block devices that sysfs believes\n"
"the block devices it believes are valid.\n") "are valid. (sysfs must be part of the kernel and mounted.)\n"
"This is a quick way of filtering out block devices that are\n"
"not present.\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), cfg(devices_multipath_component_detection_CFG, "multipath_component_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MULTIPATH_COMPONENT_DETECTION, vsn(2, 2, 89),
"Ignore devices used as component paths of device-mapper multipath devices.\n") "Ignore devices used as component paths of device-mapper\n"
"multipath devices.\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), cfg(devices_md_component_detection_CFG, "md_component_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MD_COMPONENT_DETECTION, vsn(1, 0, 18),
"Ignore devices used as components of software RAID (md) devices by looking\n" "Ignore devices used as components of software RAID (md) devices\n"
"for md superblocks.\n") "by looking for md superblocks.\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), 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),
"Ignore devices used as components of firmware RAID devices.\n" "Ignore devices used as components of firmware RAID devices.\n"
@ -260,73 +256,73 @@ cfg(devices_fw_raid_component_detection_CFG, "fw_raid_component_detection", devi
"this detection to execute.\n") "this 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), cfg(devices_md_chunk_alignment_CFG, "md_chunk_alignment", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MD_CHUNK_ALIGNMENT, vsn(2, 2, 48),
"If a PV is placed directly upon an md device, align its data blocks\n" "If a PV is placed directly upon an md device, align its data\n"
"with the md device's stripe-width.\n") "blocks with the md device's stripe-width.\n")
cfg(devices_default_data_alignment_CFG, "default_data_alignment", devices_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_DATA_ALIGNMENT, vsn(2, 2, 75), cfg(devices_default_data_alignment_CFG, "default_data_alignment", devices_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_DATA_ALIGNMENT, vsn(2, 2, 75),
"Default alignment of the start of a data area in MB. If set to 0,\n" "Default alignment of the start of a data area in MB.\n"
"a value of 64KB will be used. Set to 1 for 1MiB, 2 for 2MiB, etc.\n") "If set to 0, a value of 64KB will be used.\n"
"Set to 1 for 1MiB, 2 for 2MiB, etc.\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), cfg(devices_data_alignment_detection_CFG, "data_alignment_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_DATA_ALIGNMENT_DETECTION, vsn(2, 2, 51),
"The start of a PV's data area will be a multiple of the minimum_io_size\n" "The start of a PV data area will be a multiple of\n"
"or optimal_io_size exposed in sysfs.\n" "minimum_io_size or optimal_io_size exposed in sysfs.\n"
"minimum_io_size - the smallest request the device can perform\n" "minimum_io_size is the smallest request the device can perform\n"
"without incurring a read-modify-write penalty (e.g. MD's chunk size)\n" "without incurring a read-modify-write penalty, e.g. MD chunk size.\n"
"optimal_io_size - the device's preferred unit of receiving I/O\n" "optimal_io_size is the device's preferred unit of receiving I/O,\n"
"(e.g. MD's stripe width)\n" "e.g. MD stripe width.\n"
"minimum_io_size is used if optimal_io_size is undefined (0).\n" "minimum_io_size is used if optimal_io_size is undefined (0).\n"
"If md_chunk_alignment is enabled, that detects the optimal_io_size.\n" "If md_chunk_alignment is enabled, that detects the optimal_io_size.\n"
"This setting takes precedence over md_chunk_alignment.\n") "This setting takes precedence over md_chunk_alignment.\n")
cfg(devices_data_alignment_CFG, "data_alignment", devices_CFG_SECTION, 0, CFG_TYPE_INT, 0, vsn(2, 2, 45), cfg(devices_data_alignment_CFG, "data_alignment", devices_CFG_SECTION, 0, CFG_TYPE_INT, 0, vsn(2, 2, 45),
"Alignment (in KB) of start of data area when creating a new PV.\n" "Alignment (in KB) of start of data area when creating a new PV.\n"
"md_chunk_alignment and data_alignment_detection are disabled if set.\n" "If a PV is placed directly upon an md device and\n"
"Set to 0 for the default alignment (see: data_alignment_default)\n" "md_chunk_alignment or data_alignment_detection are enabled,\n"
"or page size, if larger.\n") "then this setting is ignored. Otherwise, md_chunk_alignment\n"
"and data_alignment_detection are disabled if this is set.\n"
"Set to 0 to use the default alignment or the page size, if larger.\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), 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),
"The start of the PV's aligned data area will be shifted by\n" "The start of a PV aligned data area will be shifted by\n"
"the alignment_offset exposed in sysfs. This offset is often 0 but\n" "the alignment_offset exposed in sysfs. This offset is often 0, but\n"
"may be non-zero; e.g.: certain 4KB sector drives that compensate for\n" "may be non-zero. Certain 4KB sector drives that compensate for\n"
"windows partitioning will have an alignment_offset of 3584 bytes\n" "windows partitioning will have an alignment_offset of 3584 bytes\n"
"(sector 7 is the lowest aligned logical block, the 4KB sectors start\n" "(sector 7 is the lowest aligned logical block, the 4KB sectors start\n"
"at LBA -1, and consequently sector 63 is aligned on a 4KB boundary).\n" "at LBA -1, and consequently sector 63 is aligned on a 4KB boundary).\n"
"But note that pvcreate --dataalignmentoffset will skip this detection.\n") "pvcreate --dataalignmentoffset will skip this detection.\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), cfg(devices_ignore_suspended_devices_CFG, "ignore_suspended_devices", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_IGNORE_SUSPENDED_DEVICES, vsn(1, 2, 19),
"While scanning the system for PVs, skip a device-mapper device\n" "While scanning the system for PVs, skip a device-mapper\n"
"that has its I/O suspended. Otherwise, LVM waits for the device\n" "device that has its I/O suspended. Otherwise, LVM waits\n"
"to become accessible. This should only be needed in recovery situations.\n") "for the device to become accessible. This should only be\n"
"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), cfg(devices_ignore_lvm_mirrors_CFG, "ignore_lvm_mirrors", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_IGNORE_LVM_MIRRORS, vsn(2, 2, 104),
"This setting determines whether logical volumes of 'mirror' segment\n" "Enable this to avoid possible deadlocks when using the 'mirror'\n"
"type are scanned for LVM labels. This affects the ability of\n" "segment type. This setting determines whether logical volumes\n"
"mirrors to be used as physical volumes. If ignore_lvm_mirrors\n" "using the 'mirror' segment type are scanned for LVM labels.\n"
"is enabled, it becomes impossible to create volume groups on top\n" "This affects the ability of mirrors to be used as physical volumes.\n"
"of mirror logical volumes - i.e. to stack volume groups on mirrors.\n" "If this setting is enabled, it becomes impossible to create VGs\n"
"Allowing mirror logical volumes to be scanned (ignore_lvm_mirrors is\n" "on top of mirror LVs, i.e. to stack VGs on mirror LVs.\n"
"disabled) can potentially cause LVM processes and I/O to the mirror to\n" "If this setting is disabled, allowing mirror LVs to be scanned,\n"
"become blocked. This is due to the way that the 'mirror' segment type\n" "it may cause LVM processes and I/O to the mirror to become blocked.\n"
"handles failures. In order for the hang to manifest itself, an LVM\n" "This is due to the way that the mirror segment type handles failures.\n"
"command must be run just after a failure and before the automatic LVM\n" "In order for the hang to occur, an LVM command must be run just after\n"
"repair process takes place OR there must be failures in multiple mirrors\n" "a failure and before the automatic LVM repair process takes place,\n"
"in the same volume group at the same time with write failures occurring\n" "or there must be failures in multiple mirrors in the same VG at the\n"
"moments before a scan of the mirror's labels.\n" "same time with write failures occurring moments before a scan of the\n"
"Note that these scanning limitations do not apply to the LVM RAID\n" "mirror's labels.\n"
"types, like 'raid1'. The RAID segment types handle failures in a\n" "The 'mirror' scanning problems do not apply to LVM RAID types like\n"
"different way and are not subject to possible process or I/O blocking.\n" "'raid1' which handle failures in a different way, making them a\n"
"It is encouraged that users enable ignore_lvm_mirrors if they are using\n" "better choice for VG stacking.\n")
"the 'mirror' segment type. Users that require volume group stacking on\n"
"mirrored logical volumes should consider using the 'raid1' segment type.\n"
"The 'raid1' segment type is not available for active/active clustered\n"
"volume groups. Enable ignore_lvm_mirrors to disallow stacking and\n"
"thereby avoid a possible deadlock.\n")
cfg(devices_disable_after_error_count_CFG, "disable_after_error_count", devices_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_DISABLE_AFTER_ERROR_COUNT, vsn(2, 2, 75), cfg(devices_disable_after_error_count_CFG, "disable_after_error_count", devices_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_DISABLE_AFTER_ERROR_COUNT, vsn(2, 2, 75),
"During each LVM operation errors received from each device are counted.\n" "During each LVM operation, errors received from each device\n"
"If the counter of a particular device exceeds the limit set here, no\n" "are counted. If the counter of a device exceeds the limit set\n"
"further I/O is sent to that device for the remainder of the respective\n" "here, no further I/O is sent to that device for the remainder\n"
"operation. Setting the parameter to 0 disables the counters altogether.\n") "of the operation.\n"
"Setting this to 0 disables the counters altogether.\n")
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), 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),
"Allow use of pvcreate --uuid without requiring --restorefile.\n") "Allow use of pvcreate --uuid without requiring --restorefile.\n")
@ -334,18 +330,19 @@ cfg(devices_require_restorefile_with_uuid_CFG, "require_restorefile_with_uuid",
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), 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),
"Minimum size (in KB) of block devices which can be used as PVs.\n" "Minimum size (in KB) of block devices which can be used as PVs.\n"
"In a clustered environment all nodes must use the same value.\n" "In a clustered environment all nodes must use the same value.\n"
"Any value smaller than 512KB is ignored.\n" "Any value smaller than 512KB is ignored. The previous built-in\n"
"The original built-in setting was 512 up to and including version 2.02.84.\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), cfg(devices_issue_discards_CFG, "issue_discards", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ISSUE_DISCARDS, vsn(2, 2, 85),
"Issue discards to a logical volumes's underlying physical volume(s) when\n" "Issue discards to a logical volume's underlying physical volumes\n"
"the logical volume is no longer using the physical volumes' space (e.g.\n" "when the logical volume is no longer using the physical volumes'\n"
"lvremove, lvreduce, etc). Discards inform the storage that a region is\n" "space, e.g. lvremove, lvreduce. Discards inform the storage that\n"
"no longer in use. Storage that supports discards advertise the protocol\n" "a region is no longer in use. Storage that supports discards\n"
"specific way discards should be issued by the kernel (TRIM, UNMAP, or\n" "advertise the protocol specific way discards should be issued by\n"
"WRITE SAME with UNMAP bit set). Not all storage will support or benefit\n" "the kernel (TRIM, UNMAP, or WRITE SAME with UNMAP bit set).\n"
"from discards but SSDs and thinly provisioned LUNs generally do. If enabled,\n" "Not all storage will support or benefit from discards, but SSDs\n"
"discards will only be issued if both the storage and kernel provide support.\n") "and thinly provisioned LUNs generally do. If enabled, discards\n"
"will only be issued if both the storage and kernel provide support.\n")
cfg_array(allocation_cling_tag_list_CFG, "cling_tag_list", allocation_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(2, 2, 77), cfg_array(allocation_cling_tag_list_CFG, "cling_tag_list", allocation_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(2, 2, 77),
"When searching for free space to extend an LV, the 'cling'\n" "When searching for free space to extend an LV, the 'cling'\n"
@ -370,36 +367,37 @@ cfg(allocation_maximise_cling_CFG, "maximise_cling", allocation_CFG_SECTION, 0,
"and revert to the previous algorithm.\n") "and revert to the previous algorithm.\n")
cfg(allocation_use_blkid_wiping_CFG, "use_blkid_wiping", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(2, 2, 105), cfg(allocation_use_blkid_wiping_CFG, "use_blkid_wiping", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(2, 2, 105),
"Enable use of the blkid library instead of native LVM code to detect\n" "Use the blkid library instead of native LVM code to detect\n"
"any existing signatures while creating new Physical Volumes and\n" "any existing signatures while creating new PVs and LVs.\n"
"Logical Volumes. LVM needs to be compiled with blkid wiping support\n" "LVM needs to be compiled with blkid wiping support for this\n"
"for this setting to take effect.\n" "setting to take effect.\n"
"LVM native detection code is currently able to recognize:\n" "LVM native detection code is currently able to recognize:\n"
"MD device signatures, swap signature, and LUKS signatures.\n" "MD device signatures, swap signature, and LUKS signatures.\n"
"To see the list of signatures recognized by blkid, check the output\n" "To see the list of signatures recognized by blkid, check the\n"
"of 'blkid -k' command. The blkid can recognize more signatures than\n" "output of the 'blkid -k' command. blkid can recognize more\n"
"LVM native detection code, but due to this higher number of signatures\n" "signatures than LVM native detection code, but due to this\n"
"to be recognized, it can take more time to complete the signature scan.\n") "higher number of signatures to be recognized, it can take more\n"
"time to complete the signature scan.\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), 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),
"Look for any signatures on a newly-created Logical Volume\n" "Look for and erase any signatures while zeroing a new LV.\n"
"whenever zeroing of the LV is done (zeroing is controlled by -Z/--zero\n" "Zeroing is controlled by the -Z/--zero option, and if not\n"
"option and if not specified, zeroing is used by default if possible).\n" "specified, zeroing is used by default if possible.\n"
"While zeroing simply overwrites first 4 KiB of the LV with zeroes without\n" "Zeroing simply overwrites the first 4 KiB of a new LV\n"
"doing any signature detection, signature wiping goes beyond that and it\n" "with zeroes and does no signature detection or wiping.\n"
"can detect exact type and position of signature within the whole LV.\n" "Signature wiping goes beyond zeroing and detects exact\n"
"As such, it provides cleaner LV for use after creation as all known\n" "types and positions of signatures within the whole LV.\n"
"signatures are wiped so that the LV is not claimed by other tools\n" "It provides a cleaner LV after creation as all known\n"
"incorrectly by the existence of old signature from any previous use.\n" "signatures are wiped. The LV is not claimed incorrectly\n"
"The number of signatures that LVM can detect depends on detection\n" "by other tools because of old signatures from previous use.\n"
"code that is selected - see also use_blkid_wiping option.\n" "The number of signatures that LVM can detect depends on the\n"
"Wiping of each detected signature must be confirmed.\n" "detection code that is selected (see use_blkid_wiping.)\n"
"Wiping each detected signature must be confirmed.\n"
"The command line option -W/--wipesignatures takes precedence\n" "The command line option -W/--wipesignatures takes precedence\n"
"over this setting.\n" "over this setting.\n"
"When disabled, signatures on newly-created Logical Volumes\n" "When this setting is disabled, signatures on new LVs are\n"
"are never detected and wiped and you always need to use\n" "not detected or erased unless the -W/--wipesignatures y\n"
"-W/--wipesignatures y option directly to enable this feature\n" "option is used directly.\n")
"no matter whether zeroing is used or not.\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), 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),
"Guarantees that mirror logs will always be placed on\n" "Guarantees that mirror logs will always be placed on\n"
@ -413,28 +411,31 @@ cfg(allocation_cache_pool_metadata_require_separate_pvs_CFG, "cache_pool_metadat
cfg(allocation_cache_pool_cachemode_CFG, "cache_pool_cachemode", allocation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_CACHE_POOL_CACHEMODE, vsn(2, 2, 113), cfg(allocation_cache_pool_cachemode_CFG, "cache_pool_cachemode", allocation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_CACHE_POOL_CACHEMODE, vsn(2, 2, 113),
"The default cache mode used for new cache pools.\n" "The default cache mode used for new cache pools.\n"
"Possible options are: writethrough, writeback.\n" "Possible options are: writethrough, writeback.\n"
"writethrough - Data blocks are immediately written from the cache to disk.\n" "writethrough - Data blocks are immediately written from\n"
"writeback - Data blocks are written from the cache back to disk after\n" "the cache to disk.\n"
"some delay to improve performance.\n") "writeback - Data blocks are written from the cache back\n"
"to disk after some delay to improve performance.\n")
cfg_runtime(allocation_cache_pool_chunk_size_CFG, "cache_pool_chunk_size", allocation_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_INT, vsn(2, 2, 106), cfg_runtime(allocation_cache_pool_chunk_size_CFG, "cache_pool_chunk_size", allocation_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_INT, vsn(2, 2, 106),
"The minimal chunk size (in kiB) for cache pool volumes.\n" "The minimal chunk size (in kiB) for cache pool volumes.\n"
"Using a chunk_size that is too large can result in wasteful use of\n" "Using a chunk_size that is too large can result in wasteful\n"
"the cache, where small reads and writes can cause large sections of\n" "use of the cache, where small reads and writes can cause\n"
"an LV to be mapped into the cache. However, choosing a chunk_size\n" "large sections of an LV to be mapped into the cache. However,\n"
"that is too small can result in more overhead trying to manage the\n" "choosing a chunk_size that is too small can result in more\n"
"numerous chunks that become mapped into the cache. The former is\n" "overhead trying to manage the numerous chunks that become mapped\n"
"more of a problem than the latter in most cases, so we default to\n" "into the cache. The former is more of a problem than the latter\n"
"a value that is on the smaller end of the spectrum. Supported values\n" "in most cases, so we default to a value that is on the smaller\n"
"range from 32(kiB) to 1048576 in multiples of 32.\n") "end of the spectrum. Supported values range from 32(kiB) to\n"
"1048576 in multiples of 32.\n")
cfg(allocation_thin_pool_metadata_require_separate_pvs_CFG, "thin_pool_metadata_require_separate_pvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_THIN_POOL_METADATA_REQUIRE_SEPARATE_PVS, vsn(2, 2, 89), cfg(allocation_thin_pool_metadata_require_separate_pvs_CFG, "thin_pool_metadata_require_separate_pvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_THIN_POOL_METADATA_REQUIRE_SEPARATE_PVS, vsn(2, 2, 89),
"Guarantees that thin pool metadata will always\n" "Guarantees that thin pool metadata will always\n"
"be placed on different PVs from the pool data.\n") "be placed on different PVs from the pool data.\n")
cfg(allocation_thin_pool_zero_CFG, "thin_pool_zero", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_BOOL, DEFAULT_THIN_POOL_ZERO, vsn(2, 2, 99), cfg(allocation_thin_pool_zero_CFG, "thin_pool_zero", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_BOOL, DEFAULT_THIN_POOL_ZERO, vsn(2, 2, 99),
"Enable/disable zeroing of thin pool data chunks before their first use.\n" "Enable/disable zeroing of thin pool data chunks before\n"
"N.B. zeroing larger thin pool chunk size degrades performance.\n") "their first use. Zeroing larger thin pool chunk size\n"
"reduces performance.\n")
cfg(allocation_thin_pool_discards_CFG, "thin_pool_discards", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_STRING, DEFAULT_THIN_POOL_DISCARDS, vsn(2, 2, 99), cfg(allocation_thin_pool_discards_CFG, "thin_pool_discards", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_STRING, DEFAULT_THIN_POOL_DISCARDS, vsn(2, 2, 99),
"The discards behaviour of thin pool volumes.\n" "The discards behaviour of thin pool volumes.\n"
@ -443,25 +444,26 @@ cfg(allocation_thin_pool_discards_CFG, "thin_pool_discards", allocation_CFG_SECT
cfg(allocation_thin_pool_chunk_size_policy_CFG, "thin_pool_chunk_size_policy", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_STRING, DEFAULT_THIN_POOL_CHUNK_SIZE_POLICY, vsn(2, 2, 101), cfg(allocation_thin_pool_chunk_size_policy_CFG, "thin_pool_chunk_size_policy", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_STRING, DEFAULT_THIN_POOL_CHUNK_SIZE_POLICY, vsn(2, 2, 101),
"The chunk size calculation policy for thin pool volumes.\n" "The chunk size calculation policy for thin pool volumes.\n"
"Possible options are: generic, performance.\n" "Possible options are: generic, performance.\n"
"generic - if thin_pool_chunk_size is defined, use it.\n" "generic - If thin_pool_chunk_size is defined, use it.\n"
"Otherwise, calculate the chunk size based on estimation and\n" "Otherwise, calculate the chunk size based on estimation and\n"
"device hints exposed in sysfs - the minimum_io_size.\n" "device hints exposed in sysfs - the minimum_io_size.\n"
"The chunk size is always at least 64KiB.\n" "The chunk size is always at least 64KiB.\n"
"performance - if thin_pool_chunk_size is defined, use it.\n" "performance - If thin_pool_chunk_size is defined, use it.\n"
"Otherwise, calculate the chunk size for performance based on\n" "Otherwise, calculate the chunk size for performance based on\n"
"device hints exposed in sysfs - the optimal_io_size.\n" "device hints exposed in sysfs - the optimal_io_size.\n"
"The chunk size is always at least 512KiB.\n") "The chunk size is always at least 512KiB.\n")
cfg_runtime(allocation_thin_pool_chunk_size_CFG, "thin_pool_chunk_size", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA | CFG_DEFAULT_UNDEFINED, CFG_TYPE_INT, vsn(2, 2, 99), cfg_runtime(allocation_thin_pool_chunk_size_CFG, "thin_pool_chunk_size", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA | CFG_DEFAULT_UNDEFINED, CFG_TYPE_INT, vsn(2, 2, 99),
"The minimal chunk size (in KB) for thin pool volumes.\n" "The minimal chunk size (in KB) for thin pool volumes.\n"
"Use of the larger chunk size may improve performance for plain\n" "Larger chunk sizes may improve performance for plain\n"
"thin volumes, however using them for snapshot volumes is less efficient,\n" "thin volumes, however using them for snapshot volumes\n"
"as it consumes more space and takes extra time for copying.\n" "is less efficient, as it consumes more space and takes\n"
"When unset, lvm tries to estimate chunk size starting from 64KB\n" "extra time for copying. When unset, lvm tries to estimate\n"
"Supported values are in range from 64 to 1048576.\n") "chunk size starting from 64KB. Supported values are in\n"
"the range 64 to 1048576.\n")
cfg(allocation_physical_extent_size_CFG, "physical_extent_size", allocation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_EXTENT_SIZE, vsn(2, 2, 112), cfg(allocation_physical_extent_size_CFG, "physical_extent_size", allocation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_EXTENT_SIZE, vsn(2, 2, 112),
"Default physical extent size to use for newly created VGs (in KB).\n") "Default physical extent size to use for new VGs (in KB).\n")
cfg(log_verbose_CFG, "verbose", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_VERBOSE, vsn(1, 0, 0), cfg(log_verbose_CFG, "verbose", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_VERBOSE, vsn(1, 0, 0),
"Controls the messages sent to stdout or stderr.\n") "Controls the messages sent to stdout or stderr.\n")
@ -487,18 +489,22 @@ cfg(log_overwrite_CFG, "overwrite", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_O
"Overwrite the log file each time the program is run.\n") "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), cfg(log_level_CFG, "level", log_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_LOGLEVEL, vsn(1, 0, 0),
"The level of log messages that are sent to the log file and/or syslog.\n" "The level of log messages that are sent to the\n"
"There are 6 syslog-like log levels currently in use - 2 to 7 inclusive.\n" "log file and/or syslog. There are 6 syslog-like\n"
"log levels currently in use: 2 to 7 inclusive.\n"
"7 is the most verbose (LOG_DEBUG).\n") "7 is the most verbose (LOG_DEBUG).\n")
cfg(log_indent_CFG, "indent", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_INDENT, vsn(1, 0, 0), cfg(log_indent_CFG, "indent", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_INDENT, vsn(1, 0, 0),
"Format of output messages: indent messages according to their severity.\n") "Format of output messages:\n"
"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), cfg(log_command_names_CFG, "command_names", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_CMD_NAME, vsn(1, 0, 0),
"Format of output messages: display the command name on each line output.\n") "Format of output messages:\n"
"display the command name on each line output.\n")
cfg(log_prefix_CFG, "prefix", log_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, DEFAULT_MSG_PREFIX, vsn(1, 0, 0), cfg(log_prefix_CFG, "prefix", log_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, DEFAULT_MSG_PREFIX, vsn(1, 0, 0),
"Format of output messages: a prefix to use before the message text.\n" "Format of output messages:\n"
"a prefix to use before the message text.\n"
"(After the command name, if selected).\n" "(After the command name, if selected).\n"
"Two spaces allows you to see/grep the severity of each message.\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" "To make the messages look similar to the original LVM tools use:\n"
@ -511,10 +517,11 @@ cfg(log_activation_CFG, "activation", log_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(
cfg(log_activate_file_CFG, "activate_file", log_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL) cfg(log_activate_file_CFG, "activate_file", log_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL)
cfg_array(log_debug_classes_CFG, "debug_classes", log_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, "#Smemory#Sdevices#Sactivation#Sallocation#Slvmetad#Smetadata#Scache#Slocking", vsn(2, 2, 99), cfg_array(log_debug_classes_CFG, "debug_classes", log_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, "#Smemory#Sdevices#Sactivation#Sallocation#Slvmetad#Smetadata#Scache#Slocking", vsn(2, 2, 99),
"Some debugging messages are assigned to a class and only appear\n" "Some debugging messages are assigned to a class\n"
"in debug output if the class is listed here.\n" "and only appear in debug output if the class is\n"
"Classes currently available:\n" "listed here. Classes currently available:\n"
"memory, devices, activation, allocation, lvmetad, metadata, cache, locking.\n" "memory, devices, activation, allocation,\n"
"lvmetad, metadata, cache, locking.\n"
"Use \"all\" to see everything.\n") "Use \"all\" to see everything.\n")
cfg(backup_backup_CFG, "backup", backup_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_BACKUP_ENABLED, vsn(1, 0, 0), cfg(backup_backup_CFG, "backup", backup_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_BACKUP_ENABLED, vsn(1, 0, 0),
@ -547,17 +554,18 @@ cfg(global_umask_CFG, "umask", global_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_UMAS
"Interpreted as octal if the first digit is zero.\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), cfg(global_test_CFG, "test", global_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(1, 0, 0),
"Enabling test mode means that no changes to the on disk metadata\n" "Enabling test mode means that no changes to the\n"
"will be made. Equivalent to having the -t option on every command.\n") "on-disk metadata will be made. Equivalent to having\n"
"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), cfg(global_units_CFG, "units", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_STRING, DEFAULT_UNITS, vsn(1, 0, 0),
"Default value for --units argument.\n") "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), 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),
"The tools distinguish between powers of 1024 bytes\n" "The tools distinguish between powers of 1024 bytes,\n"
"(e.g. KiB, MiB, GiB) and powers of 1000 bytes (e.g. KB, MB, GB).\n" "e.g. KiB, MiB, GiB, and powers of 1000 bytes, e.g. KB, MB, GB.\n"
"If you have scripts that depend on the old behaviour, disable\n" "If scripts depend on the old behaviour, disable\n"
"this setting temporarily until you update them.\n") "this setting 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), cfg(global_suffix_CFG, "suffix", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_BOOL, DEFAULT_SUFFIX, vsn(1, 0, 0),
"Display unit suffix for sizes. This setting has no effect if the\n" "Display unit suffix for sizes. This setting has no effect if the\n"
@ -566,24 +574,28 @@ cfg(global_suffix_CFG, "suffix", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_BO
cfg(global_activation_CFG, "activation", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ACTIVATION, vsn(1, 0, 0), cfg(global_activation_CFG, "activation", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ACTIVATION, vsn(1, 0, 0),
"Enable/disable communication with the kernel device-mapper.\n" "Enable/disable communication with the kernel device-mapper.\n"
"Disable if you want to use the tools to manipulate LVM metadata\n" "Disable to use the tools to manipulate LVM metadata without\n"
"without activating any logical volumes.\n" "activating any logical volumes. If the device-mapper driver\n"
"If the device-mapper kernel driver is not present in your kernel,\n" "is not present in the kernel, disabling this should suppress\n"
"disabling this should suppress the error messages.\n") "the error messages.\n")
cfg(global_fallback_to_lvm1_CFG, "fallback_to_lvm1", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_LVM1, vsn(1, 0, 18), cfg(global_fallback_to_lvm1_CFG, "fallback_to_lvm1", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_LVM1, vsn(1, 0, 18),
"If we cannot communicate with device-mapper, try running the LVM1 tools.\n" "Try running the LVM1 tools if LVM cannot communicate with\n"
"This option only applies to 2.4 kernels and is provided to help you\n" "device-mapper. This option only applies to 2.4 kernels and\n"
"switch between device-mapper kernels and LVM1 kernels.\n" "is provided to help switch between device-mapper kernels and\n"
"The LVM1 tools need to be installed with .lvm1 suffices\n" "LVM1 kernels.\n"
"e.g. vgscan.lvm1 and they will stop working after you start using\n" "The LVM1 tools need to be installed with .lvm1 suffices,\n"
"the new lvm2 on-disk metadata format.\n") "e.g. vgscan.lvm1. They will stop working once the lvm2\n"
"on-disk metadata format is used.\n")
cfg(global_format_CFG, "format", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_FORMAT, vsn(1, 0, 0), cfg(global_format_CFG, "format", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_FORMAT, vsn(1, 0, 0),
"The default metadata format that commands should use - \"lvm1\" or \"lvm2\".\n" "The default metadata format that commands should use:\n"
"\"lvm1\" or \"lvm2\".\n"
"The command line override is -M1 or -M2.\n") "The command line override is -M1 or -M2.\n")
cfg_array(global_format_libraries_CFG, "format_libraries", global_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), cfg_array(global_format_libraries_CFG, "format_libraries", global_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0),
"A list of shared libraries to load that contain\n"
"code to process different formats of metadata.\n"
"If support for LVM1 metadata was compiled as a shared library use\n" "If support for LVM1 metadata was compiled as a shared library use\n"
"format_libraries = \"liblvm2format1.so\"\n") "format_libraries = \"liblvm2format1.so\"\n")
@ -596,25 +608,25 @@ cfg(global_etc_CFG, "etc", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_ETC_D
"Location of /etc system configuration directory.\n") "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), cfg(global_locking_type_CFG, "locking_type", global_CFG_SECTION, 0, CFG_TYPE_INT, 1, vsn(1, 0, 0),
"Type of locking to use. Defaults to local file-based locking (1).\n" "Type of locking to use.\n"
"Turn locking off by setting to 0 (dangerous: risks metadata corruption\n" "Type 0: turns off locking. Warning: this risks metadata\n"
"if LVM commands get run concurrently).\n" "corruption if commands run concurrently.\n"
"Type 2 uses the external shared library locking_library.\n" "Type 1: uses local file-based locking, the standard mode.\n"
"Type 3 uses built-in clustered locking.\n" "Type 2: uses the external shared library locking_library.\n"
"Type 4 uses read-only locking which forbids any operations that might\n" "Type 3: uses built-in clustered locking with clvmd.\n"
"change metadata.\n" "This is incompatible with lvmetad. If use_lvmetad is enabled,\n"
"Type 5 offers dummy locking for tools that do not need any locks.\n" "lvm prints a warning and disables lvmetad use.\n"
"You should not need to set this directly: the tools will select when\n" "Type 4: uses read-only locking which forbids any operations\n"
"to use it instead of the configured locking_type. Do not use lvmetad or\n" "that might change metadata.\n"
"the kernel device-mapper driver with this locking type.\n" "Type 5: offers dummy locking for tools that do not need any locks.\n"
"It is used by the --readonly option that offers read-only access to\n" "You should not need to set this directly; the tools will select\n"
"Volume Group metadata that cannot be locked safely because it belongs to\n" "when to use it instead of the configured locking_type.\n"
"an inaccessible domain and might be in use, for example a virtual machine\n" "Do not use lvmetad or the kernel device-mapper driver with this\n"
"image or a disk that is shared by a clustered machine.\n" "locking type. It is used by the --readonly option that offers\n"
"N.B. Don't use lvmetad with locking type 3 as lvmetad is not yet\n" "read-only access to Volume Group metadata that cannot be locked\n"
"supported in clustered environment. If use_lvmetad=1 and locking_type=3\n" "safely because it belongs to an inaccessible domain and might be\n"
"is set at the same time, LVM always issues a warning message about this\n" "in use, for example a virtual machine image or a disk that is\n"
"and then it automatically disables lvmetad use.\n") "shared by a clustered machine.\n")
cfg(global_wait_for_locks_CFG, "wait_for_locks", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_WAIT_FOR_LOCKS, vsn(2, 2, 50), cfg(global_wait_for_locks_CFG, "wait_for_locks", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_WAIT_FOR_LOCKS, vsn(2, 2, 50),
"When disabled, fail if a lock request cannot be satisfied immediately.\n") "When disabled, fail if a lock request cannot be satisfied immediately.\n")
@ -667,25 +679,27 @@ cfg(global_metadata_read_only_CFG, "metadata_read_only", global_CFG_SECTION, 0,
"Inappropriate use could mess up your system, so seek advice first!\n") "Inappropriate 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), cfg(global_mirror_segtype_default_CFG, "mirror_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_MIRROR_SEGTYPE, vsn(2, 2, 87),
"Defines which segtype will be used when the shorthand -m option\n" "Defines which segtype is used when the short option -m\n"
"is used for mirroring.\n" "is used for mirroring.\n"
"Possible options are: mirror, raid1.\n" "Possible options are: mirror, raid1.\n"
"mirror - The original RAID1 implementation provided by LVM/DM.\n" "mirror - the original RAID1 implementation from LVM/DM.\n"
"It is characterized by a flexible log solution (core, disk, mirrored)\n" "It is characterized by a flexible log solution (core,\n"
"and by the necessity to block I/O while reconfiguring in the\n" "disk, mirrored), and by the necessity to block I/O while\n"
"event of a failure.\n" "handling a failure.\n"
"There is an inherent race in the dmeventd failure handling\n" "There is an inherent race in the dmeventd failure\n"
"logic with snapshots of devices using this type of RAID1 that\n" "handling logic with snapshots of devices using this\n"
"in the worst case could cause a deadlock.\n" "type of RAID1 that in the worst case could cause a\n"
"raid1 - This implementation leverages MD's RAID1 personality through\n" "deadlock. (Also see devices/ignore_lvm_mirrors.)\n"
"device-mapper. It is characterized by a lack of log options.\n" "raid1 - a newer RAID1 implementation using the MD RAID1\n"
"(A log is always allocated for every device and they are placed\n" "personality through device-mapper. It is characterized\n"
"on the same device as the image - no separate devices are\n" "by a lack of log options. (A log is always allocated for\n"
"required.) This mirror implementation does not require I/O\n" "every device and they are placed on the same device as the\n"
"to be blocked in the kernel in the event of a failure.\n" "image - no separate devices are required.) This mirror\n"
"This mirror implementation is not cluster-aware and cannot be\n" "implementation does not require I/O to be blocked while\n"
"used in a shared (active/active) fashion in a cluster.\n" "handling a failure. This mirror implementation is not\n"
"Use '--type <mirror|raid1>' to override this default setting.\n") "cluster-aware and cannot be used in a shared (active/active)\n"
"fashion in a cluster.\n"
"Use '--type mirror|raid1' to override this default setting.\n")
cfg(global_raid10_segtype_default_CFG, "raid10_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_RAID10_SEGTYPE, vsn(2, 2, 99), cfg(global_raid10_segtype_default_CFG, "raid10_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_RAID10_SEGTYPE, vsn(2, 2, 99),
"Determines the segment types used by default when\n" "Determines the segment types used by default when\n"