[lvm-devel] master - config: create lists of accepted values in descriptions

David Teigland teigland at fedoraproject.org
Mon Aug 17 19:54:30 UTC 2015


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=dece918bc8e0d4e3222c4e71fc7f212b994e358c
Commit:        dece918bc8e0d4e3222c4e71fc7f212b994e358c
Parent:        b091c37595b28702e8bd3570416fea2718836d56
Author:        David Teigland <teigland at redhat.com>
AuthorDate:    Thu Aug 13 15:31:29 2015 -0500
Committer:     David Teigland <teigland at redhat.com>
CommitterDate: Mon Aug 17 14:50:41 2015 -0500

config: create lists of accepted values in descriptions

---
 lib/config/config_settings.h |  698 +++++++++++++++++++++++++-----------------
 1 files changed, 419 insertions(+), 279 deletions(-)

diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h
index d4f51eb..8603ae6 100644
--- a/lib/config/config_settings.h
+++ b/lib/config/config_settings.h
@@ -199,10 +199,14 @@ cfg(devices_external_device_info_source_CFG, "external_device_info_source", devi
 	"this information. For example, this 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"
-	"only if LVM is compiled with udev support.\n")
+	"#\n"
+	"Accepted values:\n"
+	"  none\n"
+	"    No external device information source is used.\n"
+	"  udev\n"
+	"    Reuse existing udev database records. Applicable only if LVM is\n"
+	"    compiled with udev support.\n"
+	"#\n")
 
 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), NULL, 0, NULL,
 	"Select which path name to display for a block device.\n"
