diff --git a/linux/files/lvm.conf b/linux/files/lvm.conf
new file mode 100644
index 0000000..a45aed4
--- /dev/null
+++ b/linux/files/lvm.conf
@@ -0,0 +1,1891 @@
+{%- from "linux/map.jinja" import storage with context %}
+# This is an example configuration file for the LVM2 system.
+# It contains the default settings that would be used if there was no
+# /etc/lvm/lvm.conf file.
+#
+# Refer to 'man lvm.conf' for further information including the file layout.
+#
+# Refer to 'man lvm.conf' for information about how settings configured in
+# this file are combined with built-in values and command line options to
+# arrive at the final values used by LVM.
+#
+# Refer to 'man lvmconfig' for information about displaying the built-in
+# and configured values used by LVM.
+#
+# If a default value is set in this file (not commented out), then a
+# new version of LVM using this file will continue using that value,
+# even if the new version of LVM changes the built-in default value.
+#
+# To put this file in a different directory and override /etc/lvm set
+# the environment variable LVM_SYSTEM_DIR before running the tools.
+#
+# N.B. Take care that each setting only appears once if uncommenting
+# example settings in this file.
+
+
+# Configuration section config.
+# How LVM configuration settings are handled.
+config {
+
+        # Configuration option config/checks.
+        # If enabled, any LVM configuration mismatch is reported.
+        # This implies checking that the configuration key is understood by
+        # LVM and that the value of the key is the proper type. If disabled,
+        # any configuration mismatch is ignored and the default value is used
+        # without any warning (a message about the configuration key not being
+        # found is issued in verbose mode only).
+        checks = 1
+
+        # Configuration option config/abort_on_errors.
+        # Abort the LVM process if a configuration mismatch is found.
+        abort_on_errors = 0
+
+        # Configuration option config/profile_dir.
+        # Directory where LVM looks for configuration profiles.
+        profile_dir = "/etc/lvm/profile"
+}
+
+# Configuration section devices.
+# How LVM uses block devices.
+devices {
+
+        # Configuration option devices/dir.
+        # Directory in which to create volume group device nodes.
+        # Commands also accept this as a prefix on volume group names.
+        # This configuration option is advanced.
+        dir = "/dev"
+
+        # Configuration option devices/scan.
+        # Directories containing device nodes to use with LVM.
+        # This configuration option is advanced.
+        scan = [ "/dev" ]
+
+        # Configuration option devices/obtain_device_list_from_udev.
+        # Obtain the list of available devices from udev.
+        # This avoids opening or using any inapplicable non-block devices or
+        # subdirectories found in the udev directory. Any device node or
+        # symlink not managed by udev in the udev directory is ignored. This
+        # setting applies only to the udev-managed device directory; other
+        # directories will be scanned fully. LVM needs to be compiled with
+        # udev support for this setting to apply.
+        obtain_device_list_from_udev = 1
+
+        # Configuration option devices/external_device_info_source.
+        # Select an external device information source.
+        # Some information may already be available in the system and LVM can
+        # use this information to determine the exact type or use of devices it
+        # processes. Using an existing external device information source can
+        # speed up device processing as LVM does not need to run its own native
+        # routines to acquire this information. For example, this information
+        # is used to drive LVM filtering like MD component detection, multipath
+        # component detection, partition detection and others.
+        # 
+        # Accepted values:
+        #   none
+        #     No external device information source is used.
+        #   udev
+        #     Reuse existing udev database records. Applicable only if LVM is
+        #     compiled with udev support.
+        # 
+        external_device_info_source = "none"
+
+        # Configuration option devices/preferred_names.
+        # Select which path name to display for a block device.
+        # If multiple path names exist for a block device, and LVM needs to
+        # display a name for the device, the path names are matched against
+        # each item in this list of regular expressions. The first match is
+        # used. Try to avoid using undescriptive /dev/dm-N names, if present.
+        # If no preferred name matches, or if preferred_names are not defined,
+        # the following built-in preferences are applied in order until one
+        # produces a preferred name:
+        # Prefer names with path prefixes in the order of:
+        # /dev/mapper, /dev/disk, /dev/dm-*, /dev/block.
+        # Prefer the name with the least number of slashes.
+        # Prefer a name that is a symlink.
+        # Prefer the path with least value in lexicographical order.
+        # 
+        # Example
+        # preferred_names = [ "^/dev/mpath/", "^/dev/mapper/mpath", "^/dev/[hs]d" ]
+        # 
+        # This configuration option does not have a default value defined.
+
+        # Configuration option devices/filter.
+        # Limit the block devices that are used by LVM commands.
+        # This is a list of regular expressions used to accept or reject block
+        # device path names. Each regex is delimited by a vertical bar '|'
+        # (or any character) and is preceded by 'a' to accept the path, or
+        # by 'r' to reject the path. The first regex in the list to match the
+        # path is used, producing the 'a' or 'r' result for the device.
+        # When multiple path names exist for a block device, if any path name
+        # matches an 'a' pattern before an 'r' pattern, then the device is
+        # accepted. If all the path names match an 'r' pattern first, then the
+        # device is rejected. Unmatching path names do not affect the accept
+        # or reject decision. If no path names for a device match a pattern,
+        # then the device is accepted. Be careful mixing 'a' and 'r' patterns,
+        # as the combination might produce unexpected results (test changes.)
+        # Run vgscan after changing the filter to regenerate the cache.
+        # See the use_lvmetad comment for a special case regarding filters.
+        # 
+        # Example
+        # Accept every block device:
+
+        filter = [ "r|/dev/sd.*|","r|/dev/mapper/.*|","r|/dev/.*/by-id/.*|", "r|/dev/.*/by-path/.*|" ]
+
+        # filter = [ "a|.*/|" ]
+        # Reject the cdrom drive:
+        # filter = [ "r|/dev/cdrom|" ]
+        # Work with just loopback devices, e.g. for testing:
+        # filter = [ "a|loop|", "r|.*|" ]
+        # Accept all loop devices and ide drives except hdc:
+        # filter = [ "a|loop|", "r|/dev/hdc|", "a|/dev/ide|", "r|.*|" ]
+        # Use anchors to be very specific:
+        # filter = [ "a|^/dev/hda8$|", "r|.*/|" ]
+        # 
+        # This configuration option has an automatic default value.
+        # filter = [ "a|.*/|" ]
+
+        # Configuration option devices/global_filter.
+        # Limit the block devices that are used by LVM system components.
+        # Because devices/filter may be overridden from the command line, it is
+        # not suitable for system-wide device filtering, e.g. udev and lvmetad.
+        # Use global_filter to hide devices from these LVM system components.
+        # The syntax is the same as devices/filter. Devices rejected by
+        # global_filter are not opened by LVM.
+        # This configuration option has an automatic default value.
+        # global_filter = [ "a|.*/|" ]
+
+        # Configuration option devices/cache_dir.
+        # Directory in which to store the device cache file.
+        # The results of filtering are cached on disk to avoid rescanning dud
+        # devices (which can take a very long time). By default this cache is
+        # stored in a file named .cache. It is safe to delete this file; the
+        # tools regenerate it. If obtain_device_list_from_udev is enabled, the
+        # list of devices is obtained from udev and any existing .cache file
+        # is removed.
+        cache_dir = "/run/lvm"
+
+        # Configuration option devices/cache_file_prefix.
+        # A prefix used before the .cache file name. See devices/cache_dir.
+        cache_file_prefix = ""
+
+        # Configuration option devices/write_cache_state.
+        # Enable/disable writing the cache file. See devices/cache_dir.
+        write_cache_state = 1
+
+        # Configuration option devices/types.
+        # List of additional acceptable block device types.
+        # These are of device type names from /proc/devices, followed by the
+        # maximum number of partitions.
+        # 
+        # Example
+        # types = [ "fd", 16 ]
+        # 
+        # This configuration option is advanced.
+        # This configuration option does not have a default value defined.
+
+        # Configuration option devices/sysfs_scan.
+        # Restrict device scanning to block devices appearing in sysfs.
+        # This is a quick way of filtering out block devices that are not
+        # present on the system. sysfs must be part of the kernel and mounted.)
+        sysfs_scan = 1
+
+        # Configuration option devices/multipath_component_detection.
+        # Ignore devices that are components of DM multipath devices.
+        multipath_component_detection = 1
+
+        # Configuration option devices/md_component_detection.
+        # Ignore devices that are components of software RAID (md) devices.
+        md_component_detection = 1
+
+        # Configuration option devices/fw_raid_component_detection.
+        # Ignore devices that are components of firmware RAID devices.
+        # LVM must use an external_device_info_source other than none for this
+        # detection to execute.
+        fw_raid_component_detection = 0
+
+        # Configuration option devices/md_chunk_alignment.
+        # Align PV data blocks with md device's stripe-width.
+        # This applies if a PV is placed directly on an md device.
+        md_chunk_alignment = 1
+
+        # Configuration option devices/default_data_alignment.
+        # Default alignment of the start of a PV data area in MB.
+        # If set to 0, a value of 64KiB will be used.
+        # Set to 1 for 1MiB, 2 for 2MiB, etc.
+        # This configuration option has an automatic default value.
+        # default_data_alignment = 1
+
+        # Configuration option devices/data_alignment_detection.
+        # Detect PV data alignment based on sysfs device information.
+        # The start of a PV data area will be a multiple of minimum_io_size or
+        # optimal_io_size exposed in sysfs. minimum_io_size is the smallest
+        # request the device can perform without incurring a read-modify-write
+        # penalty, e.g. MD chunk size. optimal_io_size is the device's
+        # preferred unit of receiving I/O, e.g. MD stripe width.
+        # minimum_io_size is used if optimal_io_size is undefined (0).
+        # If md_chunk_alignment is enabled, that detects the optimal_io_size.
+        # This setting takes precedence over md_chunk_alignment.
+        data_alignment_detection = 1
+
+        # Configuration option devices/data_alignment.
+        # Alignment of the start of a PV data area in KiB.
+        # If a PV is placed directly on an md device and md_chunk_alignment or
+        # data_alignment_detection are enabled, then this setting is ignored.
+        # Otherwise, md_chunk_alignment and data_alignment_detection are
+        # disabled if this is set. Set to 0 to use the default alignment or the
+        # page size, if larger.
+        data_alignment = 0
+
+        # Configuration option devices/data_alignment_offset_detection.
+        # Detect PV data alignment offset based on sysfs device information.
+        # The start of a PV aligned data area will be shifted by the
+        # alignment_offset exposed in sysfs. This offset is often 0, but may
+        # be non-zero. Certain 4KiB sector drives that compensate for windows
+        # partitioning will have an alignment_offset of 3584 bytes (sector 7
+        # is the lowest aligned logical block, the 4KiB sectors start at
+        # LBA -1, and consequently sector 63 is aligned on a 4KiB boundary).
+        # pvcreate --dataalignmentoffset will skip this detection.
+        data_alignment_offset_detection = 1
+
+        # Configuration option devices/ignore_suspended_devices.
+        # Ignore DM devices that have I/O suspended while scanning devices.
+        # Otherwise, LVM waits for a suspended device to become accessible.
+        # This should only be needed in recovery situations.
+        ignore_suspended_devices = 0
+
+        # Configuration option devices/ignore_lvm_mirrors.
+        # Do not scan 'mirror' LVs to avoid possible deadlocks.
+        # This avoids possible deadlocks when using the 'mirror' segment type.
+        # This setting determines whether LVs using the 'mirror' segment type
+        # are scanned for LVM labels. This affects the ability of mirrors to
+        # be used as physical volumes. If this setting is enabled, it is
+        # impossible to create VGs on top of mirror LVs, i.e. to stack VGs on
+        # mirror LVs. If this setting is disabled, allowing mirror LVs to be
+        # scanned, it may cause LVM processes and I/O to the mirror to become
+        # blocked. This is due to the way that the mirror segment type handles
+        # failures. In order for the hang to occur, an LVM command must be run
+        # just after a failure and before the automatic LVM repair process
+        # takes place, or there must be failures in multiple mirrors in the
+        # same VG at the same time with write failures occurring moments before
+        # a scan of the mirror's labels. The 'mirror' scanning problems do not
+        # apply to LVM RAID types like 'raid1' which handle failures in a
+        # different way, making them a better choice for VG stacking.
+        ignore_lvm_mirrors = 1
+
+        # Configuration option devices/disable_after_error_count.
+        # Number of I/O errors after which a device is skipped.
+        # During each LVM operation, errors received from each device are
+        # counted. If the counter of a device exceeds the limit set here,
+        # no further I/O is sent to that device for the remainder of the
+        # operation. Setting this to 0 disables the counters altogether.
+        disable_after_error_count = 0
+
+        # Configuration option devices/require_restorefile_with_uuid.
+        # Allow use of pvcreate --uuid without requiring --restorefile.
+        require_restorefile_with_uuid = 1
+
+        # Configuration option devices/pv_min_size.
+        # Minimum size in KiB of block devices which can be used as PVs.
+        # In a clustered environment all nodes must use the same value.
+        # Any value smaller than 512KiB is ignored. The previous built-in
+        # value was 512.
+        pv_min_size = 2048
+
+        # Configuration option devices/issue_discards.
+        # Issue discards to PVs that are no longer used by an LV.
+        # Discards are sent to an LV's underlying physical volumes when the LV
+        # is no longer using the physical volumes' space, e.g. lvremove,
+        # lvreduce. Discards inform the storage that a region is no longer
+        # used. Storage that supports discards advertise the protocol-specific
+        # way discards should be issued by the kernel (TRIM, UNMAP, or
+        # WRITE SAME with UNMAP bit set). Not all storage will support or
+        # benefit from discards, but SSDs and thinly provisioned LUNs
+        # generally do. If enabled, discards will only be issued if both the
+        # storage and kernel provide support.
+        issue_discards = 1
+}
+
+# Configuration section allocation.
+# How LVM selects space and applies properties to LVs.
+allocation {
+
+        # Configuration option allocation/cling_tag_list.
+        # Advise LVM which PVs to use when searching for new space.
+        # When searching for free space to extend an LV, the 'cling' allocation
+        # policy will choose space on the same PVs as the last segment of the
+        # existing LV. If there is insufficient space and a list of tags is
+        # defined here, it will check whether any of them are attached to the
+        # PVs concerned and then seek to match those PV tags between existing
+        # extents and new extents.
+        # 
+        # Example
+        # Use the special tag "@*" as a wildcard to match any PV tag:
+        # cling_tag_list = [ "@*" ]
+        # LVs are mirrored between two sites within a single VG, and
+        # PVs are tagged with either @site1 or @site2 to indicate where
+        # they are situated:
+        # cling_tag_list = [ "@site1", "@site2" ]
+        # 
+        # This configuration option does not have a default value defined.
+
+        # Configuration option allocation/maximise_cling.
+        # Use a previous allocation algorithm.
+        # Changes made in version 2.02.85 extended the reach of the 'cling'
+        # policies to detect more situations where data can be grouped onto
+        # the same disks. This setting can be used to disable the changes
+        # and revert to the previous algorithm.
+        maximise_cling = 1
+
+        # Configuration option allocation/use_blkid_wiping.
+        # Use blkid to detect existing signatures on new PVs and LVs.
+        # The blkid library can detect more signatures than the native LVM
+        # detection code, but may take longer. LVM needs to be compiled with
+        # blkid wiping support for this setting to apply. LVM native detection
+        # code is currently able to recognize: MD device signatures,
+        # swap signature, and LUKS signatures. To see the list of signatures
+        # recognized by blkid, check the output of the 'blkid -k' command.
+        use_blkid_wiping = 1
+
+        # Configuration option allocation/wipe_signatures_when_zeroing_new_lvs.
+        # Look for and erase any signatures while zeroing a new LV.
+        # The --wipesignatures option overrides this setting.
+        # Zeroing is controlled by the -Z/--zero option, and if not specified,
+        # zeroing is used by default if possible. Zeroing simply overwrites the
+        # first 4KiB of a new LV with zeroes and does no signature detection or
+        # wiping. Signature wiping goes beyond zeroing and detects exact types
+        # and positions of signatures within the whole LV. It provides a
+        # cleaner LV after creation as all known signatures are wiped. The LV
+        # is not claimed incorrectly by other tools because of old signatures
+        # from previous use. The number of signatures that LVM can detect
+        # depends on the detection code that is selected (see
+        # use_blkid_wiping.) Wiping each detected signature must be confirmed.
+        # When this setting is disabled, signatures on new LVs are not detected
+        # or erased unless the --wipesignatures option is used directly.
+        wipe_signatures_when_zeroing_new_lvs = 1
+
+        # Configuration option allocation/mirror_logs_require_separate_pvs.
+        # Mirror logs and images will always use different PVs.
+        # The default setting changed in version 2.02.85.
+        mirror_logs_require_separate_pvs = 0
+
+        # Configuration option allocation/cache_pool_metadata_require_separate_pvs.
+        # Cache pool metadata and data will always use different PVs.
+        cache_pool_metadata_require_separate_pvs = 0
+
+        # Configuration option allocation/cache_mode.
+        # The default cache mode used for new cache.
+        # 
+        # Accepted values:
+        #   writethrough
+        #     Data blocks are immediately written from the cache to disk.
+        #   writeback
+        #     Data blocks are written from the cache back to disk after some
+        #     delay to improve performance.
+        # 
+        # This setting replaces allocation/cache_pool_cachemode.
+        # This configuration option has an automatic default value.
+        # cache_mode = "writethrough"
+
+        # Configuration option allocation/cache_policy.
+        # The default cache policy used for new cache volume.
+        # Since kernel 4.2 the default policy is smq (Stochastic multique),
+        # otherwise the older mq (Multiqueue) policy is selected.
+        # This configuration option does not have a default value defined.
+
+        # Configuration section allocation/cache_settings.
+        # Settings for the cache policy.
+        # See documentation for individual cache policies for more info.
+        # This configuration section has an automatic default value.
+        # cache_settings {
+        # }
+
+        # Configuration option allocation/cache_pool_chunk_size.
+        # The minimal chunk size in KiB for cache pool volumes.
+        # Using a chunk_size that is too large can result in wasteful use of
+        # the cache, where small reads and writes can cause large sections of
+        # an LV to be mapped into the cache. However, choosing a chunk_size
+        # that is too small can result in more overhead trying to manage the
+        # numerous chunks that become mapped into the cache. The former is
+        # more of a problem than the latter in most cases, so the default is
+        # on the smaller end of the spectrum. Supported values range from
+        # 32KiB to 1GiB in multiples of 32.
+        # This configuration option does not have a default value defined.
+
+        # Configuration option allocation/thin_pool_metadata_require_separate_pvs.
+        # Thin pool metdata and data will always use different PVs.
+        thin_pool_metadata_require_separate_pvs = 0
+
+        # Configuration option allocation/thin_pool_zero.
+        # Thin pool data chunks are zeroed before they are first used.
+        # Zeroing with a larger thin pool chunk size reduces performance.
+        # This configuration option has an automatic default value.
+        # thin_pool_zero = 1
+
+        # Configuration option allocation/thin_pool_discards.
+        # The discards behaviour of thin pool volumes.
+        # 
+        # Accepted values:
+        #   ignore
+        #   nopassdown
+        #   passdown
+        # 
+        # This configuration option has an automatic default value.
+        # thin_pool_discards = "passdown"
+
+        # Configuration option allocation/thin_pool_chunk_size_policy.
+        # The chunk size calculation policy for thin pool volumes.
+        # 
+        # Accepted values:
+        #   generic
+        #     If thin_pool_chunk_size is defined, use it. Otherwise, calculate
+        #     the chunk size based on estimation and device hints exposed in
+        #     sysfs - the minimum_io_size. The chunk size is always at least
+        #     64KiB.
+        #   performance
+        #     If thin_pool_chunk_size is defined, use it. Otherwise, calculate
+        #     the chunk size for performance based on device hints exposed in
+        #     sysfs - the optimal_io_size. The chunk size is always at least
+        #     512KiB.
+        # 
+        # This configuration option has an automatic default value.
+        # thin_pool_chunk_size_policy = "generic"
+
+        # Configuration option allocation/thin_pool_chunk_size.
+        # The minimal chunk size in KiB for thin pool volumes.
+        # Larger chunk sizes may improve performance for plain thin volumes,
+        # however using them for snapshot volumes is less efficient, as it
+        # consumes more space and takes extra time for copying. When unset,
+        # lvm tries to estimate chunk size starting from 64KiB. Supported
+        # values are in the range 64KiB to 1GiB.
+        # This configuration option does not have a default value defined.
+
+        # Configuration option allocation/physical_extent_size.
+        # Default physical extent size in KiB to use for new VGs.
+        # This configuration option has an automatic default value.
+        # physical_extent_size = 4096
+}
+
+# Configuration section log.
+# How LVM log information is reported.
+log {
+
+        # Configuration option log/verbose.
+        # Controls the messages sent to stdout or stderr.
+        verbose = 0
+
+        # Configuration option log/silent.
+        # Suppress all non-essential messages from stdout.
+        # This has the same effect as -qq. When enabled, the following commands
+        # still produce output: dumpconfig, lvdisplay, lvmdiskscan, lvs, pvck,
+        # pvdisplay, pvs, version, vgcfgrestore -l, vgdisplay, vgs.
+        # Non-essential messages are shifted from log level 4 to log level 5
+        # for syslog and lvm2_log_fn purposes.
+        # Any 'yes' or 'no' questions not overridden by other arguments are
+        # suppressed and default to 'no'.
+        silent = 0
+
+        # Configuration option log/syslog.
+        # Send log messages through syslog.
+        syslog = 1
+
+        # Configuration option log/file.
+        # Write error and debug log messages to a file specified here.
+        # This configuration option does not have a default value defined.
+
+        # Configuration option log/overwrite.
+        # Overwrite the log file each time the program is run.
+        overwrite = 0
+
+        # Configuration option log/level.
+        # The level of log messages that are sent to the log file or syslog.
+        # There are 6 syslog-like log levels currently in use: 2 to 7 inclusive.
+        # 7 is the most verbose (LOG_DEBUG).
+        level = 0
+
+        # Configuration option log/indent.
+        # Indent messages according to their severity.
+        indent = 1
+
+        # Configuration option log/command_names.
+        # Display the command name on each line of output.
+        command_names = 0
+
+        # Configuration option log/prefix.
+        # A prefix to use before the log message text.
+        # (After the command name, if selected).
+        # Two spaces allows you to see/grep the severity of each message.
+        # To make the messages look similar to the original LVM tools use:
+        # indent = 0, command_names = 1, prefix = " -- "
+        prefix = "  "
+
+        # Configuration option log/activation.
+        # Log messages during activation.
+        # Don't use this in low memory situations (can deadlock).
+        activation = 0
+
+        # Configuration option log/debug_classes.
+        # Select log messages by class.
+        # Some debugging messages are assigned to a class and only appear in
+        # debug output if the class is listed here. Classes currently
+        # available: memory, devices, activation, allocation, lvmetad,
+        # metadata, cache, locking, lvmpolld. Use "all" to see everything.
+        debug_classes = [ "memory", "devices", "activation", "allocation", "lvmetad", "metadata", "cache", "locking", "lvmpolld" ]
+}
+
+# Configuration section backup.
+# How LVM metadata is backed up and archived.
+# In LVM, a 'backup' is a copy of the metadata for the current system,
+# and an 'archive' contains old metadata configurations. They are
+# stored in a human readable text format.
+backup {
+
+        # Configuration option backup/backup.
+        # Maintain a backup of the current metadata configuration.
+        # Think very hard before turning this off!
+        backup = 1
+
+        # Configuration option backup/backup_dir.
+        # Location of the metadata backup files.
+        # Remember to back up this directory regularly!
+        backup_dir = "/etc/lvm/backup"
+
+        # Configuration option backup/archive.
+        # Maintain an archive of old metadata configurations.
+        # Think very hard before turning this off.
+        archive = 1
+
+        # Configuration option backup/archive_dir.
+        # Location of the metdata archive files.
+        # Remember to back up this directory regularly!
+        archive_dir = "/etc/lvm/archive"
+
+        # Configuration option backup/retain_min.
+        # Minimum number of archives to keep.
+        retain_min = 10
+
+        # Configuration option backup/retain_days.
+        # Minimum number of days to keep archive files.
+        retain_days = 30
+}
+
+# Configuration section shell.
+# Settings for running LVM in shell (readline) mode.
+shell {
+
+        # Configuration option shell/history_size.
+        # Number of lines of history to store in ~/.lvm_history.
+        history_size = 100
+}
+
+# Configuration section global.
+# Miscellaneous global LVM settings.
+global {
+
+        # Configuration option global/umask.
+        # The file creation mask for any files and directories created.
+        # Interpreted as octal if the first digit is zero.
+        umask = 077
+
+        # Configuration option global/test.
+        # No on-disk metadata changes will be made in test mode.
+        # Equivalent to having the -t option on every command.
+        test = 0
+
+        # Configuration option global/units.
+        # Default value for --units argument.
+        units = "h"
+
+        # Configuration option global/si_unit_consistency.
+        # Distinguish between powers of 1024 and 1000 bytes.
+        # The LVM commands distinguish between powers of 1024 bytes,
+        # e.g. KiB, MiB, GiB, and powers of 1000 bytes, e.g. KB, MB, GB.
+        # If scripts depend on the old behaviour, disable this setting
+        # temporarily until they are updated.
+        si_unit_consistency = 1
+
+        # Configuration option global/suffix.
+        # Display unit suffix for sizes.
+        # This setting has no effect if the units are in human-readable form
+        # (global/units = "h") in which case the suffix is always displayed.
+        suffix = 1
+
+        # Configuration option global/activation.
+        # Enable/disable communication with the kernel device-mapper.
+        # Disable to use the tools to manipulate LVM metadata without
+        # activating any logical volumes. If the device-mapper driver
+        # is not present in the kernel, disabling this should suppress
+        # the error messages.
+        activation = 1
+
+        # Configuration option global/fallback_to_lvm1.
+        # Try running LVM1 tools if LVM cannot communicate with DM.
+        # This option only applies to 2.4 kernels and is provided to help
+        # switch between device-mapper kernels and LVM1 kernels. The LVM1
+        # tools need to be installed with .lvm1 suffices, e.g. vgscan.lvm1.
+        # They will stop working once the lvm2 on-disk metadata format is used.
+        # This configuration option has an automatic default value.
+        # fallback_to_lvm1 = 0
+
+        # Configuration option global/format.
+        # The default metadata format that commands should use.
+        # The -M 1|2 option overrides this setting.
+        # 
+        # Accepted values:
+        #   lvm1
+        #   lvm2
+        # 
+        # This configuration option has an automatic default value.
+        # format = "lvm2"
+
+        # Configuration option global/format_libraries.
+        # Shared libraries that process different metadata formats.
+        # If support for LVM1 metadata was compiled as a shared library use
+        # format_libraries = "liblvm2format1.so"
+        # This configuration option does not have a default value defined.
+
+        # Configuration option global/segment_libraries.
+        # This configuration option does not have a default value defined.
+
+        # Configuration option global/proc.
+        # Location of proc filesystem.
+        # This configuration option is advanced.
+        proc = "/proc"
+
+        # Configuration option global/etc.
+        # Location of /etc system configuration directory.
+        etc = "/etc"
+
+        # Configuration option global/locking_type.
+        # Type of locking to use.
+        # 
+        # Accepted values:
+        #   0
+        #     Turns off locking. Warning: this risks metadata corruption if
+        #     commands run concurrently.
+        #   1
+        #     LVM uses local file-based locking, the standard mode.
+        #   2
+        #     LVM uses the external shared library locking_library.
+        #   3
+        #     LVM uses built-in clustered locking with clvmd.
+        #     This is incompatible with lvmetad. If use_lvmetad is enabled,
+        #     LVM prints a warning and disables lvmetad use.
+        #   4
+        #     LVM uses read-only locking which forbids any operations that
+        #     might change metadata.
+        #   5
+        #     Offers dummy locking for tools that do not need any locks.
+        #     You should not need to set this directly; the tools will select
+        #     when to use it instead of the configured locking_type.
+        #     Do not use lvmetad or the kernel device-mapper driver with this
+        #     locking type. It is used by the --readonly option that offers
+        #     read-only access to Volume Group metadata that cannot be locked
+        #     safely because it belongs to an inaccessible domain and might be
+        #     in use, for example a virtual machine image or a disk that is
+        #     shared by a clustered machine.
+        # 
+        locking_type = 1
+
+        # Configuration option global/wait_for_locks.
+        # When disabled, fail if a lock request would block.
+        wait_for_locks = 1
+
+        # Configuration option global/fallback_to_clustered_locking.
+        # Attempt to use built-in cluster locking if locking_type 2 fails.
+        # If using external locking (type 2) and initialisation fails, with
+        # this enabled, an attempt will be made to use the built-in clustered
+        # locking. Disable this if using a customised locking_library.
+        fallback_to_clustered_locking = 1
+
+        # Configuration option global/fallback_to_local_locking.
+        # Use locking_type 1 (local) if locking_type 2 or 3 fail.
+        # If an attempt to initialise type 2 or type 3 locking failed, perhaps
+        # because cluster components such as clvmd are not running, with this
+        # enabled, an attempt will be made to use local file-based locking
+        # (type 1). If this succeeds, only commands against local VGs will
+        # proceed. VGs marked as clustered will be ignored.
+        fallback_to_local_locking = 1
+
+        # Configuration option global/locking_dir.
+        # Directory to use for LVM command file locks.
+        # Local non-LV directory that holds file-based locks while commands are
+        # in progress. A directory like /tmp that may get wiped on reboot is OK.
+        locking_dir = "/run/lock/lvm"
+
+        # Configuration option global/prioritise_write_locks.
+        # Allow quicker VG write access during high volume read access.
+        # When there are competing read-only and read-write access requests for
+        # a volume group's metadata, instead of always granting the read-only
+        # requests immediately, delay them to allow the read-write requests to
+        # be serviced. Without this setting, write access may be stalled by a
+        # high volume of read-only requests. This option only affects
+        # locking_type 1 viz. local file-based locking.
+        prioritise_write_locks = 1
+
+        # Configuration option global/library_dir.
+        # Search this directory first for shared libraries.
+        # This configuration option does not have a default value defined.
+
+        # Configuration option global/locking_library.
+        # The external locking library to use for locking_type 2.
+        # This configuration option has an automatic default value.
+        # locking_library = "liblvm2clusterlock.so"
+
+        # Configuration option global/abort_on_internal_errors.
+        # Abort a command that encounters an internal error.
+        # Treat any internal errors as fatal errors, aborting the process that
+        # encountered the internal error. Please only enable for debugging.
+        abort_on_internal_errors = 0
+
+        # Configuration option global/detect_internal_vg_cache_corruption.
+        # Internal verification of VG structures.
+        # Check if CRC matches when a parsed VG is used multiple times. This
+        # is useful to catch unexpected changes to cached VG structures.
+        # Please only enable for debugging.
+        detect_internal_vg_cache_corruption = 0
+
+        # Configuration option global/metadata_read_only.
+        # No operations that change on-disk metadata are permitted.
+        # Additionally, read-only commands that encounter metadata in need of
+        # repair will still be allowed to proceed exactly as if the repair had
+        # been performed (except for the unchanged vg_seqno). Inappropriate
+        # use could mess up your system, so seek advice first!
+        metadata_read_only = 0
+
+        # Configuration option global/mirror_segtype_default.
+        # The segment type used by the short mirroring option -m.
+        # The --type mirror|raid1 option overrides this setting.
+        # 
+        # Accepted values:
+        #   mirror
+        #     The original RAID1 implementation from LVM/DM. It is
+        #     characterized by a flexible log solution (core, disk, mirrored),
+        #     and by the necessity to block I/O while handling a failure.
+        #     There is an inherent race in the dmeventd failure handling logic
+        #     with snapshots of devices using this type of RAID1 that in the
+        #     worst case could cause a deadlock. (Also see
+        #     devices/ignore_lvm_mirrors.)
+        #   raid1
+        #     This is a newer RAID1 implementation using the MD RAID1
+        #     personality through device-mapper. It is characterized by a
+        #     lack of log options. (A log is always allocated for every
+        #     device and they are placed on the same device as the image,
+        #     so no separate devices are required.) This mirror
+        #     implementation does not require I/O to be blocked while
+        #     handling a failure. This mirror implementation is not
+        #     cluster-aware and cannot be used in a shared (active/active)
+        #     fashion in a cluster.
+        # 
+        mirror_segtype_default = "raid1"
+
+        # Configuration option global/raid10_segtype_default.
+        # The segment type used by the -i -m combination.
+        # The --type raid10|mirror option overrides this setting.
+        # The --stripes/-i and --mirrors/-m options can both be specified
+        # during the creation of a logical volume to use both striping and
+        # mirroring for the LV. There are two different implementations.
+        # 
+        # Accepted values:
+        #   raid10
+        #     LVM uses MD's RAID10 personality through DM. This is the
+        #     preferred option.
+        #   mirror
+        #     LVM layers the 'mirror' and 'stripe' segment types. The layering
+        #     is done by creating a mirror LV on top of striped sub-LVs,
+        #     effectively creating a RAID 0+1 array. The layering is suboptimal
+        #     in terms of providing redundancy and performance.
+        # 
+        raid10_segtype_default = "raid10"
+
+        # Configuration option global/sparse_segtype_default.
+        # The segment type used by the -V -L combination.
+        # The --type snapshot|thin option overrides this setting.
+        # The combination of -V and -L options creates a sparse LV. There are
+        # two different implementations.
+        # 
+        # Accepted values:
+        #   snapshot
+        #     The original snapshot implementation from LVM/DM. It uses an old
+        #     snapshot that mixes data and metadata within a single COW
+        #     storage volume and performs poorly when the size of stored data
+        #     passes hundreds of MB.
+        #   thin
+        #     A newer implementation that uses thin provisioning. It has a
+        #     bigger minimal chunk size (64KiB) and uses a separate volume for
+        #     metadata. It has better performance, especially when more data
+        #     is used. It also supports full snapshots.
+        # 
+        sparse_segtype_default = "thin"
+
+        # Configuration option global/lvdisplay_shows_full_device_path.
+        # Enable this to reinstate the previous lvdisplay name format.
+        # The default format for displaying LV names in lvdisplay was changed
+        # in version 2.02.89 to show the LV name and path separately.
+        # Previously this was always shown as /dev/vgname/lvname even when that
+        # was never a valid path in the /dev filesystem.
+        # This configuration option has an automatic default value.
+        # lvdisplay_shows_full_device_path = 0
+
+        # Configuration option global/use_lvmetad.
+        # Use lvmetad to cache metadata and reduce disk scanning.
+        # When enabled (and running), lvmetad provides LVM commands with VG
+        # metadata and PV state. LVM commands then avoid reading this
+        # information from disks which can be slow. When disabled (or not
+        # running), LVM commands fall back to scanning disks to obtain VG
+        # metadata. lvmetad is kept updated via udev rules which must be set
+        # up for LVM to work correctly. (The udev rules should be installed
+        # by default.) Without a proper udev setup, changes in the system's
+        # block device configuration will be unknown to LVM, and ignored
+        # until a manual 'pvscan --cache' is run. If lvmetad was running
+        # while use_lvmetad was disabled, it must be stopped, use_lvmetad
+        # enabled, and then started. When using lvmetad, LV activation is
+        # switched to an automatic, event-based mode. In this mode, LVs are
+        # activated based on incoming udev events that inform lvmetad when
+        # PVs appear on the system. When a VG is complete (all PVs present),
+        # it is auto-activated. The auto_activation_volume_list setting
+        # controls which LVs are auto-activated (all by default.)
+        # When lvmetad is updated (automatically by udev events, or directly
+        # by pvscan --cache), devices/filter is ignored and all devices are
+        # scanned by default. lvmetad always keeps unfiltered information
+        # which is provided to LVM commands. Each LVM command then filters
+        # based on devices/filter. This does not apply to other, non-regexp,
+        # filtering settings: component filters such as multipath and MD
+        # are checked during pvscan --cache. To filter a device and prevent
+        # scanning from the LVM system entirely, including lvmetad, use
+        # devices/global_filter.
+        use_lvmetad = 1
+
+        # Configuration option global/use_lvmlockd.
+        # Use lvmlockd for locking among hosts using LVM on shared storage.
+        # See lvmlockd(8) for more information.
+        use_lvmlockd = 0
+
+        # Configuration option global/lvmlockd_lock_retries.
+        # Retry lvmlockd lock requests this many times.
+        # This configuration option has an automatic default value.
+        # lvmlockd_lock_retries = 3
+
+        # Configuration option global/sanlock_lv_extend.
+        # Size in MiB to extend the internal LV holding sanlock locks.
+        # The internal LV holds locks for each LV in the VG, and after enough
+        # LVs have been created, the internal LV needs to be extended. lvcreate
+        # will automatically extend the internal LV when needed by the amount
+        # specified here. Setting this to 0 disables the automatic extension
+        # and can cause lvcreate to fail.
+        # This configuration option has an automatic default value.
+        # sanlock_lv_extend = 256
+
+        # Configuration option global/thin_check_executable.
+        # The full path to the thin_check command.
+        # LVM uses this command to check that a thin metadata device is in a
+        # usable state. When a thin pool is activated and after it is
+        # deactivated, this command is run. Activation will only proceed if
+        # the command has an exit status of 0. Set to "" to skip this check.
+        # (Not recommended.) Also see thin_check_options.
+        # (See package device-mapper-persistent-data or thin-provisioning-tools)
+        # This configuration option has an automatic default value.
+        # thin_check_executable = "/usr/sbin/thin_check"
+
+        # Configuration option global/thin_dump_executable.
+        # The full path to the thin_dump command.
+        # LVM uses this command to dump thin pool metadata.
+        # (See package device-mapper-persistent-data or thin-provisioning-tools)
+        # This configuration option has an automatic default value.
+        # thin_dump_executable = "/usr/sbin/thin_dump"
+
+        # Configuration option global/thin_repair_executable.
+        # The full path to the thin_repair command.
+        # LVM uses this command to repair a thin metadata device if it is in
+        # an unusable state. Also see thin_repair_options.
+        # (See package device-mapper-persistent-data or thin-provisioning-tools)
+        # This configuration option has an automatic default value.
+        # thin_repair_executable = "/usr/sbin/thin_repair"
+
+        # Configuration option global/thin_check_options.
+        # List of options passed to the thin_check command.
+        # With thin_check version 2.1 or newer you can add the option
+        # --ignore-non-fatal-errors to let it pass through ignorable errors
+        # and fix them later. With thin_check version 3.2 or newer you should
+        # include the option --clear-needs-check-flag.
+        # This configuration option has an automatic default value.
+        # thin_check_options = [ "-q", "--clear-needs-check-flag" ]
+
+        # Configuration option global/thin_repair_options.
+        # List of options passed to the thin_repair command.
+        # This configuration option has an automatic default value.
+        # thin_repair_options = [ "" ]
+
+        # Configuration option global/thin_disabled_features.
+        # Features to not use in the thin driver.
+        # This can be helpful for testing, or to avoid using a feature that is
+        # causing problems. Features include: block_size, discards,
+        # discards_non_power_2, external_origin, metadata_resize,
+        # external_origin_extend, error_if_no_space.
+        # 
+        # Example
+        # thin_disabled_features = [ "discards", "block_size" ]
+        # 
+        # This configuration option does not have a default value defined.
+
+        # Configuration option global/cache_disabled_features.
+        # Features to not use in the cache driver.
+        # This can be helpful for testing, or to avoid using a feature that is
+        # causing problems. Features include: policy_mq, policy_smq.
+        # 
+        # Example
+        # cache_disabled_features = [ "policy_smq" ]
+        # 
+        # This configuration option does not have a default value defined.
+
+        # Configuration option global/cache_check_executable.
+        # The full path to the cache_check command.
+        # LVM uses this command to check that a cache metadata device is in a
+        # usable state. When a cached LV is activated and after it is
+        # deactivated, this command is run. Activation will only proceed if the
+        # command has an exit status of 0. Set to "" to skip this check.
+        # (Not recommended.) Also see cache_check_options.
+        # (See package device-mapper-persistent-data or thin-provisioning-tools)
+        # This configuration option has an automatic default value.
+        # cache_check_executable = "/usr/sbin/cache_check"
+
+        # Configuration option global/cache_dump_executable.
+        # The full path to the cache_dump command.
+        # LVM uses this command to dump cache pool metadata.
+        # (See package device-mapper-persistent-data or thin-provisioning-tools)
+        # This configuration option has an automatic default value.
+        # cache_dump_executable = "/usr/sbin/cache_dump"
+
+        # Configuration option global/cache_repair_executable.
+        # The full path to the cache_repair command.
+        # LVM uses this command to repair a cache metadata device if it is in
+        # an unusable state. Also see cache_repair_options.
+        # (See package device-mapper-persistent-data or thin-provisioning-tools)
+        # This configuration option has an automatic default value.
+        # cache_repair_executable = "/usr/sbin/cache_repair"
+
+        # Configuration option global/cache_check_options.
+        # List of options passed to the cache_check command.
+        # With cache_check version 5.0 or newer you should include the option
+        # --clear-needs-check-flag.
+        # This configuration option has an automatic default value.
+        # cache_check_options = [ "-q", "--clear-needs-check-flag" ]
+
+        # Configuration option global/cache_repair_options.
+        # List of options passed to the cache_repair command.
+        # This configuration option has an automatic default value.
+        # cache_repair_options = [ "" ]
+
+        # Configuration option global/system_id_source.
+        # The method LVM uses to set the local system ID.
+        # Volume Groups can also be given a system ID (by vgcreate, vgchange,
+        # or vgimport.) A VG on shared storage devices is accessible only to
+        # the host with a matching system ID. See 'man lvmsystemid' for
+        # information on limitations and correct usage.
+        # 
+        # Accepted values:
+        #   none
+        #     The host has no system ID.
+        #   lvmlocal
+        #     Obtain the system ID from the system_id setting in the 'local'
+        #     section of an lvm configuration file, e.g. lvmlocal.conf.
+        #   uname
+        #     Set the system ID from the hostname (uname) of the system.
+        #     System IDs beginning localhost are not permitted.
+        #   machineid
+        #     Use the contents of the machine-id file to set the system ID.
+        #     Some systems create this file at installation time.
+        #     See 'man machine-id' and global/etc.
+        #   file
+        #     Use the contents of another file (system_id_file) to set the
+        #     system ID.
+        # 
+        system_id_source = "none"
+
+        # Configuration option global/system_id_file.
+        # The full path to the file containing a system ID.
+        # This is used when system_id_source is set to 'file'.
+        # Comments starting with the character # are ignored.
+        # This configuration option does not have a default value defined.
+
+        # Configuration option global/use_lvmpolld.
+        # Use lvmpolld to supervise long running LVM commands.
+        # When enabled, control of long running LVM commands is transferred
+        # from the original LVM command to the lvmpolld daemon. This allows
+        # the operation to continue independent of the original LVM command.
+        # After lvmpolld takes over, the LVM command displays the progress
+        # of the ongoing operation. lvmpolld itself runs LVM commands to
+        # manage the progress of ongoing operations. lvmpolld can be used as
+        # a native systemd service, which allows it to be started on demand,
+        # and to use its own control group. When this option is disabled, LVM
+        # commands will supervise long running operations by forking themselves.
+        use_lvmpolld = 1
+}
+
+# Configuration section activation.
+activation {
+
+        # Configuration option activation/checks.
+        # Perform internal checks of libdevmapper operations.
+        # Useful for debugging problems with activation. Some of the checks may
+        # be expensive, so it's best to use this only when there seems to be a
+        # problem.
+        checks = 0
+
+        # Configuration option activation/udev_sync.
+        # Use udev notifications to synchronize udev and LVM.
+        # The --nodevsync option overrides this setting.
+        # When disabled, LVM commands will not wait for notifications from
+        # udev, but continue irrespective of any possible udev processing in
+        # the background. Only use this if udev is not running or has rules
+        # that ignore the devices LVM creates. If enabled when udev is not
+        # running, and LVM processes are waiting for udev, run the command
+        # 'dmsetup udevcomplete_all' to wake them up.
+        udev_sync = 1
+
+        # Configuration option activation/udev_rules.
+        # Use udev rules to manage LV device nodes and symlinks.
+        # When disabled, LVM will manage the device nodes and symlinks for
+        # active LVs itself. Manual intervention may be required if this
+        # setting is changed while LVs are active.
+        udev_rules = 1
+
+        # Configuration option activation/verify_udev_operations.
+        # Use extra checks in LVM to verify udev operations.
+        # This enables additional checks (and if necessary, repairs) on entries
+        # in the device directory after udev has completed processing its
+        # events. Useful for diagnosing problems with LVM/udev interactions.
+        verify_udev_operations = 0
+
+        # Configuration option activation/retry_deactivation.
+        # Retry failed LV deactivation.
+        # If LV deactivation fails, LVM will retry for a few seconds before
+        # failing. This may happen because a process run from a quick udev rule
+        # temporarily opened the device.
+        retry_deactivation = 1
+
+        # Configuration option activation/missing_stripe_filler.
+        # Method to fill missing stripes when activating an incomplete LV.
+        # Using 'error' will make inaccessible parts of the device return I/O
+        # errors on access. You can instead use a device path, in which case,
+        # that device will be used in place of missing stripes. Using anything
+        # other than 'error' with mirrored or snapshotted volumes is likely to
+        # result in data corruption.
+        # This configuration option is advanced.
+        missing_stripe_filler = "error"
+
+        # Configuration option activation/use_linear_target.
+        # Use the linear target to optimize single stripe LVs.
+        # When disabled, the striped target is used. The linear target is an
+        # optimised version of the striped target that only handles a single
+        # stripe.
+        use_linear_target = 1
+
+        # Configuration option activation/reserved_stack.
+        # Stack size in KiB to reserve for use while devices are suspended.
+        # Insufficent reserve risks I/O deadlock during device suspension.
+        reserved_stack = 64
+
+        # Configuration option activation/reserved_memory.
+        # Memory size in KiB to reserve for use while devices are suspended.
+        # Insufficent reserve risks I/O deadlock during device suspension.
+        reserved_memory = 8192
+
+        # Configuration option activation/process_priority.
+        # Nice value used while devices are suspended.
+        # Use a high priority so that LVs are suspended
+        # for the shortest possible time.
+        process_priority = -18
+
+        # Configuration option activation/volume_list.
+        # Only LVs selected by this list are activated.
+        # If this list is defined, an LV is only activated if it matches an
+        # entry in this list. If this list is undefined, it imposes no limits
+        # on LV activation (all are allowed).
+        # 
+        # Accepted values:
+        #   vgname
+        #     The VG name is matched exactly and selects all LVs in the VG.
+        #   vgname/lvname
+        #     The VG name and LV name are matched exactly and selects the LV.
+        #   @tag
+        #     Selects an LV if the specified tag matches a tag set on the LV
+        #     or VG.
+        #   @*
+        #     Selects an LV if a tag defined on the host is also set on the LV
+        #     or VG. See tags/hosttags. If any host tags exist but volume_list
+        #     is not defined, a default single-entry list containing '@*' is
+        #     assumed.
+        # 
+        # Example
+        # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
+        # 
+        # This configuration option does not have a default value defined.
+
+        # Configuration option activation/auto_activation_volume_list.
+        # Only LVs selected by this list are auto-activated.
+        # This list works like volume_list, but it is used only by
+        # auto-activation commands. It does not apply to direct activation
+        # commands. If this list is defined, an LV is only auto-activated
+        # if it matches an entry in this list. If this list is undefined, it
+        # imposes no limits on LV auto-activation (all are allowed.) If this
+        # list is defined and empty, i.e. "[]", then no LVs are selected for
+        # auto-activation. An LV that is selected by this list for
+        # auto-activation, must also be selected by volume_list (if defined)
+        # before it is activated. Auto-activation is an activation command that
+        # includes the 'a' argument: --activate ay or -a ay. The 'a' (auto)
+        # argument for auto-activation is meant to be used by activation
+        # commands that are run automatically by the system, as opposed to LVM
+        # commands run directly by a user. A user may also use the 'a' flag
+        # directly to perform auto-activation. Also see pvscan(8) for more
+        # information about auto-activation.
+        # 
+        # Accepted values:
+        #   vgname
+        #     The VG name is matched exactly and selects all LVs in the VG.
+        #   vgname/lvname
+        #     The VG name and LV name are matched exactly and selects the LV.
+        #   @tag
+        #     Selects an LV if the specified tag matches a tag set on the LV
+        #     or VG.
+        #   @*
+        #     Selects an LV if a tag defined on the host is also set on the LV
+        #     or VG. See tags/hosttags. If any host tags exist but volume_list
+        #     is not defined, a default single-entry list containing '@*' is
+        #     assumed.
+        # 
+        # Example
+        # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
+        # 
+        # This configuration option does not have a default value defined.
+
+        # Configuration option activation/read_only_volume_list.
+        # LVs in this list are activated in read-only mode.
+        # If this list is defined, each LV that is to be activated is checked
+        # against this list, and if it matches, it is activated in read-only
+        # mode. This overrides the permission setting stored in the metadata,
+        # e.g. from --permission rw.
+        # 
+        # Accepted values:
+        #   vgname
+        #     The VG name is matched exactly and selects all LVs in the VG.
+        #   vgname/lvname
+        #     The VG name and LV name are matched exactly and selects the LV.
+        #   @tag
+        #     Selects an LV if the specified tag matches a tag set on the LV
+        #     or VG.
+        #   @*
+        #     Selects an LV if a tag defined on the host is also set on the LV
+        #     or VG. See tags/hosttags. If any host tags exist but volume_list
+        #     is not defined, a default single-entry list containing '@*' is
+        #     assumed.
+        # 
+        # Example
+        # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
+        # 
+        # This configuration option does not have a default value defined.
+
+        # Configuration option activation/raid_region_size.
+        # Size in KiB of each raid or mirror synchronization region.
+        # For raid or mirror segment types, this is the amount of data that is
+        # copied at once when initializing, or moved at once by pvmove.
+        raid_region_size = 512
+
+        # Configuration option activation/error_when_full.
+        # Return errors if a thin pool runs out of space.
+        # The --errorwhenfull option overrides this setting.
+        # When enabled, writes to thin LVs immediately return an error if the
+        # thin pool is out of data space. When disabled, writes to thin LVs
+        # are queued if the thin pool is out of space, and processed when the
+        # thin pool data space is extended. New thin pools are assigned the
+        # behavior defined here.
+        # This configuration option has an automatic default value.
+        # error_when_full = 0
+
+        # Configuration option activation/readahead.
+        # Setting to use when there is no readahead setting in metadata.
+        # 
+        # Accepted values:
+        #   none
+        #     Disable readahead.
+        #   auto
+        #     Use default value chosen by kernel.
+        # 
+        readahead = "auto"
+
+        # Configuration option activation/raid_fault_policy.
+        # Defines how a device failure in a RAID LV is handled.
+        # This includes LVs that have the following segment types:
+        # raid1, raid4, raid5*, and raid6*.
+        # If a device in the LV fails, the policy determines the steps
+        # performed by dmeventd automatically, and the steps perfomed by the
+        # manual command lvconvert --repair --use-policies.
+        # Automatic handling requires dmeventd to be monitoring the LV.
+        # 
+        # Accepted values:
+        #   warn
+        #     Use the system log to warn the user that a device in the RAID LV
+        #     has failed. It is left to the user to run lvconvert --repair
+        #     manually to remove or replace the failed device. As long as the
+        #     number of failed devices does not exceed the redundancy of the LV
+        #     (1 device for raid4/5, 2 for raid6), the LV will remain usable.
+        #   allocate
+        #     Attempt to use any extra physical volumes in the VG as spares and
+        #     replace faulty devices.
+        # 
+        raid_fault_policy = "warn"
+
+        # Configuration option activation/mirror_image_fault_policy.
+        # Defines how a device failure in a 'mirror' LV is handled.
+        # An LV with the 'mirror' segment type is composed of mirror images
+        # (copies) and a mirror log. A disk log ensures that a mirror LV does
+        # not need to be re-synced (all copies made the same) every time a
+        # machine reboots or crashes. If a device in the LV fails, this policy
+        # determines the steps perfomed by dmeventd automatically, and the steps
+        # performed by the manual command lvconvert --repair --use-policies.
+        # Automatic handling requires dmeventd to be monitoring the LV.
+        # 
+        # Accepted values:
+        #   remove
+        #     Simply remove the faulty device and run without it. If the log
+        #     device fails, the mirror would convert to using an in-memory log.
+        #     This means the mirror will not remember its sync status across
+        #     crashes/reboots and the entire mirror will be re-synced. If a
+        #     mirror image fails, the mirror will convert to a non-mirrored
+        #     device if there is only one remaining good copy.
+        #   allocate
+        #     Remove the faulty device and try to allocate space on a new
+        #     device to be a replacement for the failed device. Using this
+        #     policy for the log is fast and maintains the ability to remember
+        #     sync state through crashes/reboots. Using this policy for a
+        #     mirror device is slow, as it requires the mirror to resynchronize
+        #     the devices, but it will preserve the mirror characteristic of
+        #     the device. This policy acts like 'remove' if no suitable device
+        #     and space can be allocated for the replacement.
+        #   allocate_anywhere
+        #     Not yet implemented. Useful to place the log device temporarily
+        #     on the same physical volume as one of the mirror images. This
+        #     policy is not recommended for mirror devices since it would break
+        #     the redundant nature of the mirror. This policy acts like
+        #     'remove' if no suitable device and space can be allocated for the
+        #     replacement.
+        # 
+        mirror_image_fault_policy = "remove"
+
+        # Configuration option activation/mirror_log_fault_policy.
+        # Defines how a device failure in a 'mirror' log LV is handled.
+        # The mirror_image_fault_policy description for mirrored LVs also
+        # applies to mirrored log LVs.
+        mirror_log_fault_policy = "allocate"
+
+        # Configuration option activation/snapshot_autoextend_threshold.
+        # Auto-extend a snapshot when its usage exceeds this percent.
+        # Setting this to 100 disables automatic extension.
+        # The minimum value is 50 (a smaller value is treated as 50.)
+        # Also see snapshot_autoextend_percent.
+        # Automatic extension requires dmeventd to be monitoring the LV.
+        # 
+        # Example
+        # Using 70% autoextend threshold and 20% autoextend size, when a 1G
+        # snapshot exceeds 700M, it is extended to 1.2G, and when it exceeds
+        # 840M, it is extended to 1.44G:
+        # snapshot_autoextend_threshold = 70
+        # 
+        snapshot_autoextend_threshold = 100
+
+        # Configuration option activation/snapshot_autoextend_percent.
+        # Auto-extending a snapshot adds this percent extra space.
+        # The amount of additional space added to a snapshot is this
+        # percent of its current size.
+        # 
+        # Example
+        # Using 70% autoextend threshold and 20% autoextend size, when a 1G
+        # snapshot exceeds 700M, it is extended to 1.2G, and when it exceeds
+        # 840M, it is extended to 1.44G:
+        # snapshot_autoextend_percent = 20
+        # 
+        snapshot_autoextend_percent = 20
+
+        # Configuration option activation/thin_pool_autoextend_threshold.
+        # Auto-extend a thin pool when its usage exceeds this percent.
+        # Setting this to 100 disables automatic extension.
+        # The minimum value is 50 (a smaller value is treated as 50.)
+        # Also see thin_pool_autoextend_percent.
+        # Automatic extension requires dmeventd to be monitoring the LV.
+        # 
+        # Example
+        # Using 70% autoextend threshold and 20% autoextend size, when a 1G
+        # thin pool exceeds 700M, it is extended to 1.2G, and when it exceeds
+        # 840M, it is extended to 1.44G:
+        # thin_pool_autoextend_threshold = 70
+        # 
+        thin_pool_autoextend_threshold = 100
+
+        # Configuration option activation/thin_pool_autoextend_percent.
+        # Auto-extending a thin pool adds this percent extra space.
+        # The amount of additional space added to a thin pool is this
+        # percent of its current size.
+        # 
+        # Example
+        # Using 70% autoextend threshold and 20% autoextend size, when a 1G
+        # thin pool exceeds 700M, it is extended to 1.2G, and when it exceeds
+        # 840M, it is extended to 1.44G:
+        # thin_pool_autoextend_percent = 20
+        # 
+        thin_pool_autoextend_percent = 20
+
+        # Configuration option activation/mlock_filter.
+        # Do not mlock these memory areas.
+        # While activating devices, I/O to devices being (re)configured is
+        # suspended. As a precaution against deadlocks, LVM pins memory it is
+        # using so it is not paged out, and will not require I/O to reread.
+        # Groups of pages that are known not to be accessed during activation
+        # do not need to be pinned into memory. Each string listed in this
+        # setting is compared against each line in /proc/self/maps, and the
+        # pages corresponding to lines that match are not pinned. On some
+        # systems, locale-archive was found to make up over 80% of the memory
+        # used by the process.
+        # 
+        # Example
+        # mlock_filter = [ "locale/locale-archive", "gconv/gconv-modules.cache" ]
+        # 
+        # This configuration option is advanced.
+        # This configuration option does not have a default value defined.
+
+        # Configuration option activation/use_mlockall.
+        # Use the old behavior of mlockall to pin all memory.
+        # Prior to version 2.02.62, LVM used mlockall() to pin the whole
+        # process's memory while activating devices.
+        use_mlockall = 0
+
+        # Configuration option activation/monitoring.
+        # Monitor LVs that are activated.
+        # The --ignoremonitoring option overrides this setting.
+        # When enabled, LVM will ask dmeventd to monitor activated LVs.
+        monitoring = 1
+
+        # Configuration option activation/polling_interval.
+        # Check pvmove or lvconvert progress at this interval (seconds).
+        # When pvmove or lvconvert must wait for the kernel to finish
+        # synchronising or merging data, they check and report progress at
+        # intervals of this number of seconds. If this is set to 0 and there
+        # is only one thing to wait for, there are no progress reports, but
+        # the process is awoken immediately once the operation is complete.
+        polling_interval = 15
+
+        # Configuration option activation/auto_set_activation_skip.
+        # Set the activation skip flag on new thin snapshot LVs.
+        # The --setactivationskip option overrides this setting.
+        # An LV can have a persistent 'activation skip' flag. The flag causes
+        # the LV to be skipped during normal activation. The lvchange/vgchange
+        # -K option is required to activate LVs that have the activation skip
+        # flag set. When this setting is enabled, the activation skip flag is
+        # set on new thin snapshot LVs.
+        # This configuration option has an automatic default value.
+        # auto_set_activation_skip = 1
+
+        # Configuration option activation/activation_mode.
+        # How LVs with missing devices are activated.
+        # The --activationmode option overrides this setting.
+        # 
+        # Accepted values:
+        #   complete
+        #     Only allow activation of an LV if all of the Physical Volumes it
+        #     uses are present. Other PVs in the Volume Group may be missing.
+        #   degraded
+        #     Like complete, but additionally RAID LVs of segment type raid1,
+        #     raid4, raid5, radid6 and raid10 will be activated if there is no
+        #     data loss, i.e. they have sufficient redundancy to present the
+        #     entire addressable range of the Logical Volume.
+        #   partial
+        #     Allows the activation of any LV even if a missing or failed PV
+        #     could cause data loss with a portion of the LV inaccessible.
+        #     This setting should not normally be used, but may sometimes
+        #     assist with data recovery.
+        # 
+        activation_mode = "degraded"
+
+        # Configuration option activation/lock_start_list.
+        # Locking is started only for VGs selected by this list.
+        # The rules are the same as those for volume_list.
+        # This configuration option does not have a default value defined.
+
+        # Configuration option activation/auto_lock_start_list.
+        # Locking is auto-started only for VGs selected by this list.
+        # The rules are the same as those for auto_activation_volume_list.
+        # This configuration option does not have a default value defined.
+}
+
+# Configuration section metadata.
+# This configuration section has an automatic default value.
+# metadata {
+
+        # Configuration option metadata/pvmetadatacopies.
+        # Number of copies of metadata to store on each PV.
+        # The --pvmetadatacopies option overrides this setting.
+        # 
+        # Accepted values:
+        #   2
+        #     Two copies of the VG metadata are stored on the PV, one at the
+        #     front of the PV, and one at the end.
+        #   1
+        #     One copy of VG metadata is stored at the front of the PV.
+        #   0
+        #     No copies of VG metadata are stored on the PV. This may be
+        #     useful for VGs containing large numbers of PVs.
+        # 
+        # This configuration option is advanced.
+        # This configuration option has an automatic default value.
+        # pvmetadatacopies = 1
+
+        # Configuration option metadata/vgmetadatacopies.
+        # Number of copies of metadata to maintain for each VG.
+        # The --vgmetadatacopies option overrides this setting.
+        # If set to a non-zero value, LVM automatically chooses which of the
+        # available metadata areas to use to achieve the requested number of
+        # copies of the VG metadata. If you set a value larger than the the
+        # total number of metadata areas available, then metadata is stored in
+        # them all. The value 0 (unmanaged) disables this automatic management
+        # and allows you to control which metadata areas are used at the
+        # individual PV level using pvchange --metadataignore y|n.
+        # This configuration option has an automatic default value.
+        # vgmetadatacopies = 0
+
+        # Configuration option metadata/pvmetadatasize.
+        # Approximate number of sectors to use for each metadata copy.
+        # VGs with large numbers of PVs or LVs, or VGs containing complex LV
+        # structures, may need additional space for VG metadata. The metadata
+        # areas are treated as circular buffers, so unused space becomes filled
+        # with an archive of the most recent previous versions of the metadata.
+        # This configuration option has an automatic default value.
+        # pvmetadatasize = 255
+
+        # Configuration option metadata/pvmetadataignore.
+        # Ignore metadata areas on a new PV.
+        # The --metadataignore option overrides this setting.
+        # If metadata areas on a PV are ignored, LVM will not store metadata
+        # in them.
+        # This configuration option is advanced.
+        # This configuration option has an automatic default value.
+        # pvmetadataignore = 0
+
+        # Configuration option metadata/stripesize.
+        # This configuration option is advanced.
+        # This configuration option has an automatic default value.
+        # stripesize = 64
+
+        # Configuration option metadata/dirs.
+        # Directories holding live copies of text format metadata.
+        # These directories must not be on logical volumes!
+        # It's possible to use LVM with a couple of directories here,
+        # preferably on different (non-LV) filesystems, and with no other
+        # on-disk metadata (pvmetadatacopies = 0). Or this can be in addition
+        # to on-disk metadata areas. The feature was originally added to
+        # simplify testing and is not supported under low memory situations -
+        # the machine could lock up. Never edit any files in these directories
+        # by hand unless you are absolutely sure you know what you are doing!
+        # Use the supplied toolset to make changes (e.g. vgcfgrestore).
+        # 
+        # Example
+        # dirs = [ "/etc/lvm/metadata", "/mnt/disk2/lvm/metadata2" ]
+        # 
+        # This configuration option is advanced.
+        # This configuration option does not have a default value defined.
+# }
+
+# Configuration section report.
+# LVM report command output formatting.
+# This configuration section has an automatic default value.
+# report {
+
+        # Configuration option report/compact_output.
+        # Do not print empty values for all report fields.
+        # If enabled, all fields that don't have a value set for any of the
+        # rows reported are skipped and not printed. Compact output is
+        # applicable only if report/buffered is enabled. If you need to
+        # compact only specified fields, use compact_output=0 and define
+        # report/compact_output_cols configuration setting instead.
+        # This configuration option has an automatic default value.
+        # compact_output = 0
+
+        # Configuration option report/compact_output_cols.
+        # Do not print empty values for specified report fields.
+        # If defined, specified fields that don't have a value set for any
+        # of the rows reported are skipped and not printed. Compact output
+        # is applicable only if report/buffered is enabled. If you need to
+        # compact all fields, use compact_output=1 instead in which case
+        # the compact_output_cols setting is then ignored.
+        # This configuration option has an automatic default value.
+        # compact_output_cols = ""
+
+        # Configuration option report/aligned.
+        # Align columns in report output.
+        # This configuration option has an automatic default value.
+        # aligned = 1
+
+        # Configuration option report/buffered.
+        # Buffer report output.
+        # When buffered reporting is used, the report's content is appended
+        # incrementally to include each object being reported until the report
+        # is flushed to output which normally happens at the end of command
+        # execution. Otherwise, if buffering is not used, each object is
+        # reported as soon as its processing is finished.
+        # This configuration option has an automatic default value.
+        # buffered = 1
+
+        # Configuration option report/headings.
+        # Show headings for columns on report.
+        # This configuration option has an automatic default value.
+        # headings = 1
+
+        # Configuration option report/separator.
+        # A separator to use on report after each field.
+        # This configuration option has an automatic default value.
+        # separator = " "
+
+        # Configuration option report/list_item_separator.
+        # A separator to use for list items when reported.
+        # This configuration option has an automatic default value.
+        # list_item_separator = ","
+
+        # Configuration option report/prefixes.
+        # Use a field name prefix for each field reported.
+        # This configuration option has an automatic default value.
+        # prefixes = 0
+
+        # Configuration option report/quoted.
+        # Quote field values when using field name prefixes.
+        # This configuration option has an automatic default value.
+        # quoted = 1
+
+        # Configuration option report/colums_as_rows.
+        # Output each column as a row.
+        # If set, this also implies report/prefixes=1.
+        # This configuration option has an automatic default value.
+        # colums_as_rows = 0
+
+        # Configuration option report/binary_values_as_numeric.
+        # Use binary values 0 or 1 instead of descriptive literal values.
+        # For columns that have exactly two valid values to report
+        # (not counting the 'unknown' value which denotes that the
+        # value could not be determined).
+        # This configuration option has an automatic default value.
+        # binary_values_as_numeric = 0
+
+        # Configuration option report/time_format.
+        # Set time format for fields reporting time values.
+        # Format specification is a string which may contain special character
+        # sequences and ordinary character sequences. Ordinary character
+        # sequences are copied verbatim. Each special character sequence is
+        # introduced by the '%' character and such sequence is then
+        # substituted with a value as described below.
+        # 
+        # Accepted values:
+        #   %a
+        #     The abbreviated name of the day of the week according to the
+        #     current locale.
+        #   %A
+        #     The full name of the day of the week according to the current
+        #     locale.
+        #   %b
+        #     The abbreviated month name according to the current locale.
+        #   %B
+        #     The full month name according to the current locale.
+        #   %c
+        #     The preferred date and time representation for the current
+        #     locale (alt E)
+        #   %C
+        #     The century number (year/100) as a 2-digit integer. (alt E)
+        #   %d
+        #     The day of the month as a decimal number (range 01 to 31).
+        #     (alt O)
+        #   %D
+        #     Equivalent to %m/%d/%y. (For Americans only. Americans should
+        #     note that in other countries%d/%m/%y is rather common. This
+        #     means that in international context this format is ambiguous and
+        #     should not be used.
+        #   %e
+        #     Like %d, the day of the month as a decimal number, but a leading
+        #     zero is replaced by a space. (alt O)
+        #   %E
+        #     Modifier: use alternative local-dependent representation if
+        #     available.
+        #   %F
+        #     Equivalent to %Y-%m-%d (the ISO 8601 date format).
+        #   %G
+        #     The ISO 8601 week-based year with century as adecimal number.
+        #     The 4-digit year corresponding to the ISO week number (see %V).
+        #     This has the same format and value as %Y, except that if the
+        #     ISO week number belongs to the previous or next year, that year
+        #     is used instead.
+        #   %g
+        #     Like %G, but without century, that is, with a 2-digit year
+        #     (00-99).
+        #   %h
+        #     Equivalent to %b.
+        #   %H
+        #     The hour as a decimal number using a 24-hour clock
+        #     (range 00 to 23). (alt O)
+        #   %I
+        #     The hour as a decimal number using a 12-hour clock
+        #     (range 01 to 12). (alt O)
+        #   %j
+        #     The day of the year as a decimal number (range 001 to 366).
+        #   %k
+        #     The hour (24-hour clock) as a decimal number (range 0 to 23);
+        #     single digits are preceded by a blank. (See also %H.)
+        #   %l
+        #     The hour (12-hour clock) as a decimal number (range 1 to 12);
+        #     single digits are preceded by a blank. (See also %I.)
+        #   %m
+        #     The month as a decimal number (range 01 to 12). (alt O)
+        #   %M
+        #     The minute as a decimal number (range 00 to 59). (alt O)
+        #   %O
+        #     Modifier: use alternative numeric symbols.
+        #   %p
+        #     Either "AM" or "PM" according to the given time value,
+        #     or the corresponding strings for the current locale. Noon is
+        #     treated as "PM" and midnight as "AM".
+        #   %P
+        #     Like %p but in lowercase: "am" or "pm" or a corresponding
+        #     string for the current locale.
+        #   %r
+        #     The time in a.m. or p.m. notation. In the POSIX locale this is
+        #     equivalent to %I:%M:%S %p.
+        #   %R
+        #     The time in 24-hour notation (%H:%M). For a version including
+        #     the seconds, see %T below.
+        #   %s
+        #     The number of seconds since the Epoch,
+        #     1970-01-01 00:00:00 +0000 (UTC)
+        #   %S
+        #     The second as a decimal number (range 00 to 60). (The range is
+        #     up to 60 to allow for occasional leap seconds.) (alt O)
+        #   %t
+        #     A tab character.
+        #   %T
+        #     The time in 24-hour notation (%H:%M:%S).
+        #   %u
+        #     The day of the week as a decimal, range 1 to 7, Monday being 1.
+        #     See also %w. (alt O)
+        #   %U
+        #     The week number of the current year as a decimal number,
+        #     range 00 to 53, starting with the first Sunday as the first
+        #     day of week 01. See also %V and %W. (alt O)
+        #   %V
+        #     The ISO 8601 week number of the current year as a decimal number,
+        #     range 01 to 53, where week 1 is the first week that has at least
+        #     4 days in the new year. See also %U and %W. (alt O)
+        #   %w
+        #     The day of the week as a decimal, range 0 to 6, Sunday being 0.
+        #     See also %u. (alt O)
+        #   %W
+        #     The week number of the current year as a decimal number,
+        #     range 00 to 53, starting with the first Monday as the first day
+        #     of week 01. (alt O)
+        #   %x
+        #     The preferred date representation for the current locale without
+        #     the time. (alt E)
+        #   %X
+        #     The preferred time representation for the current locale without
+        #     the date. (alt E)
+        #   %y
+        #     The year as a decimal number without a century (range 00 to 99).
+        #     (alt E, alt O)
+        #   %Y
+        #     The year as a decimal number including the century. (alt E)
+        #   %z
+        #     The +hhmm or -hhmm numeric timezone (that is, the hour and minute
+        #     offset from UTC).
+        #   %Z
+        #     The timezone name or abbreviation.
+        #   %%
+        #     A literal '%' character.
+        # 
+        # This configuration option has an automatic default value.
+        # time_format = "%Y-%m-%d %T %z"
+
+        # Configuration option report/devtypes_sort.
+        # List of columns to sort by when reporting 'lvm devtypes' command.
+        # See 'lvm devtypes -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # devtypes_sort = "devtype_name"
+
+        # Configuration option report/devtypes_cols.
+        # List of columns to report for 'lvm devtypes' command.
+        # See 'lvm devtypes -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # devtypes_cols = "devtype_name,devtype_max_partitions,devtype_description"
+
+        # Configuration option report/devtypes_cols_verbose.
+        # List of columns to report for 'lvm devtypes' command in verbose mode.
+        # See 'lvm devtypes -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # devtypes_cols_verbose = "devtype_name,devtype_max_partitions,devtype_description"
+
+        # Configuration option report/lvs_sort.
+        # List of columns to sort by when reporting 'lvs' command.
+        # See 'lvs -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # lvs_sort = "vg_name,lv_name"
+
+        # Configuration option report/lvs_cols.
+        # List of columns to report for 'lvs' command.
+        # See 'lvs -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # lvs_cols = "lv_name,vg_name,lv_attr,lv_size,pool_lv,origin,data_percent,metadata_percent,move_pv,mirror_log,copy_percent,convert_lv"
+
+        # Configuration option report/lvs_cols_verbose.
+        # List of columns to report for 'lvs' command in verbose mode.
+        # See 'lvs -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # lvs_cols_verbose = "lv_name,vg_name,seg_count,lv_attr,lv_size,lv_major,lv_minor,lv_kernel_major,lv_kernel_minor,pool_lv,origin,data_percent,metadata_percent,move_pv,copy_percent,mirror_log,convert_lv,lv_uuid,lv_profile"
+
+        # Configuration option report/vgs_sort.
+        # List of columns to sort by when reporting 'vgs' command.
+        # See 'vgs -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # vgs_sort = "vg_name"
+
+        # Configuration option report/vgs_cols.
+        # List of columns to report for 'vgs' command.
+        # See 'vgs -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # vgs_cols = "vg_name,pv_count,lv_count,snap_count,vg_attr,vg_size,vg_free"
+
+        # Configuration option report/vgs_cols_verbose.
+        # List of columns to report for 'vgs' command in verbose mode.
+        # See 'vgs -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # vgs_cols_verbose = "vg_name,vg_attr,vg_extent_size,pv_count,lv_count,snap_count,vg_size,vg_free,vg_uuid,vg_profile"
+
+        # Configuration option report/pvs_sort.
+        # List of columns to sort by when reporting 'pvs' command.
+        # See 'pvs -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # pvs_sort = "pv_name"
+
+        # Configuration option report/pvs_cols.
+        # List of columns to report for 'pvs' command.
+        # See 'pvs -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # pvs_cols = "pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free"
+
+        # Configuration option report/pvs_cols_verbose.
+        # List of columns to report for 'pvs' command in verbose mode.
+        # See 'pvs -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # pvs_cols_verbose = "pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,dev_size,pv_uuid"
+
+        # Configuration option report/segs_sort.
+        # List of columns to sort by when reporting 'lvs --segments' command.
+        # See 'lvs --segments -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # segs_sort = "vg_name,lv_name,seg_start"
+
+        # Configuration option report/segs_cols.
+        # List of columns to report for 'lvs --segments' command.
+        # See 'lvs --segments -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # segs_cols = "lv_name,vg_name,lv_attr,stripes,segtype,seg_size"
+
+        # Configuration option report/segs_cols_verbose.
+        # List of columns to report for 'lvs --segments' command in verbose mode.
+        # See 'lvs --segments -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # segs_cols_verbose = "lv_name,vg_name,lv_attr,seg_start,seg_size,stripes,segtype,stripesize,chunksize"
+
+        # Configuration option report/pvsegs_sort.
+        # List of columns to sort by when reporting 'pvs --segments' command.
+        # See 'pvs --segments -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # pvsegs_sort = "pv_name,pvseg_start"
+
+        # Configuration option report/pvsegs_cols.
+        # List of columns to sort by when reporting 'pvs --segments' command.
+        # See 'pvs --segments -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # pvsegs_cols = "pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,pvseg_start,pvseg_size"
+
+        # Configuration option report/pvsegs_cols_verbose.
+        # List of columns to sort by when reporting 'pvs --segments' command in verbose mode.
+        # See 'pvs --segments -o help' for the list of possible fields.
+        # This configuration option has an automatic default value.
+        # pvsegs_cols_verbose = "pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,pvseg_start,pvseg_size,lv_name,seg_start_pe,segtype,seg_pe_ranges"
+# }
+
+# Configuration section dmeventd.
+# Settings for the LVM event daemon.
+dmeventd {
+
+        # Configuration option dmeventd/mirror_library.
+        # The library dmeventd uses when monitoring a mirror device.
+        # libdevmapper-event-lvm2mirror.so attempts to recover from
+        # failures. It removes failed devices from a volume group and
+        # reconfigures a mirror as necessary. If no mirror library is
+        # provided, mirrors are not monitored through dmeventd.
+        mirror_library = "libdevmapper-event-lvm2mirror.so"
+
+        # Configuration option dmeventd/raid_library.
+        # This configuration option has an automatic default value.
+        # raid_library = "libdevmapper-event-lvm2raid.so"
+
+        # Configuration option dmeventd/snapshot_library.
+        # The library dmeventd uses when monitoring a snapshot device.
+        # libdevmapper-event-lvm2snapshot.so monitors the filling of snapshots
+        # and emits a warning through syslog when the usage exceeds 80%. The
+        # warning is repeated when 85%, 90% and 95% of the snapshot is filled.
+        snapshot_library = "libdevmapper-event-lvm2snapshot.so"
+
+        # Configuration option dmeventd/thin_library.
+        # The library dmeventd uses when monitoring a thin device.
+        # libdevmapper-event-lvm2thin.so monitors the filling of a pool
+        # and emits a warning through syslog when the usage exceeds 80%. The
+        # warning is repeated when 85%, 90% and 95% of the pool is filled.
+        thin_library = "libdevmapper-event-lvm2thin.so"
+
+        # Configuration option dmeventd/executable.
+        # The full path to the dmeventd binary.
+        # This configuration option has an automatic default value.
+        # executable = "/sbin/dmeventd"
+}
+
+# Configuration section tags.
+# Host tag settings.
+# This configuration section has an automatic default value.
+# tags {
+
+        # Configuration option tags/hosttags.
+        # Create a host tag using the machine name.
+        # The machine name is nodename returned by uname(2).
+        # This configuration option has an automatic default value.
+        # hosttags = 0
+
+        # Configuration section tags/<tag>.
+        # Replace this subsection name with a custom tag name.
+        # Multiple subsections like this can be created. The '@' prefix for
+        # tags is optional. This subsection can contain host_list, which is a
+        # list of machine names. If the name of the local machine is found in
+        # host_list, then the name of this subsection is used as a tag and is
+        # applied to the local machine as a 'host tag'. If this subsection is
+        # empty (has no host_list), then the subsection name is always applied
+        # as a 'host tag'.
+        # 
+        # Example
+        # The host tag foo is given to all hosts, and the host tag
+        # bar is given to the hosts named machine1 and machine2.
+        # tags { foo { } bar { host_list = [ "machine1", "machine2" ] } }
+        # 
+        # This configuration section has variable name.
+        # This configuration section has an automatic default value.
+        # tag {
+
+                # Configuration option tags/<tag>/host_list.
+                # A list of machine names.
+                # These machine names are compared to the nodename returned
+                # by uname(2). If the local machine name matches an entry in
+                # this list, the name of the subsection is applied to the
+                # machine as a 'host tag'.
+                # This configuration option does not have a default value defined.
+        # }
+# }
diff --git a/linux/storage/lvm.sls b/linux/storage/lvm.sls
index 9c99956..fa7032f 100644
--- a/linux/storage/lvm.sls
+++ b/linux/storage/lvm.sls
@@ -1,7 +1,6 @@
 {%- from "linux/map.jinja" import storage with context %}
 {%- if storage.enabled %}
 
-
 linux_lvm_pkgs:
   pkg.installed:
   - pkgs: {{ storage.lvm_pkgs }}
@@ -48,4 +47,11 @@
 
 {%- endfor %}
 
+/etc/lvm/lvm.conf:
+  file.managed:
+  - source: salt://linux/files/lvm.conf
+  - template: jinja
+  - require:
+    - pkg: linux_lvm_pkgs
+
 {%- endif %}
