Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=b851b74cba6dd8...
Commit: b851b74cba6dd8d1c2c831d5e3d2662734f987e8
Parent: 2872e8c289a04e60e59494b41336ae9e9eb6021e
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Fri Apr 10 16:41:54 2015 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Fri Apr 10 16:43:38 2015 -0500
config: editing descriptions
Update wording and formatting.
---
lib/config/config_settings.h | 482 ++++++++++++++++++++++--------------------
1 files changed, 248 insertions(+), 234 deletions(-)
diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h
index 63332d4..ecdf368 100644
--- a/lib/config/config_settings.h
+++ b/lib/config/config_settings.h
@@ -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")
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),
"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"
"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"
- "take effect. N.B. Any device node or symlink not managed by udev in\n"
- "udev directory will be ignored with this setting on.\n")
+ "take effect. Any device node or symlink not managed by udev in udev\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),
- "Select external device information source to use for further and more\n"
- "detailed device determination. Some information may already be available\n"
- "in the system and LVM can use this information to determine the exact\n"
- "type or use of the device it processes. Using existing external device\n"
- "information source can speed up device processing as LVM does not need\n"
- "to run its own native routines to acquire this information. For example,\n"
- "such information is used to drive LVM filtering like MD component\n"
- "detection, multipath component detection, partition detection and others.\n"
+ "Select external device information source to use for\n"
+ "further and more detailed device determination. Some\n"
+ "information may already be available in the system and\n"
+ "LVM can use this information to determine the exact type\n"
+ "or use of the device it processes. Using existing external\n"
+ "device information source can speed up device processing\n"
+ "as LVM does not need to run its own native routines to acquire\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"
"none - No external device information source is used.\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),
"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"
- "all the pathnames are matched against each item in the following\n"
- "list of regular expressions in turn and the first match is used.\n"
+ "same block device and the tools need to display a name for the device,\n"
+ "all the path names are matched against each item in this list of\n"
+ "regular expressions. The first match is used.\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"
- "defined at all, builtin rules are used to determine the preference.\n"
- "The first builtin rule checks path prefixes and it gives preference\n"
- "based on this ordering (where /dev depends on devices/dev setting):\n"
- "/dev/mapper > /dev/disk > /dev/dm-* > /dev/block\n"
- "If the ordering above cannot be applied, the path with fewer slashes\n"
- "gets preference then.\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"
+ "If no preferred name matches, or if preferred_names are not\n"
+ "defined, built-in rules are used until one produces a preference.\n"
+ "Rule 1 checks path prefixes and gives preference in this order:\n"
+ "/dev/mapper, /dev/disk, /dev/dm-*, /dev/block (/dev from devices/dev)\n"
+ "Rule 2 prefers the path with the least slashes.\n"
+ "Rule 3 prefers a symlink.\n"
+ "Rule 4 prefers the path with least value in lexicographical order.\n"
"Example:\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),
- "A filter that tells LVM to only use a restricted set of devices.\n"
- "The filter consists of an array of regular expressions. These\n"
- "expressions can be delimited by a character of your choice, and\n"
- "prefixed with either an 'a' (for accept) or 'r' (for
reject).\n"
- "The first expression found to match a device name determines if\n"
- "the device will be accepted or rejected (ignored). Devices that\n"
- "don't match any patterns are accepted.\n"
- "Be careful if there there are symbolic links or multiple filesystem\n"
- "entries for the same device as each name is checked separately against\n"
- "the list of patterns. The effect is that if the first pattern in the\n"
- "list to match a name is an 'a' pattern for any of the names, the
device\n"
- "is accepted; otherwise if the first pattern in the list to match a name\n"
- "is an 'r' pattern for any of the names it is rejected; otherwise it
is\n"
- "accepted.\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"
+ "Patterns used to accept or reject devices found by a scan.\n"
+ "Patterns are regular expressions delimited by any character\n"
+ "and preceded by 'a' for accept or 'r' for reject.\n"
+ "The list is traversed in order, and the first regex that matches\n"
+ "determines if the device is accepted or rejected (ignored).\n"
+ "Devices that don't match any patterns are accepted.\n"
+ "If there are several names for the same device, e.g. from symlinks,\n"
+ "the first pattern matching any of the names determines if the\n"
+ "device is accepted or rejected (depending on whether the first\n"
+ "matching pattern is 'a' or 'r'.)\n"
+ "Run vgscan after changing the filter to regenerate the cache.\n"
+ "See the use_lvmetad comment for a special case regarding filters.\n"
+ "Example:\n"
+ "Accept every block device.\n"
"filter = [ \"a/.*/\" ]\n"
- "Exclude the cdrom drive:\n"
+ "Example:\n"
+ "Reject the cdrom drive.\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"
- "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"
- "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")
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"
- "for system-wide device filtering (udev rules, lvmetad). To hide devices\n"
- "from LVM-specific udev processing and/or from lvmetad, you need to set\n"
- "global_filter. The syntax is the same as for normal filter\n"
- "above. Devices that fail the global_filter are not even opened by LVM.\n")
+ "Since filter is often overridden from the command line,\n"
+ "it is not suitable for system-wide device filtering,\n"
+ "e.g. udev rules and lvmetad. To hide devices from LVM-specific\n"
+ "udev processing and lvmetad, use global_filter.\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),
- "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),
- "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"
"By default this cache is stored in a file named .cache\n"
"in the directory specified by this setting.\n"
- "It is safe to delete the contents: the tools regenerate it.\n"
- "(The old setting 'cache' is still respected if neither of\n"
- "these new ones is present.)\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")
+ "It is safe to delete this file; the tools regenerate it.\n"
+ "If obtain_device_list_from_udev is enabled, the list of devices\n"
+ "is obtained from udev and any existing .cache 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),
- "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),
- "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),
"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")
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"
- "the block devices it believes are valid.\n")
+ "Restrict device scanning to block devices that sysfs believes\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),
- "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),
- "Ignore devices used as components of software RAID (md) devices by
looking\n"
- "for md superblocks.\n")
+ "Ignore devices used as components of software RAID (md) devices\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),
"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")
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"
- "with the md device's stripe-width.\n")
+ "If a PV is placed directly upon an md device, align its data\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),
- "Default alignment of the start of a data area in MB. If set to 0,\n"
- "a value of 64KB will be used. Set to 1 for 1MiB, 2 for 2MiB, etc.\n")
+ "Default alignment of the start of a data area in MB.\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),
- "The start of a PV's data area will be a multiple of the
minimum_io_size\n"
- "or optimal_io_size exposed in sysfs.\n"
- "minimum_io_size - the smallest request the device can perform\n"
- "without incurring a read-modify-write penalty (e.g. MD's chunk size)\n"
- "optimal_io_size - the device's preferred unit of receiving I/O\n"
- "(e.g. MD's stripe width)\n"
+ "The start of a PV data area will be a multiple of\n"
+ "minimum_io_size or optimal_io_size exposed in sysfs.\n"
+ "minimum_io_size is the smallest request the device can perform\n"
+ "without incurring a read-modify-write penalty, e.g. MD chunk size.\n"
+ "optimal_io_size is the device's preferred unit of receiving I/O,\n"
+ "e.g. MD stripe width.\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"
"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),
"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"
- "Set to 0 for the default alignment (see: data_alignment_default)\n"
- "or page size, if larger.\n")
+ "If a PV is placed directly upon an md device and\n"
+ "md_chunk_alignment or data_alignment_detection are enabled,\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),
- "The start of the PV's aligned data area will be shifted by\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"
+ "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"
+ "may be non-zero. Certain 4KB sector drives that compensate for\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"
"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),
- "While scanning the system for PVs, skip a device-mapper device\n"
- "that has its I/O suspended. Otherwise, LVM waits for the device\n"
- "to become accessible. This should only be needed in recovery situations.\n")
+ "While scanning the system for PVs, skip a device-mapper\n"
+ "device that has its I/O suspended. Otherwise, LVM waits\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),
- "This setting determines whether logical volumes of 'mirror'
segment\n"
- "type are scanned for LVM labels. This affects the ability of\n"
- "mirrors to be used as physical volumes. If ignore_lvm_mirrors\n"
- "is enabled, it becomes impossible to create volume groups on top\n"
- "of mirror logical volumes - i.e. to stack volume groups on mirrors.\n"
- "Allowing mirror logical volumes to be scanned (ignore_lvm_mirrors is\n"
- "disabled) can potentially cause LVM processes and I/O to the mirror to\n"
- "become blocked. This is due to the way that the 'mirror' segment
type\n"
- "handles failures. In order for the hang to manifest itself, an LVM\n"
- "command must be run just after a failure and before the automatic LVM\n"
- "repair process takes place OR there must be failures in multiple mirrors\n"
- "in the same volume group at the same time with write failures occurring\n"
- "moments before a scan of the mirror's labels.\n"
- "Note that these scanning limitations do not apply to the LVM RAID\n"
- "types, like 'raid1'. The RAID segment types handle failures in a\n"
- "different way and are not subject to possible process or I/O blocking.\n"
- "It is encouraged that users enable ignore_lvm_mirrors if they are using\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")
+ "Enable this to avoid possible deadlocks when using the 'mirror'\n"
+ "segment type. This setting determines whether logical volumes\n"
+ "using the 'mirror' segment type are scanned for LVM labels.\n"
+ "This affects the ability of mirrors to be used as physical volumes.\n"
+ "If this setting is enabled, it becomes impossible to create VGs\n"
+ "on top of mirror LVs, i.e. to stack VGs on mirror LVs.\n"
+ "If this setting is disabled, allowing mirror LVs to be scanned,\n"
+ "it may cause LVM processes and I/O to the mirror to become blocked.\n"
+ "This is due to the way that the mirror segment type handles failures.\n"
+ "In order for the hang to occur, an LVM command must be run just after\n"
+ "a failure and before the automatic LVM repair process takes place,\n"
+ "or there must be failures in multiple mirrors in the same VG at the\n"
+ "same time with write failures occurring moments before a scan of the\n"
+ "mirror's labels.\n"
+ "The 'mirror' scanning problems do not apply to LVM RAID types
like\n"
+ "'raid1' which handle failures in a different way, making them a\n"
+ "better choice for VG stacking.\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),
- "During each LVM operation errors received from each device are counted.\n"
- "If the counter of a particular device exceeds the limit set here, no\n"
- "further I/O is sent to that device for the remainder of the respective\n"
- "operation. Setting the parameter to 0 disables the counters altogether.\n")
+ "During each LVM operation, errors received from each device\n"
+ "are counted. If the counter of a device exceeds the limit set\n"
+ "here, no further I/O is sent to that device for the remainder\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),
"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),
"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"
- "Any value smaller than 512KB is ignored.\n"
- "The original built-in setting was 512 up to and including version
2.02.84.\n")
+ "Any value smaller than 512KB 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),
- "Issue discards to a logical volumes's underlying physical volume(s)
when\n"
- "the logical volume is no longer using the physical volumes' space
(e.g.\n"
- "lvremove, lvreduce, etc). Discards inform the storage that a region is\n"
- "no longer in use. Storage that supports discards advertise the protocol\n"
- "specific way discards should be issued by the kernel (TRIM, UNMAP, or\n"
- "WRITE SAME with UNMAP bit set). Not all storage will support or benefit\n"
- "from discards but SSDs and thinly provisioned LUNs generally do. If
enabled,\n"
- "discards will only be issued if both the storage and kernel provide
support.\n")
+ "Issue discards to a logical volume's underlying physical volumes\n"
+ "when the logical volume is no longer using the physical volumes'\n"
+ "space, e.g. lvremove, lvreduce. Discards inform the storage that\n"
+ "a region is no longer in use. Storage that supports discards\n"
+ "advertise the protocol specific way discards should be issued by\n"
+ "the kernel (TRIM, UNMAP, or WRITE SAME with UNMAP bit set).\n"
+ "Not all storage will support or benefit from discards, but SSDs\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),
"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")
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"
- "any existing signatures while creating new Physical Volumes and\n"
- "Logical Volumes. LVM needs to be compiled with blkid wiping support\n"
- "for this setting to take effect.\n"
+ "Use the blkid library instead of native LVM code to detect\n"
+ "any existing signatures while creating new PVs and LVs.\n"
+ "LVM needs to be compiled with blkid wiping support for this\n"
+ "setting to take effect.\n"
"LVM native detection code is currently able to recognize:\n"
"MD device signatures, swap signature, and LUKS signatures.\n"
- "To see the list of signatures recognized by blkid, check the output\n"
- "of 'blkid -k' command. The blkid can recognize more signatures
than\n"
- "LVM native detection code, but due to this higher number of signatures\n"
- "to be recognized, it can take more time to complete the signature scan.\n")
+ "To see the list of signatures recognized by blkid, check the\n"
+ "output of the 'blkid -k' command. blkid can recognize more\n"
+ "signatures than LVM native detection code, but due to this\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),
- "Look for any signatures on a newly-created Logical Volume\n"
- "whenever zeroing of the LV is done (zeroing is controlled by -Z/--zero\n"
- "option and if not specified, zeroing is used by default if possible).\n"
- "While zeroing simply overwrites first 4 KiB of the LV with zeroes without\n"
- "doing any signature detection, signature wiping goes beyond that and it\n"
- "can detect exact type and position of signature within the whole LV.\n"
- "As such, it provides cleaner LV for use after creation as all known\n"
- "signatures are wiped so that the LV is not claimed by other tools\n"
- "incorrectly by the existence of old signature from any previous use.\n"
- "The number of signatures that LVM can detect depends on detection\n"
- "code that is selected - see also use_blkid_wiping option.\n"
- "Wiping of each detected signature must be confirmed.\n"
+ "Look for and erase any signatures while zeroing a new LV.\n"
+ "Zeroing is controlled by the -Z/--zero option, and if not\n"
+ "specified, zeroing is used by default if possible.\n"
+ "Zeroing simply overwrites the first 4 KiB of a new LV\n"
+ "with zeroes and does no signature detection or wiping.\n"
+ "Signature wiping goes beyond zeroing and detects exact\n"
+ "types and positions of signatures within the whole LV.\n"
+ "It provides a cleaner LV after creation as all known\n"
+ "signatures are wiped. The LV is not claimed incorrectly\n"
+ "by other tools because of old signatures from previous use.\n"
+ "The number of signatures that LVM can detect depends on the\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"
"over this setting.\n"
- "When disabled, signatures on newly-created Logical Volumes\n"
- "are never detected and wiped and you always need to use\n"
- "-W/--wipesignatures y option directly to enable this feature\n"
- "no matter whether zeroing is used or not.\n")
+ "When this setting is disabled, signatures on new LVs are\n"
+ "not detected or erased unless the -W/--wipesignatures y\n"
+ "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),
"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),
"The default cache mode used for new cache pools.\n"
"Possible options are: writethrough, writeback.\n"
- "writethrough - Data blocks are immediately written from the cache to
disk.\n"
- "writeback - Data blocks are written from the cache back to disk after\n"
- "some delay to improve performance.\n")
+ "writethrough - Data blocks are immediately written from\n"
+ "the cache to disk.\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),
"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"
- "the cache, where small reads and writes can cause large sections of\n"
- "an LV to be mapped into the cache. However, choosing a chunk_size\n"
- "that is too small can result in more overhead trying to manage the\n"
- "numerous chunks that become mapped into the cache. The former is\n"
- "more of a problem than the latter in most cases, so we default to\n"
- "a value that is on the smaller end of the spectrum. Supported values\n"
- "range from 32(kiB) to 1048576 in multiples of 32.\n")
+ "Using a chunk_size that is too large can result in wasteful\n"
+ "use of the cache, where small reads and writes can cause\n"
+ "large sections of an LV to be mapped into the cache. However,\n"
+ "choosing a chunk_size that is too small can result in more\n"
+ "overhead trying to manage the numerous chunks that become mapped\n"
+ "into the cache. The former is more of a problem than the latter\n"
+ "in most cases, so we default to a value that is on the smaller\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),
"Guarantees that thin pool metadata will always\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),
- "Enable/disable zeroing of thin pool data chunks before their first use.\n"
- "N.B. zeroing larger thin pool chunk size degrades performance.\n")
+ "Enable/disable zeroing of thin pool data chunks before\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),
"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),
"The chunk size calculation policy for thin pool volumes.\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"
"device hints exposed in sysfs - the minimum_io_size.\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"
"device hints exposed in sysfs - the optimal_io_size.\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),
"The minimal chunk size (in KB) for thin pool volumes.\n"
- "Use of the larger chunk size may improve performance for plain\n"
- "thin volumes, however using them for snapshot volumes is less efficient,\n"
- "as it consumes more space and takes extra time for copying.\n"
- "When unset, lvm tries to estimate chunk size starting from 64KB\n"
- "Supported values are in range from 64 to 1048576.\n")
+ "Larger chunk sizes may improve performance for plain\n"
+ "thin volumes, however using them for snapshot volumes\n"
+ "is less efficient, as it consumes more space and takes\n"
+ "extra time for copying. When unset, lvm tries to estimate\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),
- "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),
"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")
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"
- "There are 6 syslog-like log levels currently in use - 2 to 7 inclusive.\n"
+ "The level of log messages that are sent to the\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")
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),
- "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),
- "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"
"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"
@@ -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_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"
- "in debug output if the class is listed here.\n"
- "Classes currently available:\n"
- "memory, devices, activation, allocation, lvmetad, metadata, cache,
locking.\n"
+ "Some debugging messages are assigned to a class\n"
+ "and only appear in debug output if the class is\n"
+ "listed here. Classes currently available:\n"
+ "memory, devices, activation, allocation,\n"
+ "lvmetad, metadata, cache, locking.\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),
@@ -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")
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"
- "will be made. Equivalent to having the -t option on every command.\n")
+ "Enabling test mode means that no changes to the\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),
"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),
- "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"
- "If you have scripts that depend on the old behaviour, disable\n"
- "this setting temporarily until you update them.\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"
+ "If scripts depend on the old behaviour, disable\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),
"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),
"Enable/disable communication with the kernel device-mapper.\n"
- "Disable if you want to use the tools to manipulate LVM metadata\n"
- "without activating any logical volumes.\n"
- "If the device-mapper kernel driver is not present in your kernel,\n"
- "disabling this should suppress the error messages.\n")
+ "Disable to use the tools to manipulate LVM metadata without\n"
+ "activating any logical volumes. If the device-mapper driver\n"
+ "is not present in the kernel, disabling this should suppress\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),
- "If we cannot communicate with device-mapper, try running the LVM1 tools.\n"
- "This option only applies to 2.4 kernels and is provided to help you\n"
- "switch between device-mapper kernels and LVM1 kernels.\n"
- "The LVM1 tools need to be installed with .lvm1 suffices\n"
- "e.g. vgscan.lvm1 and they will stop working after you start using\n"
- "the new lvm2 on-disk metadata format.\n")
+ "Try running the LVM1 tools if LVM cannot communicate with\n"
+ "device-mapper. This option only applies to 2.4 kernels and\n"
+ "is provided to help switch between device-mapper kernels and\n"
+ "LVM1 kernels.\n"
+ "The LVM1 tools need to be installed with .lvm1 suffices,\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),
- "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")
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"
"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")
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"
- "Turn locking off by setting to 0 (dangerous: risks metadata corruption\n"
- "if LVM commands get run concurrently).\n"
- "Type 2 uses the external shared library locking_library.\n"
- "Type 3 uses built-in clustered locking.\n"
- "Type 4 uses read-only locking which forbids any operations that might\n"
- "change metadata.\n"
- "Type 5 offers dummy locking for tools that do not need any locks.\n"
- "You should not need to set this directly: the tools will select when\n"
- "to use it instead of the configured locking_type. Do not use lvmetad or\n"
- "the kernel device-mapper driver with this locking type.\n"
- "It is used by the --readonly option that offers read-only access to\n"
- "Volume Group metadata that cannot be locked safely because it belongs to\n"
- "an inaccessible domain and might be in use, for example a virtual machine\n"
- "image or a disk that is shared by a clustered machine.\n"
- "N.B. Don't use lvmetad with locking type 3 as lvmetad is not yet\n"
- "supported in clustered environment. If use_lvmetad=1 and locking_type=3\n"
- "is set at the same time, LVM always issues a warning message about this\n"
- "and then it automatically disables lvmetad use.\n")
+ "Type of locking to use.\n"
+ "Type 0: turns off locking. Warning: this risks metadata\n"
+ "corruption if commands run concurrently.\n"
+ "Type 1: uses local file-based locking, the standard mode.\n"
+ "Type 2: uses the external shared library locking_library.\n"
+ "Type 3: uses built-in clustered locking with clvmd.\n"
+ "This is incompatible with lvmetad. If use_lvmetad is enabled,\n"
+ "lvm prints a warning and disables lvmetad use.\n"
+ "Type 4: uses read-only locking which forbids any operations\n"
+ "that might change metadata.\n"
+ "Type 5: offers dummy locking for tools that do not need any locks.\n"
+ "You should not need to set this directly; the tools will select\n"
+ "when to use it instead of the configured locking_type.\n"
+ "Do not use lvmetad or the kernel device-mapper driver with this\n"
+ "locking type. It is used by the --readonly option that offers\n"
+ "read-only access to Volume Group metadata that cannot be locked\n"
+ "safely because it belongs to an inaccessible domain and might be\n"
+ "in use, for example a virtual machine image or a disk that is\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),
"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")
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"
"Possible options are: mirror, raid1.\n"
- "mirror - The original RAID1 implementation provided by LVM/DM.\n"
- "It is characterized by a flexible log solution (core, disk, mirrored)\n"
- "and by the necessity to block I/O while reconfiguring in the\n"
- "event of a failure.\n"
- "There is an inherent race in the dmeventd failure handling\n"
- "logic with snapshots of devices using this type of RAID1 that\n"
- "in the worst case could cause a deadlock.\n"
- "raid1 - This implementation leverages MD's RAID1 personality through\n"
- "device-mapper. It is characterized by a lack of log options.\n"
- "(A log is always allocated for every device and they are placed\n"
- "on the same device as the image - no separate devices are\n"
- "required.) This mirror implementation does not require I/O\n"
- "to be blocked in the kernel in the event of a failure.\n"
- "This mirror implementation is not cluster-aware and cannot be\n"
- "used in a shared (active/active) fashion in a cluster.\n"
- "Use '--type <mirror|raid1>' to override this default
setting.\n")
+ "mirror - the original RAID1 implementation from LVM/DM.\n"
+ "It is characterized by a flexible log solution (core,\n"
+ "disk, mirrored), and by the necessity to block I/O while\n"
+ "handling a failure.\n"
+ "There is an inherent race in the dmeventd failure\n"
+ "handling logic with snapshots of devices using this\n"
+ "type of RAID1 that in the worst case could cause a\n"
+ "deadlock. (Also see devices/ignore_lvm_mirrors.)\n"
+ "raid1 - a newer RAID1 implementation using the MD RAID1\n"
+ "personality through device-mapper. It is characterized\n"
+ "by a lack of log options. (A log is always allocated for\n"
+ "every device and they are placed on the same device as the\n"
+ "image - no separate devices are required.) This mirror\n"
+ "implementation does not require I/O to be blocked while\n"
+ "handling a failure. This mirror implementation is not\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),
"Determines the segment types used by default when\n"