@@ -471,11 +475,14 @@ cfg(allocation_cache_pool_cachemode_CFG, "cache_pool_cachemode", allocation_CFG_
 
 cfg(allocation_cache_mode_CFG, "cache_mode", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_CACHE_MODE, vsn(2, 2, 128), NULL, 0, NULL,
 	"The default cache mode used for new cache.\n"
-	"Possible options are: writethrough, writeback.\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"
+	"#\n"
+	"Accepted values:\n"
+	"  writethrough\n"
+	"    Data blocks are immediately written from the cache to disk.\n"
+	"  writeback\n"
+	"    Data blocks are written from the cache back to disk after some\n"
+	"    delay to improve performance.\n"
+	"#\n"
 	"This setting replaces allocation/cache_pool_cachemode.\n")
 
 cfg(allocation_cache_policy_CFG, "cache_policy", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, 0, vsn(2, 2, 128), NULL, 0, NULL,
@@ -513,19 +520,28 @@ cfg(allocation_thin_pool_zero_CFG, "thin_pool_zero", allocation_CFG_SECTION, CFG
 
 cfg(allocation_thin_pool_discards_CFG, "thin_pool_discards", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_THIN_POOL_DISCARDS, vsn(2, 2, 99), NULL, 0, NULL,
 	"The discards behaviour of thin pool volumes.\n"
-	"Possible options are: ignore, nopassdown, passdown.\n")
+	"#\n"
+	"Accepted values:\n"
+	"  ignore\n"
+	"  nopassdown\n"
+	"  passdown\n"
+	"#\n")
 
 cfg(allocation_thin_pool_chunk_size_policy_CFG, "thin_pool_chunk_size_policy", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_THIN_POOL_CHUNK_SIZE_POLICY, vsn(2, 2, 101), NULL, 0, NULL,
 	"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"
-	"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"
-	"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")
+	"#\n"
+	"Accepted values:\n"
+	"  generic\n"
+	"    If thin_pool_chunk_size is defined, use it. Otherwise, calculate\n"
+	"    the chunk size based on estimation and device hints exposed in\n"
+	"    sysfs - the minimum_io_size. The chunk size is always at least\n"
+	"    64KiB.\n"
+	"  performance\n"
+	"    If thin_pool_chunk_size is defined, use it. Otherwise, calculate\n"
+	"    the chunk size for performance based on device hints exposed in\n"
+	"    sysfs - the optimal_io_size. The chunk size is always at least\n"
+	"    512KiB.\n"
+	"#\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), 0, NULL,
 	"The minimal chunk size in KiB for thin pool volumes.\n"
@@ -679,24 +695,33 @@ cfg(global_etc_CFG, "etc", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_ETC_D
 
 cfg(global_locking_type_CFG, "locking_type", global_CFG_SECTION, 0, CFG_TYPE_INT, 1, vsn(1, 0, 0), NULL, 0, NULL,
 	"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")
+	"#\n"
+	"Accepted values:\n"
+	"  0\n"
+	"    Turns off locking. Warning: this risks metadata corruption if\n"
+	"    commands run concurrently.\n"
+	"  1\n"
+	"    LVM uses local file-based locking, the standard mode.\n"
+	"  2\n"
+	"    LVM uses the external shared library locking_library.\n"
+	"  3\n"
+	"    LVM 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"
+	"  4\n"
+	"    LVM uses read-only locking which forbids any operations that\n"
+	"    might change metadata.\n"
+	"  5\n"
+	"    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"
+	"#\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), NULL, 0, NULL,
 	"When disabled, fail if a lock request would block.\n")
@@ -763,55 +788,65 @@ cfg(global_metadata_read_only_CFG, "metadata_read_only", global_CFG_SECTION, 0,
 
 cfg(global_mirror_segtype_default_CFG, "mirror_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_MIRROR_SEGTYPE, vsn(2, 2, 87), "@DEFAULT_MIRROR_SEGTYPE@", 0, NULL,
 	"The segment type used by the short mirroring option -m.\n"
-	"Possible options are: mirror, raid1.\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"
-	"The '--type mirror|raid1' option overrides this setting.\n")
+	"The --type mirror|raid1 option overrides this setting.\n"
+	"#\n"
+	"Accepted values:\n"
+	"  mirror\n"
+	"    The original RAID1 implementation from LVM/DM. It is\n"
+	"    characterized by a flexible log solution (core, disk, mirrored),\n"
+	"    and by the necessity to block I/O while handling a failure.\n"
+	"    There is an inherent race in the dmeventd failure handling logic\n"
+	"    with snapshots of devices using this type of RAID1 that in the\n"
+	"    worst case could cause a deadlock. (Also see\n"
+	"    devices/ignore_lvm_mirrors.)\n"
+	"  raid1\n"
+	"    This is a newer RAID1 implementation using the MD RAID1\n"
+	"    personality through device-mapper.  It is characterized by a\n"
+	"    lack of log options. (A log is always allocated for every\n"
+	"    device and they are placed on the same device as the image,\n"
+	"    so 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"
+	"#\n")
 
 cfg(global_raid10_segtype_default_CFG, "raid10_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_RAID10_SEGTYPE, vsn(2, 2, 99), "@DEFAULT_RAID10_SEGTYPE@", 0, NULL,
 	"The segment type used by the -i -m combination.\n"
-	"The --stripes/-i and --mirrors/-m options can both\n"
-	"be specified during the creation of a logical volume\n"
-	"to use both striping and mirroring for the LV.\n"
-	"There are two different implementations.\n"
-	"Possible options are: raid10, mirror.\n"
-	"raid10 - LVM uses MD's RAID10 personality through DM.\n"
-	"mirror - LVM layers the 'mirror' and 'stripe' segment types.\n"
-	"The layering is done by creating a mirror LV on top of\n"
-	"striped sub-LVs, effectively creating a RAID 0+1 array.\n"
-	"The layering is suboptimal in terms of providing redundancy\n"
-	"and performance. The 'raid10' option is perferred.\n"
-	"The '--type raid10|mirror' option overrides this setting.\n")
+	"The --stripes/-i and --mirrors/-m options can both be specified\n"
+	"during the creation of a logical volume to use both striping and\n"
+	"mirroring for the LV. There are two different implementations.\n"
+	"The --type raid10|mirror option overrides this setting.\n"
+	"#\n"
+	"Accepted values:\n"
+	"  raid10\n"
+	"    LVM uses MD's RAID10 personality through DM. This is the\n"
+	"    preferred option.\n"
+	"  mirror\n"
+	"    LVM layers the 'mirror' and 'stripe' segment types. The layering\n"
+	"    is done by creating a mirror LV on top of striped sub-LVs,\n"
+	"    effectively creating a RAID 0+1 array. The layering is suboptimal\n"
+	"    in terms of providing redundancy and performance.\n"
+	"#\n")
 
 cfg(global_sparse_segtype_default_CFG, "sparse_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_SPARSE_SEGTYPE, vsn(2, 2, 112), "@DEFAULT_SPARSE_SEGTYPE@", 0, NULL,
 	"The segment type used by the -V -L combination.\n"
-	"The combination of -V and -L options creates a\n"
-	"sparse LV. There are two different implementations.\n"
-	"Possible options are: snapshot, thin.\n"
-	"snapshot - The original snapshot implementation from LVM/DM.\n"
-	"It uses an old snapshot that mixes data and metadata within\n"
-	"a single COW storage volume and performs poorly when the\n"
-	"size of stored data passes hundreds of MB.\n"
-	"thin - A newer implementation that uses thin provisioning.\n"
-	"It has a bigger minimal chunk size (64KiB) and uses a separate\n"
-	"volume for metadata. It has better performance, especially\n"
-	"when more data is used.  It also supports full snapshots.\n"
-	"The '--type snapshot|thin' option overrides this setting.\n")
+	"The combination of -V and -L options creates a sparse LV. There are\n"
+	"two different implementations.\n"
+	"The --type snapshot|thin option overrides this setting.\n"
+	"#\n"
+	"Accepted values:\n"
+	"  snapshot\n"
+	"    The original snapshot implementation from LVM/DM. It uses an old\n"
+	"    snapshot that mixes data and metadata within a single COW\n"
+	"    storage volume and performs poorly when the size of stored data\n"
+	"    passes hundreds of MB.\n"
+	"  thin\n"
+	"    A newer implementation that uses thin provisioning. It has a\n"
+	"    bigger minimal chunk size (64KiB) and uses a separate volume for\n"
+	"    metadata. It has better performance, especially when more data\n"
+	"    is used.  It also supports full snapshots.\n"
+	"#\n")
 
 cfg(global_lvdisplay_shows_full_device_path_CFG, "lvdisplay_shows_full_device_path", global_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_LVDISPLAY_SHOWS_FULL_DEVICE_PATH, vsn(2, 2, 89), NULL, 0, NULL,
 	"Enable this to reinstate the previous lvdisplay name format.\n"
@@ -959,23 +994,28 @@ cfg_array(global_cache_repair_options_CFG, "cache_repair_options", global_CFG_SE
 
 cfg(global_system_id_source_CFG, "system_id_source", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_SYSTEM_ID_SOURCE, vsn(2, 2, 117), NULL, 0, NULL,
 	"The method LVM uses to set the local system ID.\n"
-	"Volume Groups can also be given a system ID (by\n"
-	"vgcreate, vgchange, or vgimport.)\n"
-	"A VG on shared storage devices is accessible only\n"
-	"to the host with a matching system ID.\n"
-	"See 'man lvmsystemid' for information on limitations\n"
-	"and correct usage.\n"
-	"Possible options are: none, lvmlocal, uname, machineid, file.\n"
-	"none - The host has no system ID.\n"
-	"lvmlocal - Obtain the system ID from the system_id setting in the\n"
-	"'local' section of an lvm configuration file, e.g. lvmlocal.conf.\n"
-	"uname - Set the system ID from the hostname (uname) of the system.\n"
-	"System IDs beginning localhost are not permitted.\n"
-	"machineid - Use the contents of the machine-id file to set the\n"
-	"system ID.  Some systems create this file at installation time.\n"
-	"See 'man machine-id' and global/etc.\n"
-	"file - Use the contents of another file (system_id_file) to set\n"
-	"the system ID.\n")
+	"Volume Groups can also be given a system ID (by vgcreate, vgchange,\n"
+	"or vgimport.) A VG on shared storage devices is accessible only to\n"
+	"the host with a matching system ID. See 'man lvmsystemid' for\n"
+	"information on limitations and correct usage.\n"
+	"#\n"
+	"Accepted values:\n"
+	"  none\n"
+	"    The host has no system ID.\n"
+	"  lvmlocal\n"
+	"    Obtain the system ID from the system_id setting in the 'local'\n"
+	"    section of an lvm configuration file, e.g. lvmlocal.conf.\n"
+	"  uname\n"
+	"    Set the system ID from the hostname (uname) of the system.\n"
+	"    System IDs beginning localhost are not permitted.\n"
+	"  machineid\n"
+	"    Use the contents of the machine-id file to set the system ID.\n"
+	"    Some systems create this file at installation time.\n"
+	"    See 'man machine-id' and global/etc.\n"
+	"  file\n"
+	"    Use the contents of another file (system_id_file) to set the\n"
+	"    system ID.\n"
+	"#\n")
 
 cfg(global_system_id_file_CFG, "system_id_file", global_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(2, 2, 117), NULL, 0, NULL,
 	"The full path to the file containing a system ID.\n"
@@ -1061,18 +1101,23 @@ cfg(activation_process_priority_CFG, "process_priority", activation_CFG_SECTION,
 
 cfg_array(activation_volume_list_CFG, "volume_list", activation_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 18), NULL, 0, NULL,
 	"Only LVs selected by this list are activated.\n"
-	"If this list is defined, an LV is only activated\n"
-	"if it matches an entry in this list.\n"
-	"If this list is undefined, it imposes no limits\n"
+	"If this list is defined, an LV is only activated if it matches an\n"
+	"entry in this list. If this list is undefined, it imposes no limits\n"
 	"on LV activation (all are allowed).\n"
-	"Possible options are: vgname, vgname/lvname, @tag, @*\n"
-	"vgname is matched exactly and selects all LVs in the VG.\n"
-	"vgname/lvname is matched exactly and selects the LV.\n"
-	"@tag selects if tag matches a tag set on the LV or VG.\n"
-	"@* selects if a tag defined on the host is also set on\n"
-	"the LV or VG.  See tags/hosttags.\n"
-	"If any host tags exist but volume_list is not defined,\n"
-	"a default single-entry list containing '@*' is assumed.\n"
+	"#\n"
+	"Accepted values:\n"
+	"  vgname\n"
+	"    The VG name is matched exactly and selects all LVs in the VG.\n"
+	"  vgname/lvname\n"
+	"    The VG name and LV name are matched exactly and selects the LV.\n"
+	"  @tag\n"
+	"    Selects an LV if the specified tag matches a tag set on the LV\n"
+	"    or VG.\n"
+	"  @*\n"
+	"    Selects an LV if a tag defined on the host is also set on the LV\n"
+	"    or VG. See tags/hosttags. If any host tags exist but volume_list\n"
+	"    is not defined, a default single-entry list containing '@*' is\n"
+	"    assumed.\n"
 	"#\n"
 	"Example\n"
 	"volume_list = [ \"vg1\", \"vg2/lvol1\", \"@tag1\", \"@*\" ]\n"
@@ -1080,43 +1125,64 @@ cfg_array(activation_volume_list_CFG, "volume_list", activation_CFG_SECTION, CFG
 
 cfg_array(activation_auto_activation_volume_list_CFG, "auto_activation_volume_list", activation_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(2, 2, 97), NULL, 0, NULL,
 	"Only LVs selected by this list are auto-activated.\n"
-	"This list works like volume_list, but it is used\n"
-	"only by auto-activation commands. It does not apply\n"
-	"to direct activation commands.\n"
-	"If this list is defined, an LV is only auto-activated\n"
-	"if it matches an entry in this list.\n"
-	"If this list is undefined, it imposes no limits\n"
-	"on LV auto-activation (all are allowed.)\n"
-	"If this list is defined and empty, i.e. \"[]\",\n"
-	"then no LVs are selected for auto-activation.\n"
-	"An LV that is selected by this list for\n"
-	"auto-activation, must also be selected by\n"
-	"volume_list (if defined) before it is activated.\n"
-	"Auto-activation is an activation command that\n"
-	"includes the 'a' argument: --activate ay or -a ay,\n"
-	"e.g. vgchange -a ay, or lvchange -a ay vgname/lvname.\n"
-	"The 'a' (auto) argument for auto-activation is\n"
-	"meant to be used by activation commands that are\n"
-	"run automatically by the system, as opposed to\n"
-	"LVM commands run directly by a user. A user may\n"
-	"also use the 'a' flag directly to perform auto-\n"
-	"activation.\n"
-	"An example of a system-generated auto-activation\n"
-	"command is 'pvscan --cache -aay' which is generated\n"
-	"when udev and lvmetad detect a new VG has appeared\n"
-	"on the system, and want LVs in it to be auto-activated.\n"
-	"Possible options are: vgname, vgname/lvname, @tag, @*\n"
-	"See volume_list for how these options are matched to LVs.\n")
+	"This list works like volume_list, but it is used only by\n"
+	"auto-activation commands. It does not apply to direct activation\n"
+	"commands. If this list is defined, an LV is only auto-activated\n"
+	"if it matches an entry in this list. If this list is undefined, it\n"
+	"imposes no limits on LV auto-activation (all are allowed.) If this\n"
+	"list is defined and empty, i.e. \"[]\", then no LVs are selected for\n"
+	"auto-activation. An LV that is selected by this list for\n"
+	"auto-activation, must also be selected by volume_list (if defined)\n"
+	"before it is activated. Auto-activation is an activation command that\n"
+	"includes the 'a' argument: --activate ay or -a ay. The 'a' (auto)\n"
+	"argument for auto-activation is meant to be used by activation\n"
+	"commands that are run automatically by the system, as opposed to LVM\n"
+	"commands run directly by a user. A user may also use the 'a' flag\n"
+	"directly to perform auto-activation. Also see pvscan(8) for more\n"
+	"information about auto-activation.\n"
+	"#\n"
+	"Accepted values:\n"
+	"  vgname\n"
+	"    The VG name is matched exactly and selects all LVs in the VG.\n"
+	"  vgname/lvname\n"
+	"    The VG name and LV name are matched exactly and selects the LV.\n"
+	"  @tag\n"
+	"    Selects an LV if the specified tag matches a tag set on the LV\n"
+	"    or VG.\n"
+	"  @*\n"
+	"    Selects an LV if a tag defined on the host is also set on the LV\n"
+	"    or VG. See tags/hosttags. If any host tags exist but volume_list\n"
+	"    is not defined, a default single-entry list containing '@*' is\n"
+	"    assumed.\n"
+	"#\n"
+	"Example\n"
+	"volume_list = [ \"vg1\", \"vg2/lvol1\", \"@tag1\", \"@*\" ]\n"
+	"#\n")
 
 cfg_array(activation_read_only_volume_list_CFG, "read_only_volume_list", activation_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(2, 2, 89), NULL, 0, NULL,
 	"LVs in this list are activated in read-only mode.\n"
-	"If this list is defined, each LV that is to be activated\n"
-	"is checked against this list, and if it matches, it is\n"
-	"activated in read-only mode.\n"
-	"This overrides the permission setting stored in the\n"
-	"metadata, e.g. from --permission rw.\n"
-	"Possible options are: vgname, vgname/lvname, @tag, @*\n"
-	"See volume_list for how these options are matched to LVs.\n")
+	"If this list is defined, each LV that is to be activated is checked\n"
+	"against this list, and if it matches, it is activated in read-only\n"
+	"mode. This overrides the permission setting stored in the metadata,\n"
+	"e.g. from --permission rw.\n"
+	"#\n"
+	"Accepted values:\n"
+	"  vgname\n"
+	"    The VG name is matched exactly and selects all LVs in the VG.\n"
+	"  vgname/lvname\n"
+	"    The VG name and LV name are matched exactly and selects the LV.\n"
+	"  @tag\n"
+	"    Selects an LV if the specified tag matches a tag set on the LV\n"
+	"    or VG.\n"
+	"  @*\n"
+	"    Selects an LV if a tag defined on the host is also set on the LV\n"
+	"    or VG. See tags/hosttags. If any host tags exist but volume_list\n"
+	"    is not defined, a default single-entry list containing '@*' is\n"
+	"    assumed.\n"
+	"#\n"
+	"Example\n"
+	"volume_list = [ \"vg1\", \"vg2/lvol1\", \"@tag1\", \"@*\" ]\n"
+	"#\n")
 
 cfg(activation_mirror_region_size_CFG, "mirror_region_size", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_RAID_REGION_SIZE, vsn(1, 0, 0), NULL, vsn(2, 2, 99),
 	"This has been replaced by the activation/raid_region_size setting.\n",
@@ -1140,62 +1206,70 @@ cfg(activation_error_when_full_CFG, "error_when_full", activation_CFG_SECTION, C
 
 cfg(activation_readahead_CFG, "readahead", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_READ_AHEAD, vsn(1, 0, 23), NULL, 0, NULL,
 	"Setting to use when there is no readahead setting in metadata.\n"
-	"Possible options are: none, auto.\n"
-	"none - Disable readahead.\n"
-	"auto - Use default value chosen by kernel.\n")
+	"#\n"
+	"Accepted values:\n"
+	"  none\n"
+	"    Disable readahead.\n"
+	"  auto\n"
+	"    Use default value chosen by kernel.\n"
+	"#\n")
 
 cfg(activation_raid_fault_policy_CFG, "raid_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_RAID_FAULT_POLICY, vsn(2, 2, 89), NULL, 0, NULL,
 	"Defines how a device failure in a RAID LV is handled.\n"
 	"This includes LVs that have the following segment types:\n"
 	"raid1, raid4, raid5*, and raid6*.\n"
-	"If a device in the LV fails, the policy determines the\n"
-	"steps perfomed by dmeventd automatically, and the steps\n"
-	"perfomed by 'lvconvert --repair --use-policies' run manually.\n"
+	"If a device in the LV fails, the policy determines the steps\n"
+	"performed by dmeventd automatically, and the steps perfomed by the\n"
+	"manual command lvconvert --repair --use-policies.\n"
 	"Automatic handling requires dmeventd to be monitoring the LV.\n"
-	"Possible options are: warn, allocate.\n"
-	"warn - Use the system log to warn the user that a device\n"
-	"in the RAID LV has failed.  It is left to the user to run\n"
-	"'lvconvert --repair' manually to remove or replace the failed\n"
-	"device.  As long as the number of failed devices does not\n"
-	"exceed the redundancy of the logical volume (1 device for\n"
-	"raid4/5, 2 for raid6, etc) the LV will remain usable.\n"
-	"allocate - Attempt to use any extra physical volumes in the\n"
-	"volume group as spares and replace faulty devices.\n")
+	"#\n"
+	"Accepted values:\n"
+	"  warn\n"
+	"    Use the system log to warn the user that a device in the RAID LV\n"
+	"    has failed.  It is left to the user to run lvconvert --repair\n"
+	"    manually to remove or replace the failed device.  As long as the\n"
+	"    number of failed devices does not exceed the redundancy of the LV\n"
+	"    (1 device for raid4/5, 2 for raid6), the LV will remain usable.\n"
+	"  allocate\n"
+	"    Attempt to use any extra physical volumes in the VG as spares and\n"
+	"    replace faulty devices.\n"
+	"#\n")
 
 cfg_runtime(activation_mirror_image_fault_policy_CFG, "mirror_image_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(2, 2, 57), 0, NULL,
 	"Defines how a device failure in a 'mirror' LV is handled.\n"
-	"An LV with the 'mirror' segment type is composed of mirror\n"
-	"images (copies) and a mirror log.\n"
-	"A disk log ensures that a mirror LV does not need to be\n"
-	"re-synced (all copies made the same) every time a machine\n"
-	"reboots or crashes.\n"
-	"If a device in the LV fails, this policy determines the\n"
-	"steps perfomed by dmeventd automatically, and the steps\n"
-	"performed by 'lvconvert --repair --use-policies' run manually.\n"
+	"An LV with the 'mirror' segment type is composed of mirror images\n"
+	"(copies) and a mirror log. A disk log ensures that a mirror LV does\n"
+	"not need to be re-synced (all copies made the same) every time a\n"
+	"machine reboots or crashes. If a device in the LV fails, this policy\n"
+	"determines the steps perfomed by dmeventd automatically, and the steps\n"
+	"performed by the manual command lvconvert --repair --use-policies.\n"
 	"Automatic handling requires dmeventd to be monitoring the LV.\n"
-	"Possible options are: remove, allocate, allocate_anywhere.\n"
-	"remove - Simply remove the faulty device and run without it.\n"
-	"If the log device fails, the mirror would convert to using\n"
-	"an in-memory log.  This means the mirror will not\n"
-	"remember its sync status across crashes/reboots and\n"
-	"the entire mirror will be re-synced.\n"
-	"If a mirror image fails, the mirror will convert to a\n"
-	"non-mirrored device if there is only one remaining good copy.\n"
-	"allocate - Remove the faulty device and try to allocate space\n"
-	"on a new device to be a replacement for the failed device.\n"
-	"Using this policy for the log is fast and maintains the\n"
-	"ability to remember sync state through crashes/reboots.\n"
-	"Using this policy for a mirror device is slow, as it\n"
-	"requires the mirror to resynchronize the devices, but it\n"
-	"will preserve the mirror characteristic of the device.\n"
-	"This policy acts like 'remove' if no suitable device and\n"
-	"space can be allocated for the replacement.\n"
-	"allocate_anywhere - Not yet implemented. Useful to place\n"
-	"the log device temporarily on the same physical volume as\n"
-	"one of the mirror images. This policy is not recommended\n"
-	"for mirror devices since it would break the redundant nature\n"
-	"of the mirror. This policy acts like 'remove' if no suitable\n"
-	"device and space can be allocated for the replacement.\n")
+	"#\n"
+	"Accepted values:\n"
+	"  remove\n"
+	"    Simply remove the faulty device and run without it. If the log\n"
+	"    device fails, the mirror would convert to using an in-memory log.\n"
+	"    This means the mirror will not remember its sync status across\n"
+	"    crashes/reboots and the entire mirror will be re-synced. If a\n"
+	"    mirror image fails, the mirror will convert to a non-mirrored\n"
+	"    device if there is only one remaining good copy.\n"
+	"  allocate\n"
+	"    Remove the faulty device and try to allocate space on a new\n"
+	"    device to be a replacement for the failed device. Using this\n"
+	"    policy for the log is fast and maintains the ability to remember\n"
+	"    sync state through crashes/reboots. Using this policy for a\n"
+	"    mirror device is slow, as it requires the mirror to resynchronize\n"
+	"    the devices, but it will preserve the mirror characteristic of\n"
+	"    the device. This policy acts like 'remove' if no suitable device\n"
+	"    and space can be allocated for the replacement.\n"
+	"  allocate_anywhere\n"
+	"    Not yet implemented. Useful to place the log device temporarily\n"
+	"    on the same physical volume as one of the mirror images. This\n"
+	"    policy is not recommended for mirror devices since it would break\n"
+	"    the redundant nature of the mirror. This policy acts like\n"
+	"    'remove' if no suitable device and space can be allocated for the\n"
+	"    replacement.\n"
+	"#\n")
 
 cfg(activation_mirror_log_fault_policy_CFG, "mirror_log_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_MIRROR_LOG_FAULT_POLICY, vsn(1, 2, 18), NULL, 0, NULL,
 	"Defines how a device failure in a 'mirror' log LV is handled.\n"
@@ -1308,21 +1382,23 @@ cfg(activation_auto_set_activation_skip_CFG, "auto_set_activation_skip", activat
 
 cfg(activation_mode_CFG, "activation_mode", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_ACTIVATION_MODE, vsn(2,2,108), NULL, 0, NULL,
 	"How LVs with missing devices are activated.\n"
-	"Possible options are: complete, degraded, partial.\n"
-	"complete - Only allow activation of an LV if all of\n"
-	"the Physical Volumes it uses are present.  Other PVs\n"
-	"in the Volume Group may be missing.\n"
-	"degraded - Like complete, but additionally RAID LVs of\n"
-	"segment type raid1, raid4, raid5, radid6 and raid10 will\n"
-	"be activated if there is no data loss, i.e. they have\n"
-	"sufficient redundancy to present the entire addressable\n"
-	"range of the Logical Volume.\n"
-	"partial - Allows the activation of any LV even if a\n"
-	"missing or failed PV could cause data loss with a\n"
-	"portion of the Logical Volume inaccessible.\n"
-	"This setting should not normally be used, but may\n"
-	"sometimes assist with data recovery.\n"
-	"The '--activationmode' option overrides this setting.\n")
+	"The '--activationmode' option overrides this setting.\n"
+	"#\n"
+	"Accepted values:\n"
+	"  complete\n"
+	"    Only allow activation of an LV if all of the Physical Volumes it\n"
+	"    uses are present.  Other PVs in the Volume Group may be missing.\n"
+	"  degraded\n"
+	"    Like complete, but additionally RAID LVs of segment type raid1,\n"
+	"    raid4, raid5, radid6 and raid10 will be activated if there is no\n"
+	"    data loss, i.e. they have sufficient redundancy to present the\n"
+	"    entire addressable range of the Logical Volume.\n"
+	"  partial\n"
+	"    Allows the activation of any LV even if a missing or failed PV\n"
+	"    could cause data loss with a portion of the LV inaccessible.\n"
+	"    This setting should not normally be used, but may sometimes\n"
+	"    assist with data recovery.\n"
+	"#\n")
 
 cfg_array(activation_lock_start_list_CFG, "lock_start_list", activation_CFG_SECTION, CFG_ALLOW_EMPTY|CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(2, 2, 124), NULL, 0, NULL,
 	"Locking is started only for VGs selected by this list.\n"
@@ -1334,13 +1410,18 @@ cfg_array(activation_auto_lock_start_list_CFG, "auto_lock_start_list", activatio
 
 cfg(metadata_pvmetadatacopies_CFG, "pvmetadatacopies", metadata_CFG_SECTION, CFG_ADVANCED | CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_PVMETADATACOPIES, vsn(1, 0, 0), NULL, 0, NULL,
 	"Number of copies of metadata to store on each PV.\n"
-	"Possible options are: 0, 1, 2.\n"
-	"If set to 2, two copies of the VG metadata are stored on\n"
-	"the PV, one at the front of the PV, and one at the end.\n"
-	"If set to 1, one copy is stored at the front of the PV.\n"
-	"If set to 0, no copies are stored on the PV. This may\n"
-	"be useful with VGs containing large numbers of PVs.\n"
-	"The '--pvmetadatacopies' option overrides this setting.\n")
+	"The '--pvmetadatacopies' option overrides this setting.\n"
+	"#\n"
+	"Accepted values:\n"
+	"  2\n"
+	"    Two copies of the VG metadata are stored on the PV, one at the\n"
+	"    front of the PV, and one at the end.\n"
+	"  1\n"
+	"    One copy of VG metadata is stored at the front of the PV.\n"
+	"  0\n"
+	"    No copies of VG metadata are stored on the PV. This may be\n"
+	"    useful for VGs containing large numbers of PVs.\n"
+	"#\n")
 
 cfg(metadata_vgmetadatacopies_CFG, "vgmetadatacopies", metadata_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_VGMETADATACOPIES, vsn(2, 2, 69), NULL, 0, NULL,
 	"Number of copies of metadata to maintain for each VG.\n"
@@ -1438,75 +1519,134 @@ cfg(report_binary_values_as_numeric_CFG, "binary_values_as_numeric", report_CFG_
 cfg(report_time_format_CFG, "time_format", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_TIME_FORMAT, vsn(2, 2, 123), NULL, 0, NULL,
         "Set time format for fields reporting time values.\n"
 	"Format specification is a string which may contain special character\n"
-	"sequences and ordinary character sequences. Ordinary character sequences\n"
-	"are copied verbatim. Each special character sequence is introduced by \'%\'\n"
-	"character and such sequence is then substituted with a value as described below:\n"
-	"\%a     The abbreviated name of the day of the week according to the\n"
-	"       current locale.\n"
-	"\%A     The full name of the day of the week according to the current locale.\n"
-	"\%b     The abbreviated month name according to the current locale.\n"
-	"\%B     The full month name according to the current locale.\n"
-	"\%c     The preferred date and time representation for the current locale. (alt E)\n"
-	"\%C     The century number (year/100) as a 2-digit integer. (alt E)\n"
-	"\%d     The day of the month as a decimal number (range 01 to 31). (alt O)\n"
-	"\%D     Equivalent to \%m/\%d/\%y.  (For Americans only. Americans should\n"
-	"       note that in other countries\%d/\%m/\%y is rather common. This means\n"
-	"       that in international context this format is ambiguous and should not\n"
-	"       be used.\n"
-	"\%e     Like \%d, the day of the month as a decimal number, but a leading zero\n"
-	"       is replaced by a space. (alt O)\n"
-	"\%E     Modifier: use alternative local-dependent representation if available.\n"
-	"\%F     Equivalent to \%Y-\%m-\%d (the ISO 8601 date format).\n"
-	"\%G     The ISO 8601 week-based year with century as adecimal number. The 4-digit\n"
-	"       year corresponding to the ISO week number (see \%V). This has the same\n"
-	"       format and value as \%Y, except that if the ISO week number belongs to\n"
-	"       the previous or next year, that year is used instead.\n"
-	"\%g     Like \%G, but without century, that is, with a 2-digit year (00-99).\n"
-	"\%h     Equivalent to \%b.\n"
-	"\%H     The hour as a decimal number using a 24-hour clock (range 00 to 23). (alt O)\n"
-	"\%I     The hour as a decimal number using a 12-hour clock (range 01 to 12). (alt O)\n"
-	"\%j     The day of the year as a decimal number (range 001 to 366).\n"
-	"\%k     The hour (24-hour clock) as a decimal number (range 0 to 23);\n"
-	"       single digits are preceded by a blank. (See also \%H.)\n"
-	"\%l     The hour (12-hour clock) as a decimal number (range 1 to 12);\n"
-	"       single digits are preceded by a blank. (See also \%I.)\n"
-	"\%m     The month as a decimal number (range 01 to 12). (alt O)\n"
-	"\%M     The minute as a decimal number (range 00 to 59). (alt O)\n"
-	"\%O     Modifier: use alternative numeric symbols.\n"
-	"\%p     Either \"AM\" or \"PM\" according to the given time value,\n"
-	"       or the corresponding strings for the current locale. Noon is\n"
-	"       treated as \"PM\" and midnight as \"AM\".\n"
-	"\%P     Like \%p but in lowercase: \"am\" or \"pm\" or a corresponding\n"
-	"       string for the current locale.\n"
-	"\%r     The time in a.m. or p.m. notation. In the POSIX locale this is\n"
-	"       equivalent to \%I:\%M:\%S \%p.\n"
-	"\%R     The time in 24-hour notation (\%H:\%M). For a version including\n"
-	"       the seconds, see \%T below.\n"
-	"\%s     The number of seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC)\n"
-	"\%S     The second as a decimal number (range 00 to 60).\n"
-	"       (The range is up to 60 to allow for occasional leap seconds.) (alt O)\n"
-	"\%t     A tab character.\n"
-	"\%T     The time in 24-hour notation (\%H:\%M:\%S).\n"
-	"\%u     The day of the week as a decimal, range 1 to 7, Monday being 1.\n"
-	"       See also \%w. (alt O)\n"
-	"\%U     The week number of the current year as a decimal number,\n"
-	"       range 00 to 53, starting with the first Sunday as the first\n"
-	"       day of week 01. See also \%V and \%W. (alt O)\n"
-	"\%V     The ISO 8601 week number of the current year as a decimal number,\n"
-	"       range 01 to 53, where week 1 is the first week that has at least 4 days\n"
-	"       in the new year. See also \%U and \%W. (alt O)\n"
-	"\%w     The day of the week as a decimal, range 0 to 6, Sunday being 0.\n"
-	"       See also \%u. (alt O)\n"
-	"\%W     The week number of the current year as a decimal number, range 00 to 53,\n"
-	"       starting with the first Monday as the first day of week 01. (alt O)\n"
-	"\%x     The preferred date representation for the current locale without the time. (alt E)\n"
-	"\%X     The preferred time representation for the current locale without the date. (alt E)\n"
-	"\%y     The year as a decimal number without a century (range 00 to 99). (alt E, alt O)\n"
-	"\%Y     The year as a decimal number including the century. (alt E)\n"
-	"\%z     The +hhmm or -hhmm numeric timezone (that is, the hour and minute\n"
-	"       offset from UTC).\n"
-	"\%Z     The timezone name or abbreviation.\n"
-	"\%\%     A literal '\%' character.\n")
+	"sequences and ordinary character sequences. Ordinary character\n"
+	"sequences are copied verbatim. Each special character sequence is\n"
+	"introduced by th e\'%\' character and such sequence is then\n"
+	"substituted with a value as described below.\n"
+	"#\n"
+	"Accepted values:\n"
+	"  \%a\n"
+	"    The abbreviated name of the day of the week according to the\n"
+	"    current locale.\n"
+	"  \%A\n"
+	"    The full name of the day of the week according to the current\n"
+	"    locale.\n"
+	"  \%b\n"
+	"    The abbreviated month name according to the current locale.\n"
+	"  \%B\n"
+	"    The full month name according to the current locale.\n"
+	"  \%c\n"
+	"    The preferred date and time representation for the current\n"
+	"    locale (alt E)\n"
+	"  \%C\n"
+	"    The century number (year/100) as a 2-digit integer. (alt E)\n"
+	"  \%d\n"
+	"    The day of the month as a decimal number (range 01 to 31).\n"
+	"    (alt O)\n"
+	"  \%D\n"
+	"    Equivalent to \%m/\%d/\%y.  (For Americans only. Americans should\n"
+	"    note that in other countries\%d/\%m/\%y is rather common. This\n"
+	"    means that in international context this format is ambiguous and\n"
+	"    should not be used.\n"
+	"  \%e\n"
+	"    Like \%d, the day of the month as a decimal number, but a leading\n"
+	"    zero is replaced by a space. (alt O)\n"
+	"  \%E\n"
+	"    Modifier: use alternative local-dependent representation if\n"
+	"    available.\n"
+	"  \%F\n"
+	"    Equivalent to \%Y-\%m-\%d (the ISO 8601 date format).\n"
+	"  \%G\n"
+	"    The ISO 8601 week-based year with century as adecimal number.\n"
+	"    The 4-digit year corresponding to the ISO week number (see \%V).\n"
+	"    This has the same format and value as \%Y, except that if the\n"
+	"    ISO week number belongs to the previous or next year, that year\n"
+	"    is used instead.\n"
+	"  \%g\n"
+	"    Like \%G, but without century, that is, with a 2-digit year\n"
+	"    (00-99).\n"
+	"  \%h\n"
+	"    Equivalent to \%b.\n"
+	"  \%H\n"
+	"    The hour as a decimal number using a 24-hour clock\n"
+	"    (range 00 to 23). (alt O)\n"
+	"  \%I\n"
+	"    The hour as a decimal number using a 12-hour clock\n"
+	"    (range 01 to 12). (alt O)\n"
+	"  \%j\n"
+	"    The day of the year as a decimal number (range 001 to 366).\n"
+	"  \%k\n"
+	"    The hour (24-hour clock) as a decimal number (range 0 to 23);\n"
+	"    single digits are preceded by a blank. (See also \%H.)\n"
+	"  \%l\n"
+	"    The hour (12-hour clock) as a decimal number (range 1 to 12);\n"
+	"    single digits are preceded by a blank. (See also \%I.)\n"
+	"  \%m\n"
+	"    The month as a decimal number (range 01 to 12). (alt O)\n"
+	"  \%M\n"
+	"    The minute as a decimal number (range 00 to 59). (alt O)\n"
+	"  \%O\n"
+	"    Modifier: use alternative numeric symbols.\n"
+	"  \%p\n"
+	"    Either \"AM\" or \"PM\" according to the given time value,\n"
+	"    or the corresponding strings for the current locale. Noon is\n"
+	"    treated as \"PM\" and midnight as \"AM\".\n"
+	"  \%P\n"
+	"    Like \%p but in lowercase: \"am\" or \"pm\" or a corresponding\n"
+	"    string for the current locale.\n"
+	"  \%r\n"
+	"    The time in a.m. or p.m. notation. In the POSIX locale this is\n"
+	"    equivalent to \%I:\%M:\%S \%p.\n"
+	"  \%R\n"
+	"    The time in 24-hour notation (\%H:\%M). For a version including\n"
+	"    the seconds, see \%T below.\n"
+	"  \%s\n"
+	"    The number of seconds since the Epoch,\n"
+	"    1970-01-01 00:00:00 +0000 (UTC)\n"
+	"  \%S\n"
+	"    The second as a decimal number (range 00 to 60). (The range is\n"
+	"    up to 60 to allow for occasional leap seconds.) (alt O)\n"
+	"  \%t\n"
+	"    A tab character.\n"
+	"  \%T\n"
+	"    The time in 24-hour notation (\%H:\%M:\%S).\n"
+	"  \%u\n"
+	"    The day of the week as a decimal, range 1 to 7, Monday being 1.\n"
+	"    See also \%w. (alt O)\n"
+	"  \%U\n"
+	"    The week number of the current year as a decimal number,\n"
+	"    range 00 to 53, starting with the first Sunday as the first\n"
+	"    day of week 01. See also \%V and \%W. (alt O)\n"
+	"  \%V\n"
+	"    The ISO 8601 week number of the current year as a decimal number,\n"
+	"    range 01 to 53, where week 1 is the first week that has at least\n"
+	"    4 days in the new year. See also \%U and \%W. (alt O)\n"
+	"  \%w\n"
+	"    The day of the week as a decimal, range 0 to 6, Sunday being 0.\n"
+	"    See also \%u. (alt O)\n"
+	"  \%W\n"
+	"    The week number of the current year as a decimal number,\n"
+	"    range 00 to 53, starting with the first Monday as the first day\n"
+	"    of week 01. (alt O)\n"
+	"  \%x\n"
+	"    The preferred date representation for the current locale without\n"
+	"    the time. (alt E)\n"
+	"  \%X\n"
+	"    The preferred time representation for the current locale without\n"
+	"    the date. (alt E)\n"
+	"  \%y\n"
+	"    The year as a decimal number without a century (range 00 to 99).\n"
+	"    (alt E, alt O)\n"
+	"  \%Y\n"
+	"    The year as a decimal number including the century. (alt E)\n"
+	"  \%z\n"
+	"    The +hhmm or -hhmm numeric timezone (that is, the hour and minute\n"
+	"    offset from UTC).\n"
+	"  \%Z\n"
+	"    The timezone name or abbreviation.\n"
+	"  \%\%\n"
+	"    A literal '\%' character.\n"
+	"#\n")
 
 cfg(report_devtypes_sort_CFG, "devtypes_sort", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_DEVTYPES_SORT, vsn(2, 2, 101), NULL, 0, NULL,
 	"List of columns to sort by when reporting 'lvm devtypes' command.\n"




More information about the lvm-devel mailing list