| /* |
| * Copyright (C) 2013 Red Hat, Inc. All rights reserved. |
| * |
| * This file is part of LVM2. |
| * |
| * This copyrighted material is made available to anyone wishing to use, |
| * modify, copy, or redistribute it subject to the terms and conditions |
| * of the GNU Lesser General Public License v.2.1. |
| * |
| * You should have received a copy of the GNU Lesser General Public License |
| * along with this program; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| */ |
| |
| /* |
| * MACROS: |
| * - define a configuration section: |
| * cfg_section(id, name, parent, flags, since_version, deprecated_since_version, deprecation_comment, comment) |
| * |
| * - define a configuration setting of simple type: |
| * cfg(id, name, parent, flags, type, default_value, since_version, unconfigured_default_value, deprecated_since_version, deprecation_comment, comment) |
| * |
| * - define a configuration array of one or more types: |
| * cfg_array(id, name, parent, flags, types, default_value, since_version, unconfigured_default_value, deprecated_since_version, deprecation_comment, comment) |
| * |
| * |
| * If default value can't be assigned statically because it depends on some |
| * run-time checks or if it depends on other settings already defined, |
| * the configuration setting or array can be defined with the |
| * "{cfg|cfg_array}_runtime" macro. In this case the default value |
| * is evaluated by automatically calling "get_default_<id>" function. |
| * See config.h and "function types to evaluate default value at runtime". |
| * |
| * |
| * VARIABLES: |
| * |
| * id: Unique identifier. |
| * |
| * name: Configuration node name. |
| * |
| * parent: Id of parent configuration node. |
| * |
| * flags: Configuration item flags: |
| * CFG_NAME_VARIABLE - configuration node name is variable |
| * CFG_ALLOW_EMPTY - node value can be emtpy |
| * CFG_ADVANCED - this node belongs to advanced config set |
| * CFG_UNSUPPORTED - this node is not officially supported and it's used primarily by developers |
| * CFG_PROFILABLE - this node is customizable by a profile |
| * CFG_PROFILABLE_METADATA - profilable and attachable to VG/LV metadata |
| * CFG_DEFAULT_UNDEFINED - node's default value is undefined (depends on other system/kernel values outside of lvm) |
| * CFG_DEFAULT_COMMENTED - node's default value is commented out on output |
| * CFG_DISABLED - configuration is disabled (defaults always used) |
| * CFG_FORMAT_INT_OCTAL - print integer number in octal form (also prefixed by "0") |
| * CFG_SECTION_NO_CHECK - do not check content of the section at all - use with care!!! |
| * |
| * type: Allowed type for the value of simple configuation setting, one of: |
| * CFG_TYPE_BOOL |
| * CFG_TYPE_INT |
| * CFG_TYPE_FLOAT |
| * CFG_TYPE_STRING |
| * |
| * types: Allowed types for the values of array configuration setting |
| * (use logical "OR" to define more than one allowed type, |
| * e.g. CFG_TYPE_STRING | CFG_TYPE_INT). |
| * |
| * default_value: Default value of type 'type' for the configuration node, |
| * if this is an array with several 'types' defined then |
| * default value is a string where each string representation |
| * of each value is prefixed by '#X' where X is one of: |
| * 'B' for boolean value |
| * 'I' for integer value |
| * 'F' for float value |
| * 'S' for string value |
| * '#' for the '#' character itself |
| * For example, "#Sfd#I16" means default value [ "fd", 16 ]. |
| * |
| * since_version: The version this configuration node first appeared in (be sure |
| * that parent nodes are consistent with versioning, no check done |
| * if parent node is older or the same age as any child node!) |
| * Use "vsn" macro to translate the "major.minor.release" version |
| * into a single number that is being stored internally in memory. |
| * (see also lvmconfig ... --withversions) |
| * |
| * unconfigured_default_value: Unconfigured default value used as a default value which is |
| * in "@...@" form and which is then substituted with concrete value |
| * while running configure. |
| * (see also 'lvmconfig --type default --unconfigured') |
| * |
| * deprecated_since_version: The version since this configuration node is deprecated. |
| * |
| * deprecation_comment: Comment about deprecation reason and related info (e.g. which |
| * configuration is used now instead). |
| * |
| * comment: Comment used in configuration dumps. The very first line is the |
| * summarizing comment. |
| * (see also lvmconfig ... --withcomments and --withsummary) |
| * |
| * |
| * Difference between CFG_DEFAULT_COMMENTED and CFG_DEFAULT_UNDEFINED: |
| * |
| * UNDEFINED is used if default value is NULL or the value |
| * depends on other system/kernel values outside of lvm. |
| * The most common case is when dm-thin or dm-cache have |
| * built-in default settings in the kernel, and lvm will use |
| * those built-in default values unless the corresponding lvm |
| * config setting is set. |
| * |
| * COMMENTED is used to comment out the default setting in |
| * lvm.conf. The effect is that if the LVM version is |
| * upgraded, and the new version of LVM has new built-in |
| * default values, the new defaults are used by LVM unless |
| * the previous default value was set (uncommented) in lvm.conf. |
| */ |
| #include "defaults.h" |
| |
| cfg_section(root_CFG_SECTION, "(root)", root_CFG_SECTION, 0, vsn(0, 0, 0), 0, NULL, NULL) |
| |
| cfg_section(config_CFG_SECTION, "config", root_CFG_SECTION, 0, vsn(2, 2, 99), 0, NULL, |
| "How LVM configuration settings are handled.\n") |
| |
| cfg_section(devices_CFG_SECTION, "devices", root_CFG_SECTION, 0, vsn(1, 0, 0), 0, NULL, |
| "How LVM uses block devices.\n") |
| |
| cfg_section(allocation_CFG_SECTION, "allocation", root_CFG_SECTION, CFG_PROFILABLE, vsn(2, 2, 77), 0, NULL, |
| "How LVM selects space and applies properties to LVs.\n") |
| |
| cfg_section(log_CFG_SECTION, "log", root_CFG_SECTION, CFG_PROFILABLE, vsn(1, 0, 0), 0, NULL, |
| "How LVM log information is reported.\n") |
| |
| cfg_section(backup_CFG_SECTION, "backup", root_CFG_SECTION, 0, vsn(1, 0, 0), 0, NULL, |
| "How LVM metadata is backed up and archived.\n" |
| "In LVM, a 'backup' is a copy of the metadata for the current system,\n" |
| "and an 'archive' contains old metadata configurations. They are\n" |
| "stored in a human readable text format.\n") |
| |
| cfg_section(shell_CFG_SECTION, "shell", root_CFG_SECTION, 0, vsn(1, 0, 0), 0, NULL, |
| "Settings for running LVM in shell (readline) mode.\n") |
| |
| cfg_section(global_CFG_SECTION, "global", root_CFG_SECTION, CFG_PROFILABLE, vsn(1, 0, 0), 0, NULL, |
| "Miscellaneous global LVM settings.\n") |
| |
| cfg_section(activation_CFG_SECTION, "activation", root_CFG_SECTION, CFG_PROFILABLE, vsn(1, 0, 0), 0, NULL, NULL) |
| |
| cfg_section(metadata_CFG_SECTION, "metadata", root_CFG_SECTION, CFG_DEFAULT_COMMENTED, vsn(1, 0, 0), 0, NULL, NULL) |
| |
| cfg_section(report_CFG_SECTION, "report", root_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, vsn(1, 0, 0), 0, NULL, |
| "LVM report command output formatting.\n") |
| |
| cfg_section(dmeventd_CFG_SECTION, "dmeventd", root_CFG_SECTION, 0, vsn(1, 2, 3), 0, NULL, |
| "Settings for the LVM event daemon.\n") |
| |
| cfg_section(tags_CFG_SECTION, "tags", root_CFG_SECTION, CFG_DEFAULT_COMMENTED, vsn(1, 0, 18), 0, NULL, |
| "Host tag settings.\n") |
| |
| cfg_section(local_CFG_SECTION, "local", root_CFG_SECTION, 0, vsn(2, 2, 117), 0, NULL, |
| "LVM settings that are specific to the local host.\n") |
| |
| cfg(config_checks_CFG, "checks", config_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(2, 2, 99), NULL, 0, NULL, |
| "If enabled, any LVM configuration mismatch is reported.\n" |
| "This implies checking that the configuration key is understood by\n" |
| "LVM and that the value of the key is the proper type. If disabled,\n" |
| "any configuration mismatch is ignored and the default value is used\n" |
| "without any warning (a message about the configuration key not being\n" |
| "found is issued in verbose mode only).\n") |
| |
| cfg(config_abort_on_errors_CFG, "abort_on_errors", config_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2,2,99), NULL, 0, NULL, |
| "Abort the LVM process if a configuration mismatch is found.\n") |
| |
| cfg_runtime(config_profile_dir_CFG, "profile_dir", config_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(2, 2, 99), 0, NULL, |
| "Directory where LVM looks for configuration profiles.\n") |
| |
| cfg(devices_dir_CFG, "dir", devices_CFG_SECTION, CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_DEV_DIR, vsn(1, 0, 0), NULL, 0, NULL, |
| "Directory in which to create volume group device nodes.\n" |
| "Commands also accept this as a prefix on volume group names.\n") |
| |
| cfg_array(devices_scan_CFG, "scan", devices_CFG_SECTION, CFG_ADVANCED, CFG_TYPE_STRING, "#S/dev", vsn(1, 0, 0), NULL, 0, NULL, |
| "Directories containing device nodes to use with LVM.\n") |
| |
| cfg_array(devices_loopfiles_CFG, "loopfiles", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED | CFG_UNSUPPORTED, CFG_TYPE_STRING, NULL, vsn(1, 2, 0), NULL, 0, NULL, NULL) |
| |
| cfg(devices_obtain_device_list_from_udev_CFG, "obtain_device_list_from_udev", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV, vsn(2, 2, 85), NULL, 0, NULL, |
| "Obtain the list of available devices from udev.\n" |
| "This avoids opening or using any inapplicable non-block devices or\n" |
| "subdirectories found in the udev directory. Any device node or\n" |
| "symlink not managed by udev in the udev directory is ignored. This\n" |
| "setting applies only to the udev-managed device directory; other\n" |
| "directories will be scanned fully. LVM needs to be compiled with\n" |
| "udev support for this setting to apply.\n") |
| |
| cfg(devices_external_device_info_source_CFG, "external_device_info_source", devices_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_EXTERNAL_DEVICE_INFO_SOURCE, vsn(2, 2, 116), NULL, 0, NULL, |
| "Select an external device information source.\n" |
| "Some information may already be available in the system and LVM can\n" |
| "use this information to determine the exact type or use of devices it\n" |
| "processes. Using an existing external device information source can\n" |
| "speed up device processing as LVM does not need to run its own native\n" |
| "routines to acquire this information. For example, this information\n" |
| "is used to drive LVM filtering like MD component detection, multipath\n" |
| "component detection, partition detection and others.\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" |
| "If multiple path names exist for a block device, and LVM needs to\n" |
| "display a name for the device, the path names are matched against\n" |
| "each item in this list of regular expressions. The first match is\n" |
| "used. Try to avoid using undescriptive /dev/dm-N names, if present.\n" |
| "If no preferred name matches, or if preferred_names are not defined,\n" |
| "the following built-in preferences are applied in order until one\n" |
| "produces a preferred name:\n" |
| "Prefer names with path prefixes in the order of:\n" |
| "/dev/mapper, /dev/disk, /dev/dm-*, /dev/block.\n" |
| "Prefer the name with the least number of slashes.\n" |
| "Prefer a name that is a symlink.\n" |
| "Prefer the path with least value in lexicographical order.\n" |
| "#\n" |
| "Example\n" |
| "preferred_names = [ \"^/dev/mpath/\", \"^/dev/mapper/mpath\", \"^/dev/[hs]d\" ]\n" |
| "#\n") |
| |
| cfg_array(devices_filter_CFG, "filter", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, "#Sa|.*/|", vsn(1, 0, 0), NULL, 0, NULL, |
| "Limit the block devices that are used by LVM commands.\n" |
| "This is a list of regular expressions used to accept or reject block\n" |
| "device path names. Each regex is delimited by a vertical bar '|'\n" |
| "(or any character) and is preceded by 'a' to accept the path, or\n" |
| "by 'r' to reject the path. The first regex in the list to match the\n" |
| "path is used, producing the 'a' or 'r' result for the device.\n" |
| "When multiple path names exist for a block device, if any path name\n" |
| "matches an 'a' pattern before an 'r' pattern, then the device is\n" |
| "accepted. If all the path names match an 'r' pattern first, then the\n" |
| "device is rejected. Unmatching path names do not affect the accept\n" |
| "or reject decision. If no path names for a device match a pattern,\n" |
| "then the device is accepted. Be careful mixing 'a' and 'r' patterns,\n" |
| "as the combination might produce unexpected results (test changes.)\n" |
| "Run vgscan after changing the filter to regenerate the cache.\n" |
| "See the use_lvmetad comment for a special case regarding filters.\n" |
| "#\n" |
| "Example\n" |
| "Accept every block device:\n" |
| "filter = [ \"a|.*/|\" ]\n" |
| "Reject the cdrom drive:\n" |
| "filter = [ \"r|/dev/cdrom|\" ]\n" |
| "Work with just loopback devices, e.g. for testing:\n" |
| "filter = [ \"a|loop|\", \"r|.*|\" ]\n" |
| "Accept all loop devices and ide drives except hdc:\n" |
| "filter = [ \"a|loop|\", \"r|/dev/hdc|\", \"a|/dev/ide|\", \"r|.*|\" ]\n" |
| "Use anchors to be very specific:\n" |
| "filter = [ \"a|^/dev/hda8$|\", \"r|.*/|\" ]\n" |
| "#\n") |
| |
| cfg_array(devices_global_filter_CFG, "global_filter", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, "#Sa|.*/|", vsn(2, 2, 98), NULL, 0, NULL, |
| "Limit the block devices that are used by LVM system components.\n" |
| "Because devices/filter may be overridden from the command line, it is\n" |
| "not suitable for system-wide device filtering, e.g. udev and lvmetad.\n" |
| "Use global_filter to hide devices from these LVM system components.\n" |
| "The syntax is the same as devices/filter. Devices rejected by\n" |
| "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), vsn(1, 2, 19), |
| "This has been replaced by the devices/cache_dir setting.\n", |
| "Cache file path.\n") |
| |
| cfg_runtime(devices_cache_dir_CFG, "cache_dir", devices_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(1, 2, 19), 0, NULL, |
| "Directory in which to store the device cache file.\n" |
| "The results of filtering are cached on disk to avoid rescanning dud\n" |
| "devices (which can take a very long time). By default this cache is\n" |
| "stored in a file named .cache. It is safe to delete this file; the\n" |
| "tools regenerate it. If obtain_device_list_from_udev is enabled, the\n" |
| "list of devices is obtained from udev and any existing .cache file\n" |
| "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), NULL, 0, NULL, |
| "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), NULL, 0, NULL, |
| "Enable/disable writing the cache file. See devices/cache_dir.\n") |
| |
| cfg_array(devices_types_CFG, "types", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED | CFG_ADVANCED, CFG_TYPE_INT | CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of additional acceptable block device types.\n" |
| "These are of device type names from /proc/devices, followed by the\n" |
| "maximum number of partitions.\n" |
| "#\n" |
| "Example\n" |
| "types = [ \"fd\", 16 ]\n" |
| "#\n") |
| |
| cfg(devices_sysfs_scan_CFG, "sysfs_scan", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SYSFS_SCAN, vsn(1, 0, 8), NULL, 0, NULL, |
| "Restrict device scanning to block devices appearing in sysfs.\n" |
| "This is a quick way of filtering out block devices that are not\n" |
| "present on the system. sysfs must be part of the kernel and mounted.)\n") |
| |
| cfg(devices_multipath_component_detection_CFG, "multipath_component_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MULTIPATH_COMPONENT_DETECTION, vsn(2, 2, 89), NULL, 0, NULL, |
| "Ignore devices that are components of DM 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), NULL, 0, NULL, |
| "Ignore devices that are components of software RAID (md) devices.\n") |
| |
| cfg(devices_fw_raid_component_detection_CFG, "fw_raid_component_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_FW_RAID_COMPONENT_DETECTION, vsn(2, 2, 112), NULL, 0, NULL, |
| "Ignore devices that are components of firmware RAID devices.\n" |
| "LVM must use an external_device_info_source other than none for this\n" |
| "detection to execute.\n") |
| |
| cfg(devices_md_chunk_alignment_CFG, "md_chunk_alignment", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MD_CHUNK_ALIGNMENT, vsn(2, 2, 48), NULL, 0, NULL, |
| "Align PV data blocks with md device's stripe-width.\n" |
| "This applies if a PV is placed directly on an md device.\n") |
| |
| cfg(devices_default_data_alignment_CFG, "default_data_alignment", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_DATA_ALIGNMENT, vsn(2, 2, 75), NULL, 0, NULL, |
| "Default alignment of the start of a PV data area in MB.\n" |
| "If set to 0, a value of 64KiB 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), NULL, 0, NULL, |
| "Detect PV data alignment based on sysfs device information.\n" |
| "The start of a PV data area will be a multiple of minimum_io_size or\n" |
| "optimal_io_size exposed in sysfs. minimum_io_size is the smallest\n" |
| "request the device can perform without incurring a read-modify-write\n" |
| "penalty, e.g. MD chunk size. optimal_io_size is the device's\n" |
| "preferred unit of receiving I/O, 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), NULL, 0, NULL, |
| "Alignment of the start of a PV data area in KiB.\n" |
| "If a PV is placed directly on an md device and md_chunk_alignment or\n" |
| "data_alignment_detection are enabled, then this setting is ignored.\n" |
| "Otherwise, md_chunk_alignment and data_alignment_detection are\n" |
| "disabled if this is set. Set to 0 to use the default alignment or the\n" |
| "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), NULL, 0, NULL, |
| "Detect PV data alignment offset based on sysfs device information.\n" |
| "The start of a PV aligned data area will be shifted by the\n" |
| "alignment_offset exposed in sysfs. This offset is often 0, but may\n" |
| "be non-zero. Certain 4KiB sector drives that compensate for windows\n" |
| "partitioning will have an alignment_offset of 3584 bytes (sector 7\n" |
| "is the lowest aligned logical block, the 4KiB sectors start at\n" |
| "LBA -1, and consequently sector 63 is aligned on a 4KiB boundary).\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), NULL, 0, NULL, |
| "Ignore DM devices that have I/O suspended while scanning devices.\n" |
| "Otherwise, LVM waits for a suspended device to become accessible.\n" |
| "This should only be needed in recovery situations.\n") |
| |
| cfg(devices_ignore_lvm_mirrors_CFG, "ignore_lvm_mirrors", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_IGNORE_LVM_MIRRORS, vsn(2, 2, 104), NULL, 0, NULL, |
| "Do not scan 'mirror' LVs to avoid possible deadlocks.\n" |
| "This avoids possible deadlocks when using the 'mirror' segment type.\n" |
| "This setting determines whether LVs using the 'mirror' segment type\n" |
| "are scanned for LVM labels. This affects the ability of mirrors to\n" |
| "be used as physical volumes. If this setting is enabled, it is\n" |
| "impossible to create VGs on top of mirror LVs, i.e. to stack VGs on\n" |
| "mirror LVs. If this setting is disabled, allowing mirror LVs to be\n" |
| "scanned, it may cause LVM processes and I/O to the mirror to become\n" |
| "blocked. This is due to the way that the mirror segment type handles\n" |
| "failures. In order for the hang to occur, an LVM command must be run\n" |
| "just after a failure and before the automatic LVM repair process\n" |
| "takes place, or there must be failures in multiple mirrors in the\n" |
| "same VG at the same time with write failures occurring moments before\n" |
| "a scan of the mirror's labels. The 'mirror' scanning problems do not\n" |
| "apply to LVM RAID types like 'raid1' which handle failures in a\n" |
| "different way, making them a better choice for VG stacking.\n") |
| |
| cfg(devices_disable_after_error_count_CFG, "disable_after_error_count", devices_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_DISABLE_AFTER_ERROR_COUNT, vsn(2, 2, 75), NULL, 0, NULL, |
| "Number of I/O errors after which a device is skipped.\n" |
| "During each LVM operation, errors received from each device are\n" |
| "counted. If the counter of a device exceeds the limit set here,\n" |
| "no further I/O is sent to that device for the remainder of the\n" |
| "operation. 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), NULL, 0, NULL, |
| "Allow use of pvcreate --uuid without requiring --restorefile.\n") |
| |
| cfg(devices_pv_min_size_CFG, "pv_min_size", devices_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_PV_MIN_SIZE_KB, vsn(2, 2, 85), NULL, 0, NULL, |
| "Minimum size in KiB of block devices which can be used as PVs.\n" |
| "In a clustered environment all nodes must use the same value.\n" |
| "Any value smaller than 512KiB is ignored. The previous built-in\n" |
| "value was 512.\n") |
| |
| cfg(devices_issue_discards_CFG, "issue_discards", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ISSUE_DISCARDS, vsn(2, 2, 85), NULL, 0, NULL, |
| "Issue discards to PVs that are no longer used by an LV.\n" |
| "Discards are sent to an LV's underlying physical volumes when the LV\n" |
| "is no longer using the physical volumes' space, e.g. lvremove,\n" |
| "lvreduce. Discards inform the storage that a region is no longer\n" |
| "used. Storage that supports discards advertise the protocol-specific\n" |
| "way discards should be issued by the kernel (TRIM, UNMAP, or\n" |
| "WRITE SAME with UNMAP bit set). Not all storage will support or\n" |
| "benefit from discards, but SSDs and thinly provisioned LUNs\n" |
| "generally do. If enabled, discards will only be issued if both the\n" |
| "storage and kernel provide support.\n") |
| |
| cfg(devices_allow_changes_with_duplicate_pvs_CFG, "allow_changes_with_duplicate_pvs", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ALLOW_CHANGES_WITH_DUPLICATE_PVS, vsn(2, 2, 153), NULL, 0, NULL, |
| "Allow VG modification while a PV appears on multiple devices.\n" |
| "When a PV appears on multiple devices, LVM attempts to choose the\n" |
| "best device to use for the PV. If the devices represent the same\n" |
| "underlying storage, the choice has minimal consequence. If the\n" |
| "devices represent different underlying storage, the wrong choice\n" |
| "can result in data loss if the VG is modified. Disabling this\n" |
| "setting is the safest option because it prevents modifying a VG\n" |
| "or activating LVs in it while a PV appears on multiple devices.\n" |
| "Enabling this setting allows the VG to be used as usual even with\n" |
| "uncertain devices.\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), NULL, 0, NULL, |
| "Advise LVM which PVs to use when searching for new space.\n" |
| "When searching for free space to extend an LV, the 'cling' allocation\n" |
| "policy will choose space on the same PVs as the last segment of the\n" |
| "existing LV. If there is insufficient space and a list of tags is\n" |
| "defined here, it will check whether any of them are attached to the\n" |
| "PVs concerned and then seek to match those PV tags between existing\n" |
| "extents and new extents.\n" |
| "#\n" |
| "Example\n" |
| "Use the special tag \"@*\" as a wildcard to match any PV tag:\n" |
| "cling_tag_list = [ \"@*\" ]\n" |
| "LVs are mirrored between two sites within a single VG, and\n" |
| "PVs are tagged with either @site1 or @site2 to indicate where\n" |
| "they are situated:\n" |
| "cling_tag_list = [ \"@site1\", \"@site2\" ]\n" |
| "#\n") |
| |
| cfg(allocation_maximise_cling_CFG, "maximise_cling", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MAXIMISE_CLING, vsn(2, 2, 85), NULL, 0, NULL, |
| "Use a previous allocation algorithm.\n" |
| "Changes made in version 2.02.85 extended the reach of the 'cling'\n" |
| "policies to detect more situations where data can be grouped onto\n" |
| "the same disks. This setting can be used to disable the changes\n" |
| "and revert to the previous algorithm.\n") |
| |
| cfg(allocation_use_blkid_wiping_CFG, "use_blkid_wiping", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_USE_BLKID_WIPING, vsn(2, 2, 105), "@DEFAULT_USE_BLKID_WIPING@", 0, NULL, |
| "Use blkid to detect existing signatures on new PVs and LVs.\n" |
| "The blkid library can detect more signatures than the native LVM\n" |
| "detection code, but may take longer. LVM needs to be compiled with\n" |
| "blkid wiping support for this setting to apply. LVM native detection\n" |
| "code is currently able to recognize: MD device signatures,\n" |
| "swap signature, and LUKS signatures. To see the list of signatures\n" |
| "recognized by blkid, check the output of the 'blkid -k' command.\n") |
| |
| cfg(allocation_wipe_signatures_when_zeroing_new_lvs_CFG, "wipe_signatures_when_zeroing_new_lvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(2, 2, 105), NULL, 0, NULL, |
| "Look for and erase any signatures while zeroing a new LV.\n" |
| "The --wipesignatures option overrides this setting.\n" |
| "Zeroing is controlled by the -Z/--zero option, and if not specified,\n" |
| "zeroing is used by default if possible. Zeroing simply overwrites the\n" |
| "first 4KiB of a new LV with zeroes and does no signature detection or\n" |
| "wiping. Signature wiping goes beyond zeroing and detects exact types\n" |
| "and positions of signatures within the whole LV. It provides a\n" |
| "cleaner LV after creation as all known signatures are wiped. The LV\n" |
| "is not claimed incorrectly by other tools because of old signatures\n" |
| "from previous use. The number of signatures that LVM can detect\n" |
| "depends on the detection code that is selected (see\n" |
| "use_blkid_wiping.) Wiping each detected signature must be confirmed.\n" |
| "When this setting is disabled, signatures on new LVs are not detected\n" |
| "or erased unless the --wipesignatures option is used directly.\n") |
| |
| cfg(allocation_mirror_logs_require_separate_pvs_CFG, "mirror_logs_require_separate_pvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MIRROR_LOGS_REQUIRE_SEPARATE_PVS, vsn(2, 2, 85), NULL, 0, NULL, |
| "Mirror logs and images will always use different PVs.\n" |
| "The default setting changed in version 2.02.85.\n") |
| |
| cfg(allocation_raid_stripe_all_devices_CFG, "raid_stripe_all_devices", allocation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ALLOCATION_STRIPE_ALL_DEVICES, vsn(2, 2, 162), NULL, 0, NULL, |
| "Stripe across all PVs when RAID stripes are not specified.\n" |
| "If enabled, all PVs in the VG or on the command line are used for raid0/4/5/6/10\n" |
| "when the command does not specify the number of stripes to use.\n" |
| "This was the default behaviour until release 2.02.162.\n") |
| |
| cfg(allocation_cache_pool_metadata_require_separate_pvs_CFG, "cache_pool_metadata_require_separate_pvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_CACHE_POOL_METADATA_REQUIRE_SEPARATE_PVS, vsn(2, 2, 106), NULL, 0, NULL, |
| "Cache pool metadata and data will always use different PVs.\n") |
| |
| cfg(allocation_cache_pool_cachemode_CFG, "cache_pool_cachemode", allocation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_CACHE_MODE, vsn(2, 2, 113), NULL, vsn(2, 2, 128), |
| "This has been replaced by the allocation/cache_mode setting.\n", |
| "Cache mode.\n") |
| |
| 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" |
| "#\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, |
| "The default cache policy used for new cache volume.\n" |
| "Since kernel 4.2 the default policy is smq (Stochastic multique),\n" |
| "otherwise the older mq (Multiqueue) policy is selected.\n") |
| |
| cfg_section(allocation_cache_settings_CFG_SECTION, "cache_settings", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, vsn(2, 2, 128), 0, NULL, |
| "Settings for the cache policy.\n" |
| "See documentation for individual cache policies for more info.\n") |
| |
| cfg_section(policy_settings_CFG_SUBSECTION, "policy_settings", allocation_cache_settings_CFG_SECTION, CFG_NAME_VARIABLE | CFG_SECTION_NO_CHECK | CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, vsn(2, 2, 128), 0, NULL, |
| "Replace this subsection name with a policy name.\n" |
| "Multiple subsections for different policies can be created.\n") |
| |
| cfg_runtime(allocation_cache_pool_chunk_size_CFG, "cache_pool_chunk_size", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_UNDEFINED, CFG_TYPE_INT, vsn(2, 2, 106), 0, NULL, |
| "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 the default is\n" |
| "on the smaller end of the spectrum. Supported values range from\n" |
| "32KiB to 1GiB 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), NULL, 0, NULL, |
| "Thin pool metdata and data will always use different PVs.\n") |
| |
| cfg(allocation_thin_pool_zero_CFG, "thin_pool_zero", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_THIN_POOL_ZERO, vsn(2, 2, 99), NULL, 0, NULL, |
| "Thin pool data chunks are zeroed before they are first used.\n" |
| "Zeroing with a larger thin pool chunk size reduces performance.\n") |
| |
| 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" |
| "#\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" |
| "#\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" |
| "Larger chunk sizes may improve performance for plain thin volumes,\n" |
| "however using them for snapshot volumes is less efficient, as it\n" |
| "consumes more space and takes extra time for copying. When unset,\n" |
| "lvm tries to estimate chunk size starting from 64KiB. Supported\n" |
| "values are in the range 64KiB to 1GiB.\n") |
| |
| cfg(allocation_physical_extent_size_CFG, "physical_extent_size", allocation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_EXTENT_SIZE, vsn(2, 2, 112), NULL, 0, NULL, |
| "Default physical extent size in KiB to use for new VGs.\n") |
| |
| cfg(log_report_command_log_CFG, "report_command_log", log_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_COMMAND_LOG_REPORT, vsn(2, 2, 158), NULL, 0, NULL, |
| "Enable or disable LVM log reporting.\n" |
| "If enabled, LVM will collect a log of operations, messages,\n" |
| "per-object return codes with object identification and associated\n" |
| "error numbers (errnos) during LVM command processing. Then the\n" |
| "log is either reported solely or in addition to any existing\n" |
| "reports, depending on LVM command used. If it is a reporting command\n" |
| "(e.g. pvs, vgs, lvs, lvm fullreport), then the log is reported in\n" |
| "addition to any existing reports. Otherwise, there's only log report\n" |
| "on output. For all applicable LVM commands, you can request that\n" |
| "the output has only log report by using --logonly command line\n" |
| "option. Use log/command_log_cols and log/command_log_sort settings\n" |
| "to define fields to display and sort fields for the log report.\n" |
| "You can also use log/command_log_selection to define selection\n" |
| "criteria used each time the log is reported.\n") |
| |
| cfg(log_command_log_sort_CFG, "command_log_sort", log_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_COMMAND_LOG_SORT, vsn(2, 2, 158), NULL, 0, NULL, |
| "List of columns to sort by when reporting command log.\n" |
| "See <lvm command> --logonly --configreport log -o help\n" |
| "for the list of possible fields.\n") |
| |
| cfg(log_command_log_cols_CFG, "command_log_cols", log_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_COMMAND_LOG_COLS, vsn(2, 2, 158), NULL, 0, NULL, |
| "List of columns to report when reporting command log.\n" |
| "See <lvm command> --logonly --configreport log -o help\n" |
| "for the list of possible fields.\n") |
| |
| cfg(log_command_log_selection_CFG, "command_log_selection", log_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_COMMAND_LOG_SELECTION, vsn(2, 2, 158), NULL, 0, NULL, |
| "Selection criteria used when reporting command log.\n" |
| "You can define selection criteria that are applied each\n" |
| "time log is reported. This way, it is possible to control the\n" |
| "amount of log that is displayed on output and you can select\n" |
| "only parts of the log that are important for you. To define\n" |
| "selection criteria, use fields from log report. See also\n" |
| "<lvm command> --logonly --configreport log -S help for the\n" |
| "list of possible fields and selection operators. You can also\n" |
| "define selection criteria for log report on command line directly\n" |
| "using <lvm command> --configreport log -S <selection criteria>\n" |
| "which has precedence over log/command_log_selection setting.\n" |
| "For more information about selection criteria in general, see\n" |
| "lvm(8) man page.\n") |
| |
| cfg(log_verbose_CFG, "verbose", log_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_VERBOSE, vsn(1, 0, 0), NULL, 0, NULL, |
| "Controls the messages sent to stdout or stderr.\n") |
| |
| cfg(log_silent_CFG, "silent", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SILENT, vsn(2, 2, 98), NULL, 0, NULL, |
| "Suppress all non-essential messages from stdout.\n" |
| "This has the same effect as -qq. When enabled, the following commands\n" |
| "still produce output: dumpconfig, lvdisplay, lvmdiskscan, lvs, pvck,\n" |
| "pvdisplay, pvs, version, vgcfgrestore -l, vgdisplay, vgs.\n" |
| "Non-essential messages are shifted from log level 4 to log level 5\n" |
| "for syslog and lvm2_log_fn purposes.\n" |
| "Any 'yes' or 'no' questions not overridden by other arguments are\n" |
| "suppressed and default to 'no'.\n") |
| |
| cfg(log_syslog_CFG, "syslog", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SYSLOG, vsn(1, 0, 0), NULL, 0, NULL, |
| "Send log messages through syslog.\n") |
| |
| cfg(log_file_CFG, "file", log_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL, |
| "Write error and debug log messages to a file specified here.\n") |
| |
| cfg(log_overwrite_CFG, "overwrite", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_OVERWRITE, vsn(1, 0, 0), NULL, 0, NULL, |
| "Overwrite the log file each time the program is run.\n") |
| |
| cfg(log_level_CFG, "level", log_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_LOGLEVEL, vsn(1, 0, 0), NULL, 0, NULL, |
| "The level of log messages that are sent to the log file or syslog.\n" |
| "There are 6 syslog-like log levels currently in use: 2 to 7 inclusive.\n" |
| "7 is the most verbose (LOG_DEBUG).\n") |
| |
| cfg(log_indent_CFG, "indent", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_INDENT, vsn(1, 0, 0), NULL, 0, NULL, |
| "Indent messages according to their severity.\n") |
| |
| cfg(log_command_names_CFG, "command_names", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_CMD_NAME, vsn(1, 0, 0), NULL, 0, NULL, |
| "Display the command name on each line of output.\n") |
| |
| cfg(log_prefix_CFG, "prefix", log_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, DEFAULT_MSG_PREFIX, vsn(1, 0, 0), NULL, 0, NULL, |
| "A prefix to use before the log message text.\n" |
| "(After the command name, if selected).\n" |
| "Two spaces allows you to see/grep the severity of each message.\n" |
| "To make the messages look similar to the original LVM tools use:\n" |
| "indent = 0, command_names = 1, prefix = \" -- \"\n") |
| |
| cfg(log_activation_CFG, "activation", log_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(1, 0, 0), NULL, 0, NULL, |
| "Log messages during activation.\n" |
| "Don't use this in low memory situations (can deadlock).\n") |
| |
| cfg(log_activate_file_CFG, "activate_file", log_CFG_SECTION, CFG_DEFAULT_UNDEFINED | CFG_UNSUPPORTED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL, NULL) |
| |
| cfg_array(log_debug_classes_CFG, "debug_classes", log_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, "#Smemory#Sdevices#Sactivation#Sallocation#Slvmetad#Smetadata#Scache#Slocking#Slvmpolld#Sdbus", vsn(2, 2, 99), NULL, 0, NULL, |
| "Select log messages by class.\n" |
| "Some debugging messages are assigned to a class and only appear in\n" |
| "debug output if the class is listed here. Classes currently\n" |
| "available: memory, devices, activation, allocation, lvmetad,\n" |
| "metadata, cache, locking, lvmpolld. 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), NULL, 0, NULL, |
| "Maintain a backup of the current metadata configuration.\n" |
| "Think very hard before turning this off!\n") |
| |
| cfg_runtime(backup_backup_dir_CFG, "backup_dir", backup_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(1, 0, 0), 0, NULL, |
| "Location of the metadata backup files.\n" |
| "Remember to back up this directory regularly!\n") |
| |
| cfg(backup_archive_CFG, "archive", backup_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ARCHIVE_ENABLED, vsn(1, 0, 0), NULL, 0, NULL, |
| "Maintain an archive of old metadata configurations.\n" |
| "Think very hard before turning this off.\n") |
| |
| cfg_runtime(backup_archive_dir_CFG, "archive_dir", backup_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(1, 0, 0), 0, NULL, |
| "Location of the metdata archive files.\n" |
| "Remember to back up this directory regularly!\n") |
| |
| cfg(backup_retain_min_CFG, "retain_min", backup_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_ARCHIVE_NUMBER, vsn(1, 0, 0), NULL, 0, NULL, |
| "Minimum number of archives to keep.\n") |
| |
| cfg(backup_retain_days_CFG, "retain_days", backup_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_ARCHIVE_DAYS, vsn(1, 0, 0), NULL, 0, NULL, |
| "Minimum number of days to keep archive files.\n") |
| |
| cfg(shell_history_size_CFG, "history_size", shell_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_MAX_HISTORY, vsn(1, 0, 0), NULL, 0, NULL, |
| "Number of lines of history to store in ~/.lvm_history.\n") |
| |
| cfg(global_umask_CFG, "umask", global_CFG_SECTION, CFG_FORMAT_INT_OCTAL, CFG_TYPE_INT, DEFAULT_UMASK, vsn(1, 0, 0), NULL, 0, NULL, |
| "The file creation mask for any files and directories created.\n" |
| "Interpreted as octal if the first digit is zero.\n") |
| |
| cfg(global_test_CFG, "test", global_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(1, 0, 0), NULL, 0, NULL, |
| "No on-disk metadata changes will be made in test mode.\n" |
| "Equivalent to having the -t option on every command.\n") |
| |
| cfg(global_units_CFG, "units", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_STRING, DEFAULT_UNITS, vsn(1, 0, 0), NULL, 0, NULL, |
| "Default value for --units argument.\n") |
| |
| cfg(global_si_unit_consistency_CFG, "si_unit_consistency", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_BOOL, DEFAULT_SI_UNIT_CONSISTENCY, vsn(2, 2, 54), NULL, 0, NULL, |
| "Distinguish between powers of 1024 and 1000 bytes.\n" |
| "The LVM commands distinguish between powers of 1024 bytes,\n" |
| "e.g. KiB, MiB, GiB, and powers of 1000 bytes, e.g. KB, MB, GB.\n" |
| "If scripts depend on the old behaviour, disable this setting\n" |
| "temporarily until they are updated.\n") |
| |
| cfg(global_suffix_CFG, "suffix", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_BOOL, DEFAULT_SUFFIX, vsn(1, 0, 0), NULL, 0, NULL, |
| "Display unit suffix for sizes.\n" |
| "This setting has no effect if the units are in human-readable form\n" |
| "(global/units = \"h\") in which case the suffix is always displayed.\n") |
| |
| cfg(global_activation_CFG, "activation", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ACTIVATION, vsn(1, 0, 0), NULL, 0, NULL, |
| "Enable/disable communication with the kernel device-mapper.\n" |
| "Disable to use the tools to manipulate LVM metadata without\n" |
| "activating any logical volumes. If the device-mapper driver\n" |
| "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, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_LVM1, vsn(1, 0, 18), "@DEFAULT_FALLBACK_TO_LVM1@", 0, NULL, |
| "Try running LVM1 tools if LVM cannot communicate with DM.\n" |
| "This option only applies to 2.4 kernels and is provided to help\n" |
| "switch between device-mapper kernels and LVM1 kernels. The LVM1\n" |
| "tools need to be installed with .lvm1 suffices, e.g. vgscan.lvm1.\n" |
| "They will stop working once the lvm2 on-disk metadata format is used.\n") |
| |
| cfg(global_format_CFG, "format", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_FORMAT, vsn(1, 0, 0), NULL, 0, NULL, |
| "The default metadata format that commands should use.\n" |
| "The -M 1|2 option overrides this setting.\n" |
| "#\n" |
| "Accepted values:\n" |
| " lvm1\n" |
| " lvm2\n" |
| "#\n") |
| |
| cfg_array(global_format_libraries_CFG, "format_libraries", global_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL, |
| "Shared libraries that process different metadata formats.\n" |
| "If support for LVM1 metadata was compiled as a shared library use\n" |
| "format_libraries = \"liblvm2format1.so\"\n") |
| |
| cfg_array(global_segment_libraries_CFG, "segment_libraries", global_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 18), NULL, 0, NULL, NULL) |
| |
| cfg(global_proc_CFG, "proc", global_CFG_SECTION, CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_PROC_DIR, vsn(1, 0, 0), NULL, 0, NULL, |
| "Location of proc filesystem.\n") |
| |
| cfg(global_etc_CFG, "etc", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_ETC_DIR, vsn(2, 2, 117), "@CONFDIR@", 0, NULL, |
| "Location of /etc system configuration directory.\n") |
| |
| cfg(global_locking_type_CFG, "locking_type", global_CFG_SECTION, 0, CFG_TYPE_INT, 1, vsn(1, 0, 0), NULL, 0, NULL, |
| "Type of locking to use.\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") |
| |
| cfg(global_fallback_to_clustered_locking_CFG, "fallback_to_clustered_locking", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_CLUSTERED_LOCKING, vsn(2, 2, 42), NULL, 0, NULL, |
| "Attempt to use built-in cluster locking if locking_type 2 fails.\n" |
| "If using external locking (type 2) and initialisation fails, with\n" |
| "this enabled, an attempt will be made to use the built-in clustered\n" |
| "locking. Disable this if using a customised locking_library.\n") |
| |
| cfg(global_fallback_to_local_locking_CFG, "fallback_to_local_locking", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_LOCAL_LOCKING, vsn(2, 2, 42), NULL, 0, NULL, |
| "Use locking_type 1 (local) if locking_type 2 or 3 fail.\n" |
| "If an attempt to initialise type 2 or type 3 locking failed, perhaps\n" |
| "because cluster components such as clvmd are not running, with this\n" |
| "enabled, an attempt will be made to use local file-based locking\n" |
| "(type 1). If this succeeds, only commands against local VGs will\n" |
| "proceed. VGs marked as clustered will be ignored.\n") |
| |
| cfg(global_locking_dir_CFG, "locking_dir", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_LOCK_DIR, vsn(1, 0, 0), "@DEFAULT_LOCK_DIR@", 0, NULL, |
| "Directory to use for LVM command file locks.\n" |
| "Local non-LV directory that holds file-based locks while commands are\n" |
| "in progress. A directory like /tmp that may get wiped on reboot is OK.\n") |
| |
| cfg(global_prioritise_write_locks_CFG, "prioritise_write_locks", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_PRIORITISE_WRITE_LOCKS, vsn(2, 2, 52), NULL, 0, NULL, |
| "Allow quicker VG write access during high volume read access.\n" |
| "When there are competing read-only and read-write access requests for\n" |
| "a volume group's metadata, instead of always granting the read-only\n" |
| "requests immediately, delay them to allow the read-write requests to\n" |
| "be serviced. Without this setting, write access may be stalled by a\n" |
| "high volume of read-only requests. This option only affects\n" |
| "locking_type 1 viz. local file-based locking.\n") |
| |
| cfg(global_library_dir_CFG, "library_dir", global_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL, |
| "Search this directory first for shared libraries.\n") |
| |
| cfg(global_locking_library_CFG, "locking_library", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_LOCKING_LIB, vsn(1, 0, 0), NULL, 0, NULL, |
| "The external locking library to use for locking_type 2.\n") |
| |
| cfg(global_abort_on_internal_errors_CFG, "abort_on_internal_errors", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ABORT_ON_INTERNAL_ERRORS, vsn(2, 2, 57), NULL, 0, NULL, |
| "Abort a command that encounters an internal error.\n" |
| "Treat any internal errors as fatal errors, aborting the process that\n" |
| "encountered the internal error. Please only enable for debugging.\n") |
| |
| cfg(global_detect_internal_vg_cache_corruption_CFG, "detect_internal_vg_cache_corruption", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_DETECT_INTERNAL_VG_CACHE_CORRUPTION, vsn(2, 2, 96), NULL, 0, NULL, |
| "Internal verification of VG structures.\n" |
| "Check if CRC matches when a parsed VG is used multiple times. This\n" |
| "is useful to catch unexpected changes to cached VG structures.\n" |
| "Please only enable for debugging.\n") |
| |
| cfg(global_metadata_read_only_CFG, "metadata_read_only", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_METADATA_READ_ONLY, vsn(2, 2, 75), NULL, 0, NULL, |
| "No operations that change on-disk metadata are permitted.\n" |
| "Additionally, read-only commands that encounter metadata in need of\n" |
| "repair will still be allowed to proceed exactly as if the repair had\n" |
| "been performed (except for the unchanged vg_seqno). Inappropriate\n" |
| "use could mess up your system, so seek advice first!\n") |
| |
| cfg(global_mirror_segtype_default_CFG, "mirror_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_MIRROR_SEGTYPE, vsn(2, 2, 87), "@DEFAULT_MIRROR_SEGTYPE@", 0, NULL, |
| "The segment type used by the short mirroring option -m.\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 --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" |
| "#\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 --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" |
| "#\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" |
| "The default format for displaying LV names in lvdisplay was changed\n" |
| "in version 2.02.89 to show the LV name and path separately.\n" |
| "Previously this was always shown as /dev/vgname/lvname even when that\n" |
| "was never a valid path in the /dev filesystem.\n") |
| |
| cfg(global_use_lvmetad_CFG, "use_lvmetad", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_USE_LVMETAD, vsn(2, 2, 93), "@DEFAULT_USE_LVMETAD@", 0, NULL, |
| "Use lvmetad to cache metadata and reduce disk scanning.\n" |
| "When enabled (and running), lvmetad provides LVM commands with VG\n" |
| "metadata and PV state. LVM commands then avoid reading this\n" |
| "information from disks which can be slow. When disabled (or not\n" |
| "running), LVM commands fall back to scanning disks to obtain VG\n" |
| "metadata. lvmetad is kept updated via udev rules which must be set\n" |
| "up for LVM to work correctly. (The udev rules should be installed\n" |
| "by default.) Without a proper udev setup, changes in the system's\n" |
| "block device configuration will be unknown to LVM, and ignored\n" |
| "until a manual 'pvscan --cache' is run. If lvmetad was running\n" |
| "while use_lvmetad was disabled, it must be stopped, use_lvmetad\n" |
| "enabled, and then started. When using lvmetad, LV activation is\n" |
| "switched to an automatic, event-based mode. In this mode, LVs are\n" |
| "activated based on incoming udev events that inform lvmetad when\n" |
| "PVs appear on the system. When a VG is complete (all PVs present),\n" |
| "it is auto-activated. The auto_activation_volume_list setting\n" |
| "controls which LVs are auto-activated (all by default.)\n" |
| "When lvmetad is updated (automatically by udev events, or directly\n" |
| "by pvscan --cache), devices/filter is ignored and all devices are\n" |
| "scanned by default. lvmetad always keeps unfiltered information\n" |
| "which is provided to LVM commands. Each LVM command then filters\n" |
| "based on devices/filter. This does not apply to other, non-regexp,\n" |
| "filtering settings: component filters such as multipath and MD\n" |
| "are checked during pvscan --cache. To filter a device and prevent\n" |
| "scanning from the LVM system entirely, including lvmetad, use\n" |
| "devices/global_filter.\n") |
| |
| cfg(global_lvmetad_update_wait_time_CFG, "lvmetad_update_wait_time", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_LVMETAD_UPDATE_WAIT_TIME, vsn(2, 2, 151), NULL, 0, NULL, |
| "The number of seconds a command will wait for lvmetad update to finish.\n" |
| "After waiting for this period, a command will not use lvmetad, and\n" |
| "will revert to disk scanning.\n") |
| |
| cfg(global_use_lvmlockd_CFG, "use_lvmlockd", global_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2, 2, 124), NULL, 0, NULL, |
| "Use lvmlockd for locking among hosts using LVM on shared storage.\n" |
| "Applicable only if LVM is compiled with lockd support in which\n" |
| "case there is also lvmlockd(8) man page available for more\n" |
| "information.\n") |
| |
| cfg(global_lvmlockd_lock_retries_CFG, "lvmlockd_lock_retries", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_LVMLOCKD_LOCK_RETRIES, vsn(2, 2, 125), NULL, 0, NULL, |
| "Retry lvmlockd lock requests this many times.\n" |
| "Applicable only if LVM is compiled with lockd support\n") |
| |
| cfg(global_sanlock_lv_extend_CFG, "sanlock_lv_extend", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_SANLOCK_LV_EXTEND_MB, vsn(2, 2, 124), NULL, 0, NULL, |
| "Size in MiB to extend the internal LV holding sanlock locks.\n" |
| "The internal LV holds locks for each LV in the VG, and after enough\n" |
| "LVs have been created, the internal LV needs to be extended. lvcreate\n" |
| "will automatically extend the internal LV when needed by the amount\n" |
| "specified here. Setting this to 0 disables the automatic extension\n" |
| "and can cause lvcreate to fail. Applicable only if LVM is compiled\n" |
| "with lockd support\n") |
| |
| cfg(global_thin_check_executable_CFG, "thin_check_executable", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, THIN_CHECK_CMD, vsn(2, 2, 94), "@THIN_CHECK_CMD@", 0, NULL, |
| "The full path to the thin_check command.\n" |
| "LVM uses this command to check that a thin metadata device is in a\n" |
| "usable state. When a thin pool is activated and after it is\n" |
| "deactivated, this command is run. Activation will only proceed if\n" |
| "the command has an exit status of 0. Set to \"\" to skip this check.\n" |
| "(Not recommended.) Also see thin_check_options.\n" |
| "(See package device-mapper-persistent-data or thin-provisioning-tools)\n") |
| |
| cfg(global_thin_dump_executable_CFG, "thin_dump_executable", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, THIN_DUMP_CMD, vsn(2, 2, 100), "@THIN_DUMP_CMD@", 0, NULL, |
| "The full path to the thin_dump command.\n" |
| "LVM uses this command to dump thin pool metadata.\n" |
| "(See package device-mapper-persistent-data or thin-provisioning-tools)\n") |
| |
| cfg(global_thin_repair_executable_CFG, "thin_repair_executable", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, THIN_REPAIR_CMD, vsn(2, 2, 100), "@THIN_REPAIR_CMD@", 0, NULL, |
| "The full path to the thin_repair command.\n" |
| "LVM uses this command to repair a thin metadata device if it is in\n" |
| "an unusable state. Also see thin_repair_options.\n" |
| "(See package device-mapper-persistent-data or thin-provisioning-tools)\n") |
| |
| cfg_array(global_thin_check_options_CFG, "thin_check_options", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_THIN_CHECK_OPTIONS_CONFIG, vsn(2, 2, 96), NULL, 0, NULL, |
| "List of options passed to the thin_check command.\n" |
| "With thin_check version 2.1 or newer you can add the option\n" |
| "--ignore-non-fatal-errors to let it pass through ignorable errors\n" |
| "and fix them later. With thin_check version 3.2 or newer you should\n" |
| "include the option --clear-needs-check-flag.\n") |
| |
| cfg_array(global_thin_repair_options_CFG, "thin_repair_options", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_THIN_REPAIR_OPTIONS_CONFIG, vsn(2, 2, 100), NULL, 0, NULL, |
| "List of options passed to the thin_repair command.\n") |
| |
| cfg_array(global_thin_disabled_features_CFG, "thin_disabled_features", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(2, 2, 99), NULL, 0, NULL, |
| "Features to not use in the thin driver.\n" |
| "This can be helpful for testing, or to avoid using a feature that is\n" |
| "causing problems. Features include: block_size, discards,\n" |
| "discards_non_power_2, external_origin, metadata_resize,\n" |
| "external_origin_extend, error_if_no_space.\n" |
| "#\n" |
| "Example\n" |
| "thin_disabled_features = [ \"discards\", \"block_size\" ]\n" |
| "#\n") |
| |
| cfg_array(global_cache_disabled_features_CFG, "cache_disabled_features", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(2, 2, 128), NULL, 0, NULL, |
| "Features to not use in the cache driver.\n" |
| "This can be helpful for testing, or to avoid using a feature that is\n" |
| "causing problems. Features include: policy_mq, policy_smq.\n" |
| "#\n" |
| "Example\n" |
| "cache_disabled_features = [ \"policy_smq\" ]\n" |
| "#\n") |
| |
| cfg(global_cache_check_executable_CFG, "cache_check_executable", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, CACHE_CHECK_CMD, vsn(2, 2, 108), "@CACHE_CHECK_CMD@", 0, NULL, |
| "The full path to the cache_check command.\n" |
| "LVM uses this command to check that a cache metadata device is in a\n" |
| "usable state. When a cached LV is activated and after it is\n" |
| "deactivated, this command is run. Activation will only proceed if the\n" |
| "command has an exit status of 0. Set to \"\" to skip this check.\n" |
| "(Not recommended.) Also see cache_check_options.\n" |
| "(See package device-mapper-persistent-data or thin-provisioning-tools)\n") |
| |
| cfg(global_cache_dump_executable_CFG, "cache_dump_executable", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, CACHE_DUMP_CMD, vsn(2, 2, 108), "@CACHE_DUMP_CMD@", 0, NULL, |
| "The full path to the cache_dump command.\n" |
| "LVM uses this command to dump cache pool metadata.\n" |
| "(See package device-mapper-persistent-data or thin-provisioning-tools)\n") |
| |
| cfg(global_cache_repair_executable_CFG, "cache_repair_executable", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, CACHE_REPAIR_CMD, vsn(2, 2, 108), "@CACHE_REPAIR_CMD@", 0, NULL, |
| "The full path to the cache_repair command.\n" |
| "LVM uses this command to repair a cache metadata device if it is in\n" |
| "an unusable state. Also see cache_repair_options.\n" |
| "(See package device-mapper-persistent-data or thin-provisioning-tools)\n") |
| |
| cfg_array(global_cache_check_options_CFG, "cache_check_options", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_CACHE_CHECK_OPTIONS_CONFIG, vsn(2, 2, 108), NULL, 0, NULL, |
| "List of options passed to the cache_check command.\n" |
| "With cache_check version 5.0 or newer you should include the option\n" |
| "--clear-needs-check-flag.\n") |
| |
| cfg_array(global_cache_repair_options_CFG, "cache_repair_options", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_CACHE_REPAIR_OPTIONS_CONFIG, vsn(2, 2, 108), NULL, 0, NULL, |
| "List of options passed to the cache_repair command.\n") |
| |
| cfg(global_system_id_source_CFG, "system_id_source", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_SYSTEM_ID_SOURCE, vsn(2, 2, 117), NULL, 0, NULL, |
| "The method LVM uses to set the local system ID.\n" |
| "Volume Groups can also be given a system ID (by vgcreate, vgchange,\n" |
| "or vgimport.) A VG on shared storage devices is accessible only to\n" |
| "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" |
| "This is used when system_id_source is set to 'file'.\n" |
| "Comments starting with the character # are ignored.\n") |
| |
| cfg(activation_checks_CFG, "checks", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ACTIVATION_CHECKS, vsn(2, 2, 86), NULL, 0, NULL, |
| "Perform internal checks of libdevmapper operations.\n" |
| "Useful for debugging problems with activation. Some of the checks may\n" |
| "be expensive, so it's best to use this only when there seems to be a\n" |
| "problem.\n") |
| |
| cfg(global_use_lvmpolld_CFG, "use_lvmpolld", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_USE_LVMPOLLD, vsn(2, 2, 120), "@DEFAULT_USE_LVMPOLLD@", 0, NULL, |
| "Use lvmpolld to supervise long running LVM commands.\n" |
| "When enabled, control of long running LVM commands is transferred\n" |
| "from the original LVM command to the lvmpolld daemon. This allows\n" |
| "the operation to continue independent of the original LVM command.\n" |
| "After lvmpolld takes over, the LVM command displays the progress\n" |
| "of the ongoing operation. lvmpolld itself runs LVM commands to\n" |
| "manage the progress of ongoing operations. lvmpolld can be used as\n" |
| "a native systemd service, which allows it to be started on demand,\n" |
| "and to use its own control group. When this option is disabled, LVM\n" |
| "commands will supervise long running operations by forking themselves.\n" |
| "Applicable only if LVM is compiled with lvmpolld support.\n") |
| |
| cfg(global_notify_dbus_CFG, "notify_dbus", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_NOTIFY_DBUS, vsn(2, 2, 145), NULL, 0, NULL, |
| "Enable D-Bus notification from LVM commands.\n" |
| "When enabled, an LVM command that changes PVs, changes VG metadata,\n" |
| "or changes the activation state of an LV will send a notification.\n") |
| |
| cfg(activation_udev_sync_CFG, "udev_sync", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_UDEV_SYNC, vsn(2, 2, 51), NULL, 0, NULL, |
| "Use udev notifications to synchronize udev and LVM.\n" |
| "The --nodevsync option overrides this setting.\n" |
| "When disabled, LVM commands will not wait for notifications from\n" |
| "udev, but continue irrespective of any possible udev processing in\n" |
| "the background. Only use this if udev is not running or has rules\n" |
| "that ignore the devices LVM creates. If enabled when udev is not\n" |
| "running, and LVM processes are waiting for udev, run the command\n" |
| "'dmsetup udevcomplete_all' to wake them up.\n") |
| |
| cfg(activation_udev_rules_CFG, "udev_rules", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_UDEV_RULES, vsn(2, 2, 57), NULL, 0, NULL, |
| "Use udev rules to manage LV device nodes and symlinks.\n" |
| "When disabled, LVM will manage the device nodes and symlinks for\n" |
| "active LVs itself. Manual intervention may be required if this\n" |
| "setting is changed while LVs are active.\n") |
| |
| cfg(activation_verify_udev_operations_CFG, "verify_udev_operations", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_VERIFY_UDEV_OPERATIONS, vsn(2, 2, 86), NULL, 0, NULL, |
| "Use extra checks in LVM to verify udev operations.\n" |
| "This enables additional checks (and if necessary, repairs) on entries\n" |
| "in the device directory after udev has completed processing its\n" |
| "events. Useful for diagnosing problems with LVM/udev interactions.\n") |
| |
| cfg(activation_retry_deactivation_CFG, "retry_deactivation", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_RETRY_DEACTIVATION, vsn(2, 2, 89), NULL, 0, NULL, |
| "Retry failed LV deactivation.\n" |
| "If LV deactivation fails, LVM will retry for a few seconds before\n" |
| "failing. This may happen because a process run from a quick udev rule\n" |
| "temporarily opened the device.\n") |
| |
| cfg(activation_missing_stripe_filler_CFG, "missing_stripe_filler", activation_CFG_SECTION, CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_STRIPE_FILLER, vsn(1, 0, 0), NULL, 0, NULL, |
| "Method to fill missing stripes when activating an incomplete LV.\n" |
| "Using 'error' will make inaccessible parts of the device return I/O\n" |
| "errors on access. You can instead use a device path, in which case,\n" |
| "that device will be used in place of missing stripes. Using anything\n" |
| "other than 'error' with mirrored or snapshotted volumes is likely to\n" |
| "result in data corruption.\n") |
| |
| cfg(activation_use_linear_target_CFG, "use_linear_target", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_USE_LINEAR_TARGET, vsn(2, 2, 89), NULL, 0, NULL, |
| "Use the linear target to optimize single stripe LVs.\n" |
| "When disabled, the striped target is used. The linear target is an\n" |
| "optimised version of the striped target that only handles a single\n" |
| "stripe.\n") |
| |
| cfg(activation_reserved_stack_CFG, "reserved_stack", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_RESERVED_STACK, vsn(1, 0, 0), NULL, 0, NULL, |
| "Stack size in KiB to reserve for use while devices are suspended.\n" |
| "Insufficent reserve risks I/O deadlock during device suspension.\n") |
| |
| cfg(activation_reserved_memory_CFG, "reserved_memory", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_RESERVED_MEMORY, vsn(1, 0, 0), NULL, 0, NULL, |
| "Memory size in KiB to reserve for use while devices are suspended.\n" |
| "Insufficent reserve risks I/O deadlock during device suspension.\n") |
| |
| cfg(activation_process_priority_CFG, "process_priority", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_PROCESS_PRIORITY, vsn(1, 0, 0), NULL, 0, NULL, |
| "Nice value used while devices are suspended.\n" |
| "Use a high priority so that LVs are suspended\n" |
| "for the shortest possible time.\n") |
| |
| 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 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" |
| "#\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 '@*'\n" |
| " is assumed.\n" |
| "#\n" |
| "Example\n" |
| "volume_list = [ \"vg1\", \"vg2/lvol1\", \"@tag1\", \"@*\" ]\n" |
| "#\n") |
| |
| 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 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 '@*'\n" |
| " is assumed.\n" |
| "#\n" |
| "Example\n" |
| "auto_activation_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 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 '@*'\n" |
| " is assumed.\n" |
| "#\n" |
| "Example\n" |
| "read_only_volume_list = [ \"vg1\", \"vg2/lvol1\", \"@tag1\", \"@*\" ]\n" |
| "#\n") |
| |
| cfg(activation_mirror_region_size_CFG, "mirror_region_size", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_RAID_REGION_SIZE, vsn(1, 0, 0), NULL, vsn(2, 2, 99), |
| "This has been replaced by the activation/raid_region_size setting.\n", |
| "Size in KiB of each copy operation when mirroring.\n") |
| |
| cfg(activation_raid_region_size_CFG, "raid_region_size", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_RAID_REGION_SIZE, vsn(2, 2, 99), NULL, 0, NULL, |
| "Size in KiB of each raid or mirror synchronization region.\n" |
| "For raid or mirror segment types, this is the amount of data that is\n" |
| "copied at once when initializing, or moved at once by pvmove.\n") |
| |
| cfg(activation_error_when_full_CFG, "error_when_full", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ERROR_WHEN_FULL, vsn(2, 2, 115), NULL, 0, NULL, |
| "Return errors if a thin pool runs out of space.\n" |
| "The --errorwhenfull option overrides this setting.\n" |
| "When enabled, writes to thin LVs immediately return an error if the\n" |
| "thin pool is out of data space. When disabled, writes to thin LVs\n" |
| "are queued if the thin pool is out of space, and processed when the\n" |
| "thin pool data space is extended. New thin pools are assigned the\n" |
| "behavior defined here.\n") |
| |
| 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" |
| "#\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 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" |
| "#\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 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" |
| "#\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" |
| "The mirror_image_fault_policy description for mirrored LVs also\n" |
| "applies to mirrored log LVs.\n") |
| |
| cfg(activation_mirror_device_fault_policy_CFG, "mirror_device_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_MIRROR_DEVICE_FAULT_POLICY, vsn(1, 2, 10), NULL, vsn(2, 2, 57), |
| "This has been replaced by the activation/mirror_image_fault_policy setting.\n", |
| "Define how a device failure affecting a mirror is handled.\n") |
| |
| cfg(activation_snapshot_autoextend_threshold_CFG, "snapshot_autoextend_threshold", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_SNAPSHOT_AUTOEXTEND_THRESHOLD, vsn(2, 2, 75), NULL, 0, NULL, |
| "Auto-extend a snapshot when its usage exceeds this percent.\n" |
| "Setting this to 100 disables automatic extension.\n" |
| "The minimum value is 50 (a smaller value is treated as 50.)\n" |
| "Also see snapshot_autoextend_percent.\n" |
| "Automatic extension requires dmeventd to be monitoring the LV.\n" |
| "#\n" |
| "Example\n" |
| "Using 70% autoextend threshold and 20% autoextend size, when a 1G\n" |
| "snapshot exceeds 700M, it is extended to 1.2G, and when it exceeds\n" |
| "840M, it is extended to 1.44G:\n" |
| "snapshot_autoextend_threshold = 70\n" |
| "#\n") |
| |
| cfg(activation_snapshot_autoextend_percent_CFG, "snapshot_autoextend_percent", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_SNAPSHOT_AUTOEXTEND_PERCENT, vsn(2, 2, 75), NULL, 0, NULL, |
| "Auto-extending a snapshot adds this percent extra space.\n" |
| "The amount of additional space added to a snapshot is this\n" |
| "percent of its current size.\n" |
| "#\n" |
| "Example\n" |
| "Using 70% autoextend threshold and 20% autoextend size, when a 1G\n" |
| "snapshot exceeds 700M, it is extended to 1.2G, and when it exceeds\n" |
| "840M, it is extended to 1.44G:\n" |
| "snapshot_autoextend_percent = 20\n" |
| "#\n") |
| |
| cfg(activation_thin_pool_autoextend_threshold_CFG, "thin_pool_autoextend_threshold", activation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_INT, DEFAULT_THIN_POOL_AUTOEXTEND_THRESHOLD, vsn(2, 2, 89), NULL, 0, NULL, |
| "Auto-extend a thin pool when its usage exceeds this percent.\n" |
| "Setting this to 100 disables automatic extension.\n" |
| "The minimum value is 50 (a smaller value is treated as 50.)\n" |
| "Also see thin_pool_autoextend_percent.\n" |
| "Automatic extension requires dmeventd to be monitoring the LV.\n" |
| "#\n" |
| "Example\n" |
| "Using 70% autoextend threshold and 20% autoextend size, when a 1G\n" |
| "thin pool exceeds 700M, it is extended to 1.2G, and when it exceeds\n" |
| "840M, it is extended to 1.44G:\n" |
| "thin_pool_autoextend_threshold = 70\n" |
| "#\n") |
| |
| cfg(activation_thin_pool_autoextend_percent_CFG, "thin_pool_autoextend_percent", activation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_INT, DEFAULT_THIN_POOL_AUTOEXTEND_PERCENT, vsn(2, 2, 89), NULL, 0, NULL, |
| "Auto-extending a thin pool adds this percent extra space.\n" |
| "The amount of additional space added to a thin pool is this\n" |
| "percent of its current size.\n" |
| "#\n" |
| "Example\n" |
| "Using 70% autoextend threshold and 20% autoextend size, when a 1G\n" |
| "thin pool exceeds 700M, it is extended to 1.2G, and when it exceeds\n" |
| "840M, it is extended to 1.44G:\n" |
| "thin_pool_autoextend_percent = 20\n" |
| "#\n") |
| |
| cfg_array(activation_mlock_filter_CFG, "mlock_filter", activation_CFG_SECTION, CFG_DEFAULT_UNDEFINED | CFG_ADVANCED, CFG_TYPE_STRING, NULL, vsn(2, 2, 62), NULL, 0, NULL, |
| "Do not mlock these memory areas.\n" |
| "While activating devices, I/O to devices being (re)configured is\n" |
| "suspended. As a precaution against deadlocks, LVM pins memory it is\n" |
| "using so it is not paged out, and will not require I/O to reread.\n" |
| "Groups of pages that are known not to be accessed during activation\n" |
| "do not need to be pinned into memory. Each string listed in this\n" |
| "setting is compared against each line in /proc/self/maps, and the\n" |
| "pages corresponding to lines that match are not pinned. On some\n" |
| "systems, locale-archive was found to make up over 80% of the memory\n" |
| "used by the process.\n" |
| "#\n" |
| "Example\n" |
| "mlock_filter = [ \"locale/locale-archive\", \"gconv/gconv-modules.cache\" ]\n" |
| "#\n") |
| |
| cfg(activation_use_mlockall_CFG, "use_mlockall", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_USE_MLOCKALL, vsn(2, 2, 62), NULL, 0, NULL, |
| "Use the old behavior of mlockall to pin all memory.\n" |
| "Prior to version 2.02.62, LVM used mlockall() to pin the whole\n" |
| "process's memory while activating devices.\n") |
| |
| cfg(activation_monitoring_CFG, "monitoring", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_DMEVENTD_MONITOR, vsn(2, 2, 63), NULL, 0, NULL, |
| "Monitor LVs that are activated.\n" |
| "The --ignoremonitoring option overrides this setting.\n" |
| "When enabled, LVM will ask dmeventd to monitor activated LVs.\n") |
| |
| cfg(activation_polling_interval_CFG, "polling_interval", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_INTERVAL, vsn(2, 2, 63), NULL, 0, NULL, |
| "Check pvmove or lvconvert progress at this interval (seconds).\n" |
| "When pvmove or lvconvert must wait for the kernel to finish\n" |
| "synchronising or merging data, they check and report progress at\n" |
| "intervals of this number of seconds. If this is set to 0 and there\n" |
| "is only one thing to wait for, there are no progress reports, but\n" |
| "the process is awoken immediately once the operation is complete.\n") |
| |
| cfg(activation_auto_set_activation_skip_CFG, "auto_set_activation_skip", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_AUTO_SET_ACTIVATION_SKIP, vsn(2,2,99), NULL, 0, NULL, |
| "Set the activation skip flag on new thin snapshot LVs.\n" |
| "The --setactivationskip option overrides this setting.\n" |
| "An LV can have a persistent 'activation skip' flag. The flag causes\n" |
| "the LV to be skipped during normal activation. The lvchange/vgchange\n" |
| "-K option is required to activate LVs that have the activation skip\n" |
| "flag set. When this setting is enabled, the activation skip flag is\n" |
| "set on new thin snapshot LVs.\n") |
| |
| cfg(activation_mode_CFG, "activation_mode", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_ACTIVATION_MODE, vsn(2,2,108), NULL, 0, NULL, |
| "How LVs with missing devices are activated.\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" |
| "The rules are the same as those for volume_list.\n") |
| |
| cfg_array(activation_auto_lock_start_list_CFG, "auto_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 auto-started only for VGs selected by this list.\n" |
| "The rules are the same as those for auto_activation_volume_list.\n") |
| |
| cfg(metadata_check_pv_device_sizes_CFG, "check_pv_device_sizes", metadata_CFG_SECTION, CFG_ADVANCED | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 1, vsn(2, 2, 141), NULL, 0, NULL, |
| "Check device sizes are not smaller than corresponding PV sizes.\n" |
| "If device size is less than corresponding PV size found in metadata,\n" |
| "there is always a risk of data loss. If this option is set, then LVM\n" |
| "issues a warning message each time it finds that the device size is\n" |
| "less than corresponding PV size. You should not disable this unless\n" |
| "you are absolutely sure about what you are doing!\n") |
| |
| cfg(metadata_record_lvs_history_CFG, "record_lvs_history", metadata_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_RECORD_LVS_HISTORY, vsn(2, 2, 145), NULL, 0, NULL, |
| "When enabled, LVM keeps history records about removed LVs in\n" |
| "metadata. The information that is recorded in metadata for\n" |
| "historical LVs is reduced when compared to original\n" |
| "information kept in metadata for live LVs. Currently, this\n" |
| "feature is supported for thin and thin snapshot LVs only.\n") |
| |
| cfg(metadata_lvs_history_retention_time_CFG, "lvs_history_retention_time", metadata_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_LVS_HISTORY_RETENTION_TIME, vsn(2, 2, 145), NULL, 0, NULL, |
| "Retention time in seconds after which a record about individual\n" |
| "historical logical volume is automatically destroyed.\n" |
| "A value of 0 disables this feature.\n") |
| |
| 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" |
| "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" |
| "The --vgmetadatacopies option overrides this setting.\n" |
| "If set to a non-zero value, LVM automatically chooses which of the\n" |
| "available metadata areas to use to achieve the requested number of\n" |
| "copies of the VG metadata. If you set a value larger than the the\n" |
| "total number of metadata areas available, then metadata is stored in\n" |
| "them all. The value 0 (unmanaged) disables this automatic management\n" |
| "and allows you to control which metadata areas are used at the\n" |
| "individual PV level using pvchange --metadataignore y|n.\n") |
| |
| cfg(metadata_pvmetadatasize_CFG, "pvmetadatasize", metadata_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_PVMETADATASIZE, vsn(1, 0, 0), NULL, 0, NULL, |
| "Approximate number of sectors to use for each metadata copy.\n" |
| "VGs with large numbers of PVs or LVs, or VGs containing complex LV\n" |
| "structures, may need additional space for VG metadata. The metadata\n" |
| "areas are treated as circular buffers, so unused space becomes filled\n" |
| "with an archive of the most recent previous versions of the metadata.\n") |
| |
| cfg(metadata_pvmetadataignore_CFG, "pvmetadataignore", metadata_CFG_SECTION, CFG_ADVANCED | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_PVMETADATAIGNORE, vsn(2, 2, 69), NULL, 0, NULL, |
| "Ignore metadata areas on a new PV.\n" |
| "The --metadataignore option overrides this setting.\n" |
| "If metadata areas on a PV are ignored, LVM will not store metadata\n" |
| "in them.\n") |
| |
| cfg(metadata_stripesize_CFG, "stripesize", metadata_CFG_SECTION, CFG_ADVANCED | CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_STRIPESIZE, vsn(1, 0, 0), NULL, 0, NULL, NULL) |
| |
| cfg_array(metadata_dirs_CFG, "dirs", metadata_CFG_SECTION, CFG_ADVANCED | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL, |
| "Directories holding live copies of text format metadata.\n" |
| "These directories must not be on logical volumes!\n" |
| "It's possible to use LVM with a couple of directories here,\n" |
| "preferably on different (non-LV) filesystems, and with no other\n" |
| "on-disk metadata (pvmetadatacopies = 0). Or this can be in addition\n" |
| "to on-disk metadata areas. The feature was originally added to\n" |
| "simplify testing and is not supported under low memory situations -\n" |
| "the machine could lock up. Never edit any files in these directories\n" |
| "by hand unless you are absolutely sure you know what you are doing!\n" |
| "Use the supplied toolset to make changes (e.g. vgcfgrestore).\n" |
| "#\n" |
| "Example\n" |
| "dirs = [ \"/etc/lvm/metadata\", \"/mnt/disk2/lvm/metadata2\" ]\n" |
| "#\n") |
| |
| cfg_section(metadata_disk_areas_CFG_SUBSECTION, "disk_areas", metadata_CFG_SECTION, CFG_UNSUPPORTED | CFG_DEFAULT_COMMENTED, vsn(1, 0, 0), 0, NULL, NULL) |
| cfg_section(disk_area_CFG_SUBSECTION, "disk_area", metadata_disk_areas_CFG_SUBSECTION, CFG_NAME_VARIABLE | CFG_UNSUPPORTED | CFG_DEFAULT_COMMENTED, vsn(1, 0, 0), 0, NULL, NULL) |
| cfg(disk_area_start_sector_CFG, "start_sector", disk_area_CFG_SUBSECTION, CFG_UNSUPPORTED | CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 0, vsn(1, 0, 0), NULL, 0, NULL, NULL) |
| cfg(disk_area_size_CFG, "size", disk_area_CFG_SUBSECTION, CFG_UNSUPPORTED | CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 0, vsn(1, 0, 0), NULL, 0, NULL, NULL) |
| cfg(disk_area_id_CFG, "id", disk_area_CFG_SUBSECTION, CFG_UNSUPPORTED | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL, NULL) |
| |
| cfg(report_output_format_CFG, "output_format", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_REP_OUTPUT_FORMAT, vsn(2, 2, 158), NULL, 0, NULL, |
| "Format of LVM command's report output.\n" |
| "If there is more than one report per command, then the format\n" |
| "is applied for all reports. You can also change output format\n" |
| "directly on command line using --reportformat option which\n" |
| "has precedence over log/output_format setting.\n" |
| "Accepted values:\n" |
| " basic\n" |
| " Original format with columns and rows. If there is more than\n" |
| " one report per command, each report is prefixed with report's\n" |
| " name for identification.\n" |
| " json\n" |
| " JSON format.\n") |
| |
| cfg(report_compact_output_CFG, "compact_output", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_REP_COMPACT_OUTPUT, vsn(2, 2, 115), NULL, 0, NULL, |
| "Do not print empty values for all report fields.\n" |
| "If enabled, all fields that don't have a value set for any of the\n" |
| "rows reported are skipped and not printed. Compact output is\n" |
| "applicable only if report/buffered is enabled. If you need to\n" |
| "compact only specified fields, use compact_output=0 and define\n" |
| "report/compact_output_cols configuration setting instead.\n") |
| |
| cfg(report_compact_output_cols_CFG, "compact_output_cols", report_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_COMPACT_OUTPUT_COLS, vsn(2, 2, 133), NULL, 0, NULL, |
| "Do not print empty values for specified report fields.\n" |
| "If defined, specified fields that don't have a value set for any\n" |
| "of the rows reported are skipped and not printed. Compact output\n" |
| "is applicable only if report/buffered is enabled. If you need to\n" |
| "compact all fields, use compact_output=1 instead in which case\n" |
| "the compact_output_cols setting is then ignored.\n") |
| |
| cfg(report_aligned_CFG, "aligned", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_REP_ALIGNED, vsn(1, 0, 0), NULL, 0, NULL, |
| "Align columns in report output.\n") |
| |
| cfg(report_buffered_CFG, "buffered", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_REP_BUFFERED, vsn(1, 0, 0), NULL, 0, NULL, |
| "Buffer report output.\n" |
| "When buffered reporting is used, the report's content is appended\n" |
| "incrementally to include each object being reported until the report\n" |
| "is flushed to output which normally happens at the end of command\n" |
| "execution. Otherwise, if buffering is not used, each object is\n" |
| "reported as soon as its processing is finished.\n") |
| |
| cfg(report_headings_CFG, "headings", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_REP_HEADINGS, vsn(1, 0, 0), NULL, 0, NULL, |
| "Show headings for columns on report.\n") |
| |
| cfg(report_separator_CFG, "separator", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_REP_SEPARATOR, vsn(1, 0, 0), NULL, 0, NULL, |
| "A separator to use on report after each field.\n") |
| |
| cfg(report_list_item_separator_CFG, "list_item_separator", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_REP_LIST_ITEM_SEPARATOR, vsn(2, 2, 108), NULL, 0, NULL, |
| "A separator to use for list items when reported.\n") |
| |
| cfg(report_prefixes_CFG, "prefixes", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_REP_PREFIXES, vsn(2, 2, 36), NULL, 0, NULL, |
| "Use a field name prefix for each field reported.\n") |
| |
| cfg(report_quoted_CFG, "quoted", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_REP_QUOTED, vsn(2, 2, 39), NULL, 0, NULL, |
| "Quote field values when using field name prefixes.\n") |
| |
| cfg(report_colums_as_rows_CFG, "colums_as_rows", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_REP_COLUMNS_AS_ROWS, vsn(1, 0, 0), NULL, 0, NULL, |
| "Output each column as a row.\n" |
| "If set, this also implies report/prefixes=1.\n") |
| |
| cfg(report_binary_values_as_numeric_CFG, "binary_values_as_numeric", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(2, 2, 108), NULL, 0, NULL, |
| "Use binary values 0 or 1 instead of descriptive literal values.\n" |
| "For columns that have exactly two valid values to report\n" |
| "(not counting the 'unknown' value which denotes that the\n" |
| "value could not be determined).\n") |
| |
| 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\n" |
| "sequences are copied verbatim. Each special character sequence is\n" |
| "introduced by the '%' 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" |
| "See 'lvm devtypes -o help' for the list of possible fields.\n") |
| |
| cfg(report_devtypes_cols_CFG, "devtypes_cols", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_DEVTYPES_COLS, vsn(2, 2, 101), NULL, 0, NULL, |
| "List of columns to report for 'lvm devtypes' command.\n" |
| "See 'lvm devtypes -o help' for the list of possible fields.\n") |
| |
| cfg(report_devtypes_cols_verbose_CFG, "devtypes_cols_verbose", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_DEVTYPES_COLS_VERB, vsn(2, 2, 101), NULL, 0, NULL, |
| "List of columns to report for 'lvm devtypes' command in verbose mode.\n" |
| "See 'lvm devtypes -o help' for the list of possible fields.\n") |
| |
| cfg(report_lvs_sort_CFG, "lvs_sort", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_LVS_SORT, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of columns to sort by when reporting 'lvs' command.\n" |
| "See 'lvs -o help' for the list of possible fields.\n") |
| |
| cfg(report_lvs_cols_CFG, "lvs_cols", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_LVS_COLS, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of columns to report for 'lvs' command.\n" |
| "See 'lvs -o help' for the list of possible fields.\n") |
| |
| cfg(report_lvs_cols_verbose_CFG, "lvs_cols_verbose", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_LVS_COLS_VERB, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of columns to report for 'lvs' command in verbose mode.\n" |
| "See 'lvs -o help' for the list of possible fields.\n") |
| |
| cfg(report_vgs_sort_CFG, "vgs_sort", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_VGS_SORT, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of columns to sort by when reporting 'vgs' command.\n" |
| "See 'vgs -o help' for the list of possible fields.\n") |
| |
| cfg(report_vgs_cols_CFG, "vgs_cols", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_VGS_COLS, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of columns to report for 'vgs' command.\n" |
| "See 'vgs -o help' for the list of possible fields.\n") |
| |
| cfg(report_vgs_cols_verbose_CFG, "vgs_cols_verbose", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_VGS_COLS_VERB, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of columns to report for 'vgs' command in verbose mode.\n" |
| "See 'vgs -o help' for the list of possible fields.\n") |
| |
| cfg(report_pvs_sort_CFG, "pvs_sort", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_PVS_SORT, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of columns to sort by when reporting 'pvs' command.\n" |
| "See 'pvs -o help' for the list of possible fields.\n") |
| |
| cfg(report_pvs_cols_CFG, "pvs_cols", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_PVS_COLS, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of columns to report for 'pvs' command.\n" |
| "See 'pvs -o help' for the list of possible fields.\n") |
| |
| cfg(report_pvs_cols_verbose_CFG, "pvs_cols_verbose", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_PVS_COLS_VERB, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of columns to report for 'pvs' command in verbose mode.\n" |
| "See 'pvs -o help' for the list of possible fields.\n") |
| |
| cfg(report_segs_sort_CFG, "segs_sort", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_SEGS_SORT, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of columns to sort by when reporting 'lvs --segments' command.\n" |
| "See 'lvs --segments -o help' for the list of possible fields.\n") |
| |
| cfg(report_segs_cols_CFG, "segs_cols", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_SEGS_COLS, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of columns to report for 'lvs --segments' command.\n" |
| "See 'lvs --segments -o help' for the list of possible fields.\n") |
| |
| cfg(report_segs_cols_verbose_CFG, "segs_cols_verbose", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_SEGS_COLS_VERB, vsn(1, 0, 0), NULL, 0, NULL, |
| "List of columns to report for 'lvs --segments' command in verbose mode.\n" |
| "See 'lvs --segments -o help' for the list of possible fields.\n") |
| |
| cfg(report_pvsegs_sort_CFG, "pvsegs_sort", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_PVSEGS_SORT, vsn(1, 1, 3), NULL, 0, NULL, |
| "List of columns to sort by when reporting 'pvs --segments' command.\n" |
| "See 'pvs --segments -o help' for the list of possible fields.\n") |
| |
| cfg(report_pvsegs_cols_CFG, "pvsegs_cols", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_PVSEGS_COLS, vsn(1, 1, 3), NULL, 0, NULL, |
| "List of columns to sort by when reporting 'pvs --segments' command.\n" |
| "See 'pvs --segments -o help' for the list of possible fields.\n") |
| |
| cfg(report_pvsegs_cols_verbose_CFG, "pvsegs_cols_verbose", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_PVSEGS_COLS_VERB, vsn(1, 1, 3), NULL, 0, NULL, |
| "List of columns to sort by when reporting 'pvs --segments' command in verbose mode.\n" |
| "See 'pvs --segments -o help' for the list of possible fields.\n") |
| |
| cfg(report_vgs_cols_full_CFG, "vgs_cols_full", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_VGS_COLS_FULL, vsn(2, 2, 158), NULL, 0, NULL, |
| "List of columns to report for lvm fullreport's 'vgs' subreport.\n" |
| "See 'vgs -o help' for the list of possible fields.\n") |
| |
| cfg(report_pvs_cols_full_CFG, "pvs_cols_full", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_PVS_COLS_FULL, vsn(2, 2, 158), NULL, 0, NULL, |
| "List of columns to report for lvm fullreport's 'vgs' subreport.\n" |
| "See 'pvs -o help' for the list of possible fields.\n") |
| |
| cfg(report_lvs_cols_full_CFG, "lvs_cols_full", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_LVS_COLS_FULL, vsn(2, 2, 158), NULL, 0, NULL, |
| "List of columns to report for lvm fullreport's 'lvs' subreport.\n" |
| "See 'lvs -o help' for the list of possible fields.\n") |
| |
| cfg(report_pvsegs_cols_full_CFG, "pvsegs_cols_full", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_PVSEGS_COLS_FULL, vsn(2, 2, 158), NULL, 0, NULL, |
| "List of columns to report for lvm fullreport's 'pvseg' subreport.\n" |
| "See 'pvs --segments -o help' for the list of possible fields.\n") |
| |
| cfg(report_segs_cols_full_CFG, "segs_cols_full", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_SEGS_COLS_FULL, vsn(2, 2, 158), NULL, 0, NULL, |
| "List of columns to report for lvm fullreport's 'seg' subreport.\n" |
| "See 'lvs --segments -o help' for the list of possible fields.\n") |
| |
| cfg(report_vgs_sort_full_CFG, "vgs_sort_full", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_VGS_SORT_FULL, vsn(2, 2, 158), NULL, 0, NULL, |
| "List of columns to sort by when reporting lvm fullreport's 'vgs' subreport.\n" |
| "See 'vgs -o help' for the list of possible fields.\n") |
| |
| cfg(report_pvs_sort_full_CFG, "pvs_sort_full", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_PVS_SORT_FULL, vsn(2, 2, 158), NULL, 0, NULL, |
| "List of columns to sort by when reporting lvm fullreport's 'vgs' subreport.\n" |
| "See 'pvs -o help' for the list of possible fields.\n") |
| |
| cfg(report_lvs_sort_full_CFG, "lvs_sort_full", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_LVS_SORT_FULL, vsn(2, 2, 158), NULL, 0, NULL, |
| "List of columns to sort by when reporting lvm fullreport's 'lvs' subreport.\n" |
| "See 'lvs -o help' for the list of possible fields.\n") |
| |
| cfg(report_pvsegs_sort_full_CFG, "pvsegs_sort_full", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_PVSEGS_SORT_FULL, vsn(2, 2, 158), NULL, 0, NULL, |
| "List of columns to sort by when reporting for lvm fullreport's 'pvseg' subreport.\n" |
| "See 'pvs --segments -o help' for the list of possible fields.\n") |
| |
| cfg(report_segs_sort_full_CFG, "segs_sort_full", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_SEGS_SORT_FULL, vsn(2, 2, 158), NULL, 0, NULL, |
| "List of columns to sort by when reporting lvm fullreport's 'seg' subreport.\n" |
| "See 'lvs --segments -o help' for the list of possible fields.\n") |
| |
| cfg(report_mark_hidden_devices_CFG, "mark_hidden_devices", report_CFG_SECTION, CFG_PROFILABLE | CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 1, vsn(2, 2, 140), NULL, 0, NULL, |
| "Use brackets [] to mark hidden devices.\n") |
| |
| cfg(report_two_word_unknown_device_CFG, "two_word_unknown_device", report_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(2, 2, 146), NULL, 0, NULL, |
| "Use the two words 'unknown device' in place of '[unknown]'.\n" |
| "This is displayed when the device for a PV is not known.\n") |
| |
| cfg(dmeventd_mirror_library_CFG, "mirror_library", dmeventd_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_DMEVENTD_MIRROR_LIB, vsn(1, 2, 3), NULL, 0, NULL, |
| "The library dmeventd uses when monitoring a mirror device.\n" |
| "libdevmapper-event-lvm2mirror.so attempts to recover from\n" |
| "failures. It removes failed devices from a volume group and\n" |
| "reconfigures a mirror as necessary. If no mirror library is\n" |
| "provided, mirrors are not monitored through dmeventd.\n") |
| |
| cfg(dmeventd_raid_library_CFG, "raid_library", dmeventd_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_DMEVENTD_RAID_LIB, vsn(2, 2, 87), NULL, 0, NULL, NULL) |
| |
| cfg(dmeventd_snapshot_library_CFG, "snapshot_library", dmeventd_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_DMEVENTD_SNAPSHOT_LIB, vsn(1, 2, 26), NULL, 0, NULL, |
| "The library dmeventd uses when monitoring a snapshot device.\n" |
| "libdevmapper-event-lvm2snapshot.so monitors the filling of snapshots\n" |
| "and emits a warning through syslog when the usage exceeds 80%. The\n" |
| "warning is repeated when 85%, 90% and 95% of the snapshot is filled.\n") |
| |
| cfg(dmeventd_thin_library_CFG, "thin_library", dmeventd_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_DMEVENTD_THIN_LIB, vsn(2, 2, 89), NULL, 0, NULL, |
| "The library dmeventd uses when monitoring a thin device.\n" |
| "libdevmapper-event-lvm2thin.so monitors the filling of a pool\n" |
| "and emits a warning through syslog when the usage exceeds 80%. The\n" |
| "warning is repeated when 85%, 90% and 95% of the pool is filled.\n") |
| |
| cfg(dmeventd_executable_CFG, "executable", dmeventd_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_DMEVENTD_PATH, vsn(2, 2, 73), "@DMEVENTD_PATH@", 0, NULL, |
| "The full path to the dmeventd binary.\n") |
| |
| cfg(tags_hosttags_CFG, "hosttags", tags_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_HOSTTAGS, vsn(1, 0, 18), NULL, 0, NULL, |
| "Create a host tag using the machine name.\n" |
| "The machine name is nodename returned by uname(2).\n") |
| |
| cfg_section(tag_CFG_SUBSECTION, "tag", tags_CFG_SECTION, CFG_NAME_VARIABLE | CFG_DEFAULT_COMMENTED, vsn(1, 0, 18), 0, NULL, |
| "Replace this subsection name with a custom tag name.\n" |
| "Multiple subsections like this can be created. The '@' prefix for\n" |
| "tags is optional. This subsection can contain host_list, which is a\n" |
| "list of machine names. If the name of the local machine is found in\n" |
| "host_list, then the name of this subsection is used as a tag and is\n" |
| "applied to the local machine as a 'host tag'. If this subsection is\n" |
| "empty (has no host_list), then the subsection name is always applied\n" |
| "as a 'host tag'.\n" |
| "#\n" |
| "Example\n" |
| "The host tag foo is given to all hosts, and the host tag\n" |
| "bar is given to the hosts named machine1 and machine2.\n" |
| "tags { foo { } bar { host_list = [ \"machine1\", \"machine2\" ] } }\n" |
| "#\n") |
| |
| cfg_array(tag_host_list_CFG, "host_list", tag_CFG_SUBSECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 18), NULL, 0, NULL, |
| "A list of machine names.\n" |
| "These machine names are compared to the nodename returned\n" |
| "by uname(2). If the local machine name matches an entry in\n" |
| "this list, the name of the subsection is applied to the\n" |
| "machine as a 'host tag'.\n") |
| |
| cfg(local_system_id_CFG, "system_id", local_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, NULL, vsn(2, 2, 117), NULL, 0, NULL, |
| "Defines the local system ID for lvmlocal mode.\n" |
| "This is used when global/system_id_source is set to 'lvmlocal' in the\n" |
| "main configuration file, e.g. lvm.conf. When used, it must be set to\n" |
| "a unique value among all hosts sharing access to the storage,\n" |
| "e.g. a host name.\n" |
| "#\n" |
| "Example\n" |
| "Set no system ID:\n" |
| "system_id = \"\"\n" |
| "Set the system_id to a specific name:\n" |
| "system_id = \"host1\"\n" |
| "#\n") |
| |
| cfg_array(local_extra_system_ids_CFG, "extra_system_ids", local_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(2, 2, 117), NULL, 0, NULL, |
| "A list of extra VG system IDs the local host can access.\n" |
| "VGs with the system IDs listed here (in addition to the host's own\n" |
| "system ID) can be fully accessed by the local host. (These are\n" |
| "system IDs that the host sees in VGs, not system IDs that identify\n" |
| "the local host, which is determined by system_id_source.)\n" |
| "Use this only after consulting 'man lvmsystemid' to be certain of\n" |
| "correct usage and possible dangers.\n") |
| |
| cfg(local_host_id_CFG, "host_id", local_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 0, vsn(2, 2, 124), NULL, 0, NULL, |
| "The lvmlockd sanlock host_id.\n" |
| "This must be unique among all hosts, and must be between 1 and 2000.\n" |
| "Applicable only if LVM is compiled with lockd support\n") |
| |
| cfg(CFG_COUNT, NULL, root_CFG_SECTION, 0, CFG_TYPE_INT, 0, vsn(0, 0, 0), NULL, 0, NULL, NULL) |