# Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. # Copyright (C) 2004-2017 Red Hat, Inc. All rights reserved. # # This file is part of LVM2. # # This copyrighted material is made available to anyone wishing to use, # modify, copy, or redistribute it subject to the terms and conditions # of the GNU Lesser General Public License v.2.1. # # You should have received a copy of the GNU Lesser General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # # Syntax # # A new command has a unique combination of: # command name, required option args and required # positional args. # # To define a new command, begin a single line with a # command name, followed by required options/args, # (e.g. --foo, or --foo val), followed by required # positional args, (e.g. VG) # # After the single line of required elements are lines # of optional elements: # OO: # OP: # # command_name required_opt_arg ... required_pos_arg ... # OO: optional_opt_arg, ... # OP: optional_pos_arg ... # # required_opt_arg/optional_opt_arg must begin with the # long form option name, e.g. --foo. If the option name # takes a value, then the type of value is specified, # e.g. --foo String. # # Possible option names are listed in args.h # # Use --foo_long to specify that only the long form of # --foo is accepted by the command. (This is uncommon.) # # Possible option arg types are shown in tools/vals.h, # e.g. Bool, String, VG, SizeMB. # # --option args outside the list of types in vals.h are treated # as literal (non-variable) strings or numbers. # # positional args can be multiple types separated by |, e.g. VG|LV|Tag # # If a positional arg is repeatable, it is followed by ..., e.g. VG|LV|Tag ... # # LV can have a suffix indicating the LV type, e.g. LV_linear, LV_thinpool. # LV_raid represents any raidN. LV_type1_type2_type3 when the LV is # limited to multiple specific types. # # Note that two commands whose required paramters differ only by # the LV types they accept are ambiguous. That is, they cannot be # distinguished by just looking at the command, but require reading # the VG to find the LV type. So, command definitions that differ # only in accepted LV types are not allowed. It would be best to # distinguish them by using different option names. # There are FIXME's below for some of these cases. # # VG, LV can have the suffix _new, indicating the named VG or LV # does not yet exist. # # If Select is included in pos_arg, it means that the pos_arg # may be empty if the --select option is used. # # --size and --extents are interchangable, but only --size is used # in these definitions to keep them simpler. --extents is # automatically included and recognized as an alternative to --size. # # lvcreate generally requires a VG arg in position 1 and does not # require the --name option (when --name is omitted, a name is # generated). But, all commands of that form have a variant which # is not defined here, but which is automatically recognized as # being equivalent. That variant allows the required VG arg to # be omitted when --name VG/LV is specified, or when the # LVM_VG_NAME env var is set and --name LV is specified. # The lvcreate variants with --name and without a VG arg are # automatically recognized as an alternative to the defined # command forms requiring the VG and no --name. # Also, --thinpool VG/LV or --cachepool VG/LV can be used in # place of --name to provide the VG name instead of pos 1. # # Note that one the most difficult aspect of these definitions is # the variants of --thin / --type thin / --type thin-pool, # --cache / --type cache / --type cache-pool. # There are no consistent rules to follow and the behaviors are # unpredictable; each possible variation and combination needs # to be tested individually to see what it means. # # Some options have multiple names, but only one form of the name # is used in these definitions. Synonyms will be recognized when # matching a command to a command definition. # # used in definitions below (equivalent but not used in definitions) # mirrorlog core (not corelog) # resizeable (resizable or allocation) # allocatable (allocation) # activate (available) # rebuild (raidrebuild) # syncaction (raidsyncaction) # writemostly (raidwritemostly) # minrecoveryrate (raidminrecoveryrate) # maxrecoveryrate (raidmaxrecoveryrate) # writebehind (raidwritebehind) # virtualsize (virtualoriginsize) # splitcache (split) # vgmetadatacopies (metadatacopies) # pvmetadatacopies (metadatacopies) # # "---" is like a comment line, used to separate text for readability # # ID: A unique string identifying the command. Two commands that do # the same thing, but are alternate syntaxes can share the same ID, # in which case the implementation would have to sort out which # args to look at for the required parameters. Or, the two commands # could use differnet IDs, in which case the implementation would # know where to look for each parameter. # # DESC: A description of the command. The "DESC:" tags will be # included in the text as indicators of new lines when printing # the descriptions for help/man output. # # RULE: rules that a given command must follow, i.e. required (and) # or invalid (not) combinations of options, LV types or LV properties. # # RULE: A and|not B # # Conditions in A are applied to a given command+LV. # If the conditions in A are true, then the checks in B # are applied. If the checks in B are true|false according # to and|not, then the command fails|continues. # # When A is "all", the conditions in B are always applied. # # Conditions: # . if any --option listed is set, the checks may apply # . if any LV_type listed matches LV, the checks may apply # . if all lv_is_prop listed matches LV, the checks may apply # . if all of the above pass, then perform the checks # # Checks for "and": # . if any --option listed is not set, then fail # . if none of the LV_types matches the LV, then fail # . if any of the lv_is_prop do not match the LV, then fail # # Checks for "not": # . if any --option listed is set, then fail # . if any of the LV_types matches the LV, then fail # . if any of the lv_is_prop match the LV, then fail # # RULE: --option|LV_type|lv_is_prop|all ... and|not --option|LV_type|lv_is_prop ... # # RULE: --opt1 not --opt2 # RULE: --opt1 and --opt2 # RULE: --opt1 LV_type1 lv_is_prop1 and --opt2 # RULE: --opt1 LV_type1 and lv_is_prop1 # RULE: LV_type1 and lv_is_prop1 # # # AUTOTYPE: # The cmd def implies the type. Optionally using --type foo # is not wrong, but it's redundant. If --type is specified # it is not used in matching a user command to the cmd def, # but once a user cmd is matched to the cmd def, a specified # type is compared to the AUTOTYPE to ensure they match. # We avoid including --type foo in the OO list because doing # so often makes the cmd def redundant with another cmd def # that has --type foo in its required_options. We want a user # command to only match a single cmd def. # Usually, a user command with --type foo will match a cmd def # that includes --type foo in its required_options. # # For lvcreate cmd defs, each should either include --type foo # in required_options, or it should include AUTOTYPE foo # (and not include --type in OO). # # For efficiency, sets of options can be defined and reused # in multiple command definitions. # # To define a common set of options: # OO_NAME: --foo, --bar String # # To use this set of options, include it on the OO: line, e.g. # OO: --example, OO_NAME # # which is expaneded to # OO: --example, --foo, --bar String # # Including OO_NAME after a command name on the required line # means that any one of the options is required and the rest # are optional. The usage syntax for this case is printed as: # command (--foo A, --bar B) # # # OO_ALL is included in every command automatically. # OO_ALL: --commandprofile String, --config String, --debug, --driverloaded Bool, --help, --nolocking, --lockopt String, --longhelp, --profile String, --quiet, --verbose, --version, --yes, --test, --devicesfile String, --devices PV, --nohints --journal String # # options for pvs, lvs, vgs, fullreport # OO_REPORT: --aligned, --all, --binary, --configreport ConfigReport, --foreign, --headings HeadingsType --ignorelockingfailure, --logonly, --nameprefixes, --noheadings, --nosuffix, --options String, --readonly, --reportformat ReportFmt, --rows, --select String, --separator String, --shared, --sort String, --unbuffered, --units Units, --unquoted # # options for config, dumpconfig, lvmconfig # OO_CONFIG: --atversion String, --typeconfig ConfigType, --file String, --ignoreadvanced, --ignoreunsupported, --ignorelocal, --list, --mergedconfig, --metadataprofile String, --sinceversion String, --showdeprecated, --showunsupported, --validate, --valuesonly, --withsummary, --withcomments, --withgeneralpreamble, --withlocalpreamble, --withspaces, --unconfigured, --withversions --- # None of these can function as a required option for lvchange. OO_LVCHANGE: --autobackup Bool, --force, --ignoremonitoring, --noudevsync, --reportformat ReportFmt, --select String # Any of these can function as a required option for lvchange. # profile is also part of OO_ALL, but is repeated in OO_LVCHANGE_META # because it can function as a required opt. OO_LVCHANGE_META: --addtag Tag, --deltag Tag, --alloc Alloc, --contiguous Bool, --compression Bool, --deduplication Bool, --detachprofile, --metadataprofile String, --profile String, --permission Permission, --readahead Readahead, --setactivationskip Bool, --setautoactivation Bool, --errorwhenfull Bool, --discards Discards, --zero Bool, --cachemode CacheMode, --cachepolicy String, --cachesettings String, --minrecoveryrate SizeKB, --maxrecoveryrate SizeKB, --vdosettings String, --writebehind Number, --writemostly WriteMostlyPV, --persistent n # It's unfortunate that activate needs to be optionally allowed here; # it should only be used explicitly, but it's been previously allowed # in combination with unrelated metadata changes. lvchange OO_LVCHANGE_META VG|LV|Tag|Select ... OO: --activate Active, --poll Bool, --monitor Bool, OO_LVCHANGE IO: --ignoreskippedcluster ID: lvchange_properties DESC: Change a general LV attribute. DESC: For options listed in parentheses, any one is DESC: required, after which the others are optional. RULE: all not lv_is_pvmove lv_is_mirror_log lv_is_mirror_image RULE: all and lv_is_vg_writable RULE: --contiguous not --alloc RULE: --profile not --detachprofile RULE: --metadataprofile not --detachprofile RULE: --minrecoveryrate --maxrecoveryrate and LV_raid RULE: --writebehind --writemostly and LV_raid1 RULE: --cachemode --cachepolicy --cachesettings and LV_cache LV_cachepool LV_writecache RULE: --errorwhenfull --discards --zero and LV_thinpool RULE: --permission not lv_is_external_origin lv_is_raid_metadata lv_is_raid_image LV_thinpool RULE: --alloc --contiguous --metadataprofile --persistent --profile --readahead not lv_is_thick_origin RULE: --alloc --discards --zero --cachemode --cachepolicy --cachesettings not lv_is_partial # It's unfortunate that activate needs to be optionally allowed here, # like above, it was previouly allowed in combination. lvchange --resync VG|LV_raid_mirror|Tag|Select ... OO: --activate Active, OO_LVCHANGE IO: --ignoreskippedcluster ID: lvchange_resync DESC: Resyncronize a mirror or raid LV. DESC: Use to reset 'R' attribute on a not initially synchronized LV. RULE: all not lv_is_pvmove lv_is_locked lv_is_raid_with_integrity RULE: all not LV_raid0 lvchange --syncaction SyncAction VG|LV_raid|Tag|Select ... OO: OO_LVCHANGE IO: --ignoreskippedcluster ID: lvchange_syncaction DESC: Resynchronize or check a raid LV. RULE: all not LV_raid0 lvchange --rebuild PV VG|LV_raid|Tag|Select ... OO: OO_LVCHANGE IO: --ignoreskippedcluster ID: lvchange_rebuild DESC: Reconstruct data on specific PVs of a raid LV. RULE: all not LV_raid0 lvchange --activate Active VG|LV|Tag|Select ... OO: --activationmode ActivationMode, --partial, --poll Bool, --monitor Bool, --ignoreactivationskip, --ignorelockingfailure, --sysinit, --readonly, OO_LVCHANGE IO: --ignoreskippedcluster ID: lvchange_activate DESC: Activate or deactivate an LV. lvchange --refresh VG|LV|Tag|Select ... OO: --activationmode ActivationMode, --partial, --poll Bool, --monitor Bool, OO_LVCHANGE IO: --ignoreskippedcluster ID: lvchange_refresh DESC: Reactivate an LV using the latest metadata. lvchange --monitor Bool VG|LV|Tag|Select ... OO: OO_LVCHANGE IO: --ignoreskippedcluster ID: lvchange_monitor DESC: Start or stop monitoring an LV from dmeventd. RULE: all not lv_is_pvmove lvchange --poll Bool VG|LV|Tag|Select ... OO: --monitor Bool, OO_LVCHANGE IO: --ignoreskippedcluster ID: lvchange_poll DESC: Start or stop processing an LV conversion. lvchange --persistent y --minor Number LV OO: --major Number, --activate Active, --poll Bool, --monitor Bool, OO_LVCHANGE IO: --ignoreskippedcluster ID: lvchange_persistent DESC: Make the minor device number persistent for an LV. RULE: all not LV_thinpool LV_cachepool LV_vdopool --- OO_LVCONVERT_POOL: --poolmetadata LV, --poolmetadatasize SizeMB, --poolmetadataspare Bool, --readahead Readahead, --chunksize SizeKB, --zero Bool, --metadataprofile String OO_LVCONVERT_THINPOOL: --discards Discards, --errorwhenfull Bool, --pooldatavdo Bool OO_LVCONVERT_CACHE: --cachemetadataformat CacheMetadataFormat, --cachemode CacheMode, --cachepolicy String, --cachesettings String, --zero Bool OO_LVCONVERT_VDO: --metadataprofile String, --readahead Readahead, --compression Bool, --deduplication Bool, --vdosettings String, --zero Bool OO_LVCONVERT: --alloc Alloc, --background, --force, --noudevsync --- # These cover all the core, raid-related type conversions. # They are all routed into the core raid conversion code. lvconvert --type linear LV OO: OO_LVCONVERT OP: PV ... ID: lvconvert_raid_types DESC: Convert LV to linear. RULE: all not lv_is_locked lv_is_pvmove lvconvert --type striped LV OO: --stripes_long Number, --stripesize SizeKB, --regionsize RegionSize, --interval Number, OO_LVCONVERT OP: PV ... ID: lvconvert_raid_types DESC: Convert LV to striped. RULE: all not lv_is_locked lv_is_pvmove lvconvert --type mirror LV OO: --mirrors SNumber, --stripes_long Number, --stripesize SizeKB, --regionsize RegionSize, --interval Number, --mirrorlog MirrorLog, OO_LVCONVERT OP: PV ... ID: lvconvert_raid_types DESC: Convert LV to type mirror (also see type raid1), RULE: all not lv_is_locked lv_is_pvmove # When LV is already raid, this changes the raid layout # (changing layout of raid0 and raid1 not allowed.) lvconvert --type raid LV OO: --mirrors SNumber, --stripes_long Number, --stripesize SizeKB, --regionsize RegionSize, --interval Number, OO_LVCONVERT OP: PV ... ID: lvconvert_raid_types DESC: Convert LV to raid or change raid layout DESC: (a specific raid level must be used, e.g. raid1). RULE: all not lv_is_locked lv_is_pvmove RULE: lv_is_raid_with_integrity not --stripes_long --stripesize --regionsize --interval lvconvert --mirrors SNumber LV OO: --regionsize RegionSize, --interval Number, --mirrorlog MirrorLog, OO_LVCONVERT OP: PV ... ID: lvconvert_raid_types DESC: Convert LV to raid1 or mirror, or change number of mirror images. RULE: all not lv_is_locked lv_is_pvmove lvconvert --stripes_long Number LV_raid OO: OO_LVCONVERT, --interval Number, --regionsize RegionSize, --stripesize SizeKB OP: PV ... ID: lvconvert_raid_types DESC: Convert raid LV to change number of stripe images. RULE: all not lv_is_locked lv_is_pvmove lv_is_raid_with_integrity RULE: all not LV_raid0 LV_raid1 lvconvert --stripesize SizeKB LV_raid OO: OO_LVCONVERT, --interval Number, --regionsize RegionSize ID: lvconvert_raid_types DESC: Convert raid LV to change the stripe size. RULE: all not lv_is_locked lv_is_pvmove lv_is_raid_with_integrity RULE: all not LV_raid0 LV_raid1 lvconvert --regionsize RegionSize LV_raid OO: OO_LVCONVERT ID: lvconvert_change_region_size DESC: Change the region size of an LV. RULE: all not lv_is_locked lv_is_pvmove lv_is_raid_with_integrity RULE: all not LV_raid0 FLAGS: SECONDARY_SYNTAX --- # lvconvert raid-related utilities # Create a new command set for these and migrate them out of lvconvert? lvconvert --splitmirrors Number --name LV_new LV_raid1_mirror_cache OO: OO_LVCONVERT OP: PV ... ID: lvconvert_split_mirror_images DESC: Split images from a raid1 or mirror LV and use them to create a new LV. RULE: all not lv_is_locked lv_is_pvmove lv_is_raid_with_integrity lvconvert --splitmirrors Number --trackchanges LV_raid1_cache OO: OO_LVCONVERT OP: PV ... ID: lvconvert_split_mirror_images DESC: Split images from a raid1 LV and track changes to origin for later merge. RULE: all not lv_is_locked lv_is_pvmove lv_is_raid_with_integrity lvconvert --mergemirrors LV_linear_raid|VG|Tag ... OO: OO_LVCONVERT ID: lvconvert_merge_mirror_images DESC: Merge LV images that were split from a raid1 LV. RULE: all not lv_is_locked lv_is_pvmove lv_is_merging_origin lv_is_virtual_origin lv_is_external_origin lv_is_merging_cow lv_is_raid_with_integrity lvconvert --mirrorlog MirrorLog LV_mirror OO: OO_LVCONVERT OP: PV ... ID: lvconvert_change_mirrorlog DESC: Change the type of mirror log used by a mirror LV. RULE: all not lv_is_locked lv_is_pvmove FLAGS: SECONDARY_SYNTAX --- # lvconvert utilities for creating/maintaining thin and cache objects. # Create a new command set for these and migrate them out of lvconvert? lvconvert --type thin --thinpool LV LV_linear_striped_raid_cache_thin_error_zero OO: --thin, --originname LV_new, OO_LVCONVERT_POOL, OO_LVCONVERT OP: PV ... ID: lvconvert_to_thin_with_external DESC: Convert LV to a thin LV, using the original LV as an external origin. RULE: all and lv_is_visible RULE: all not lv_is_locked lv_is_raid_with_integrity RULE: --poolmetadata not --readahead --stripesize --stripes_long # alternate form of lvconvert --type thin lvconvert --thin --thinpool LV LV_linear_striped_raid_cache_thin_error_zero OO: --originname LV_new, OO_LVCONVERT_POOL, OO_LVCONVERT OP: PV ... ID: lvconvert_to_thin_with_external DESC: Convert LV to a thin LV, using the original LV as an external origin. FLAGS: SECONDARY_SYNTAX AUTOTYPE: thin RULE: all and lv_is_visible RULE: all not lv_is_locked lv_is_raid_with_integrity RULE: --poolmetadata not --readahead --stripesize --stripes_long # Convert to thin volume lvconvert --type thin LV_linear_striped_raid_cache_writecache_vdo_error_zero OO: --thin, OO_LVCONVERT_POOL, OO_LVCONVERT OP: PV ... ID: lvconvert_to_thin_with_data DESC: Convert LV to a thin LV, using LV as thin-pool data volume. RULE: all and lv_is_visible RULE: all not lv_is_locked lv_is_origin lv_is_merging_origin lv_is_external_origin lv_is_raid_with_integrity RULE: --poolmetadata not --readahead --stripesize --stripes_long # Convert to thin volume lvconvert --thin LV_linear_striped_raid_cache_writecache_vdo_error_zero OO: OO_LVCONVERT_POOL, OO_LVCONVERT OP: PV ... ID: lvconvert_to_thin_with_data DESC: Convert LV to a thin LV, using LV as thin-pool data volume. FLAGS: SECONDARY_SYNTAX AUTOTYPE: thin RULE: all and lv_is_visible RULE: all not lv_is_locked lv_is_origin lv_is_merging_origin lv_is_external_origin lv_is_raid_with_integrity RULE: --poolmetadata not --readahead --stripesize --stripes_long --- lvconvert --type cache --cachepool LV LV_linear_striped_raid_thinpool_vdo_vdopool_vdopooldata_thin_error_zero OO: --cache, OO_LVCONVERT_CACHE, OO_LVCONVERT_POOL, OO_LVCONVERT OP: PV ... ID: lvconvert_to_cache_with_cachepool DESC: Attach a cache pool to an LV, converts the LV to type cache. RULE: all not lv_is_locked lv_is_merging_origin lv_is_merging_cow lv_is_cow RULE: --poolmetadata not --readahead --stripesize --stripes_long # alternate form of lvconvert --type cache lvconvert --cache --cachepool LV LV_linear_striped_raid_thinpool_vdo_vdopool_vdopooldata_thin_error_zero OO: OO_LVCONVERT_CACHE, OO_LVCONVERT_POOL, OO_LVCONVERT OP: PV ... ID: lvconvert_to_cache_with_cachepool DESC: Attach a cache pool to an LV. RULE: all not lv_is_locked lv_is_merging_origin lv_is_merging_cow lv_is_cow RULE: --poolmetadata not --readahead --stripesize --stripes_long FLAGS: SECONDARY_SYNTAX AUTOTYPE: cache --- lvconvert --type writecache --cachevol LV LV_linear_striped_raid_thinpool OO: OO_LVCONVERT, --cachesettings String ID: lvconvert_to_writecache DESC: Attach a writecache to an LV, converts the LV to type writecache. RULE: all and lv_is_visible --- lvconvert --type cache --cachevol LV LV_linear_striped_raid_thinpool OO: --cache, OO_LVCONVERT_CACHE, OO_LVCONVERT, --poolmetadatasize SizeMB, --chunksize SizeKB ID: lvconvert_to_cache_with_cachevol DESC: Attach a cache to an LV, converts the LV to type cache. RULE: all and lv_is_visible # alternate form of lvconvert --type cache lvconvert --cache --cachevol LV LV_linear_striped_raid_thinpool OO: OO_LVCONVERT_CACHE, OO_LVCONVERT, --poolmetadatasize SizeMB, --chunksize SizeKB ID: lvconvert_to_cache_with_cachevol DESC: Attach a cache to an LV, converts the LV to type cache. RULE: all and lv_is_visible FLAGS: SECONDARY_SYNTAX --- lvconvert --type writecache --cachedevice PV LV_linear_striped_raid_thinpool OO: OO_LVCONVERT, --cachesize SizeMB, --cachesettings String ID: lvconvert_to_writecache_with_device DESC: Add a writecache to an LV, using a specified cache device. RULE: all and lv_is_visible lvconvert --type cache --cachedevice PV LV_linear_striped_raid_thinpool OO: OO_LVCONVERT, --cachesize SizeMB, --cachesettings String, --chunksize SizeKB ID: lvconvert_to_cache_with_device DESC: Add a cache to an LV, using a specified cache device. RULE: all and lv_is_visible --- lvconvert --type thin-pool LV_linear_striped_raid_cache_writecache_vdo_error_zero OO: --stripes_long Number, --stripesize SizeKB, OO_LVCONVERT_THINPOOL, OO_LVCONVERT_POOL, OO_LVCONVERT OP: PV ... ID: lvconvert_to_thinpool DESC: Convert LV to type thin-pool. RULE: all and lv_is_visible RULE: all not lv_is_locked lv_is_origin lv_is_merging_origin lv_is_external_origin lv_is_raid_with_integrity RULE: --poolmetadata not --readahead --stripesize --stripes_long # This command syntax has two different meanings depending on # whether the LV pos arg is already a thin pool or not. # # 1. When the LV arg is not a pool, this command converts # the LV into a pool, optionally using a specified meta LV. # This is an alternate form of the primary command: # lvconvert --type thin-pool LV # # 2. When the LV is is already a pool and a meta LV is specified, # the meta LV is swapped. Swapping a meta LV is a very specialized # operation that users should never use. # This is an alternate form of the primary command: # lvconvert --swapmetadata --poolmetadata LV LV # # The command def cannot include --poolmetadata as a required # option, otherwise 1 would not pass, so the validation of # this option cannot be done by the command defs, but has to # be done ad hoc in the lvconvert implementation. # # This command syntax is deprecated, and the primary forms # of creating a pool or swapping metadata should be used. lvconvert --thinpool LV_linear_striped_raid_cache_writecache_vdo_error_zero_thinpool OO: --stripes_long Number, --stripesize SizeKB, OO_LVCONVERT_THINPOOL, OO_LVCONVERT_POOL, OO_LVCONVERT OP: PV ... ID: lvconvert_to_thinpool_or_swap_metadata DESC: Convert LV to type thin-pool (variant, use --type thin-pool). DESC: Swap metadata LV in a thin pool (variant, use --swapmetadata). FLAGS: PREVIOUS_SYNTAX RULE: all and lv_is_visible RULE: all not lv_is_raid_with_integrity RULE: --poolmetadata not --readahead --stripesize --stripes_long AUTOTYPE: thin-pool --- lvconvert --type cache-pool LV_linear_striped_raid_error_zero OO: OO_LVCONVERT_CACHE, OO_LVCONVERT_POOL, OO_LVCONVERT OP: PV ... ID: lvconvert_to_cachepool DESC: Convert LV to type cache-pool. RULE: --poolmetadata not --readahead --stripesize --stripes_long RULE: all not lv_is_raid_with_integrity # This command syntax has two different meanings depending on # whether the LV pos arg is already a cache pool or not. # # 1. When the LV arg is not a pool, this command converts # the LV into a pool, optionally using a specified meta LV. # This is an alternate form of the primary command: # lvconvert --type cache-pool LV # # 2. When the LV is is already a pool and a meta LV is specified, # the meta LV is swapped. Swapping a meta LV is a very specialized # operation that users should never use. # This is an alternate form of the primary command: # lvconvert --swapmetadata --poolmetadata LV LV # # The command def cannot include --poolmetadata as a required # option, otherwise 1 would not pass, so the validation of # this option cannot be done by the command defs, but has to # be done ad hoc in the lvconvert implementation. # # This command syntax is deprecated, and the primary forms # of creating a pool or swapping metadata should be used. # FIXME # AUTOTYPE: cache-pool doesn't work here. # A strange command matches this cmd def: # lvconvert --type cache-pool --cachepool LV # where the LV is already a cache pool. That command # seems to be used to change properties on an existing cache pool. # The command lvconvert --type cache-pool LV will also change # properties on an existing cache pool. # Neither seems like a logical command to change properties # of an LV, wouldn't lvchange do that? lvconvert --cachepool LV_linear_striped_raid_cachepool_error_zero OO: --type cache-pool, OO_LVCONVERT_CACHE, OO_LVCONVERT_POOL, OO_LVCONVERT OP: PV ... ID: lvconvert_to_cachepool_or_swap_metadata DESC: Convert LV to type cache-pool (variant, use --type cache-pool). DESC: Swap metadata LV in a cache pool (variant, use --swapmetadata). FLAGS: PREVIOUS_SYNTAX RULE: all and lv_is_visible RULE: all not lv_is_raid_with_integrity RULE: --poolmetadata not --readahead --stripesize --stripes_long --- lvconvert --type vdo-pool LV_linear_striped_raid_cache OO: --name LV_new, --virtualsize SizeMB, OO_LVCONVERT_VDO, OO_LVCONVERT ID: lvconvert_to_vdopool DESC: Convert LV to type vdopool. RULE: all and lv_is_visible lv_is_writable RULE: all not lv_is_locked lv_is_origin lv_is_merging_origin lv_is_external_origin lv_is_virtual lv_is_raid_with_integrity lvconvert --vdopool LV_linear_striped_raid_cache OO: OO_LVCONVERT_VDO, OO_LVCONVERT, --name LV_new, --virtualsize SizeMB, ID: lvconvert_to_vdopool_param DESC: Convert LV to type vdopool. RULE: all and lv_is_visible RULE: all not lv_is_locked lv_is_origin lv_is_merging_origin lv_is_external_origin lv_is_virtual lv_is_raid_with_integrity FLAGS: SECONDARY_SYNTAX AUTOTYPE: vdo-pool --- lvconvert --splitcache LV_cachepool_cache_thinpool_vdopool_writecache OO: OO_LVCONVERT, --cachesettings String ID: lvconvert_split_and_keep_cache DESC: Detach a cache from an LV. --- lvconvert --uncache LV_cache_thinpool_vdopool_writecache OO: OO_LVCONVERT, --cachesettings String ID: lvconvert_split_and_remove_cache DESC: Detach and delete a cache from an LV. FLAGS: SECONDARY_SYNTAX --- lvconvert --swapmetadata --poolmetadata LV LV_thinpool_cachepool OO: --chunksize SizeKB, OO_LVCONVERT ID: lvconvert_swap_pool_metadata DESC: Swap metadata LV in a thin pool or cache pool (for repair only). FLAGS: SECONDARY_SYNTAX --- # lvconvert --merge is an extremely ambiguous command. # It can do very different operations, but which one depends # on knowing the LV type. So, the command doesn't know what # it's actually doing until quite late, when processing a # single LV. When passed a VG or tag, it will do different # operations on each LV it finds, depending on the current LV type. lvconvert --merge LV_linear_striped_raid_thin_snapshot|VG|Tag ... OO: --background, --interval Number, OO_LVCONVERT ID: lvconvert_merge DESC: Merge LV that was split from a mirror (variant, use --mergemirrors). DESC: Merge thin LV into its origin LV (variant, use --mergethin). DESC: Merge COW snapshot LV into its origin (variant, use --mergesnapshot). RULE: all not lv_is_locked lv_is_pvmove lv_is_merging_origin lv_is_virtual_origin lv_is_external_origin lv_is_merging_cow FLAGS: SECONDARY_SYNTAX --- lvconvert --mergethin LV_thin ... OO: OO_LVCONVERT ID: lvconvert_merge_thin DESC: Merge thin LV into its origin LV. RULE: all not lv_is_locked lv_is_pvmove lv_is_merging_origin lv_is_virtual_origin lv_is_external_origin lv_is_merging_cow RULE: all and lv_is_visible --- # lvconvert snapshot-related utilities # Create a new command set for these and migrate them out of lvconvert? lvconvert --mergesnapshot LV_snapshot ... OO: --background, --interval Number, OO_LVCONVERT ID: lvconvert_merge_snapshot DESC: Merge COW snapshot LV into its origin. RULE: all not lv_is_locked lv_is_pvmove lv_is_merging_origin lv_is_virtual_origin lv_is_external_origin lv_is_merging_cow RULE: all and lv_is_visible --- lvconvert --splitsnapshot LV_snapshot OO: OO_LVCONVERT ID: lvconvert_split_cow_snapshot DESC: Separate a COW snapshot from its origin LV. RULE: all not lv_is_locked lv_is_pvmove lv_is_origin lv_is_external_origin lv_is_merging_cow FLAGS: SECONDARY_SYNTAX --- # NB: an unsual use of position args here, the first pos arg # (will become origin LV) is not passed to process_each, # the second pos arg (will become cow LV) is given to # process_each. Because the first pos LV is not handled # by process_each_lv, it cannot be checked against this # command def, so a specific LV type in the first pos # will not be checked. # alternate form of lvconvert --snapshot lvconvert --type snapshot LV LV_linear_striped OO: --snapshot, --chunksize SizeKB, --zero Bool, OO_LVCONVERT ID: lvconvert_combine_split_snapshot DESC: Combine a former COW snapshot (second arg) with a former DESC: origin LV (first arg) to reverse a splitsnapshot command. RULE: all not lv_is_locked lv_is_pvmove RULE: all and lv_is_visible lvconvert --snapshot LV LV_linear_striped OO: --chunksize SizeKB, --zero Bool, OO_LVCONVERT ID: lvconvert_combine_split_snapshot DESC: Combine a former COW snapshot (second arg) with a former DESC: origin LV (first arg) to reverse a splitsnapshot command. RULE: all not lv_is_locked lv_is_pvmove RULE: all and lv_is_visible FLAGS: SECONDARY_SYNTAX AUTOTYPE: snapshot --- # lvconvert repair/replace utilitiles # Create a new command set for these and migrate them out of lvconvert? # FIXME: use specific option names to distinguish these two # very different commands, e.g. # # lvconvert --repair-pvs LV_raid_mirror # DESC: Replace failed PVs in a raid or mirror LV. # # lvconvert --repair-thinpool LV_thinpool # DESC: Repair a thin pool. # # lvconvert --repair-cache LV_cache # DESC: Repair a cache. # # lvconvert --repair-cachepool LV_cachepool # DESC: Repair a cachepool. # # lvm may want to do different things, or allow different options # depending on which operation is being run, but as it stands, it # cannot do anything operation-specific until after the VG is read # and the LV type is known. lvconvert --repair LV_cache_cachepool_mirror_raid_thinpool OO: --usepolicies, --interval Number, --setactivationskip Bool, --poolmetadataspare Bool, OO_LVCONVERT OP: PV ... ID: lvconvert_repair DESC: Replace failed PVs in a raid or mirror LV. DESC: Repair a thin pool. DESC: Repair a cache pool. RULE: all not lv_is_locked lv_is_pvmove RULE: --poolmetadataspare and LV_cache LV_cachepool LV_thinpool RULE: --setactivationskip and LV_cache LV_cachepool LV_thinpool lvconvert --replace PV LV_raid OO: OO_LVCONVERT OP: PV ... ID: lvconvert_replace_pv DESC: Replace specific PV(s) in a raid LV with another PV. RULE: all not lv_is_locked lv_is_pvmove --- # This command just (re)starts the polling process on the LV # to continue a previous conversion. lvconvert --startpoll LV_mirror_raid OO: OO_LVCONVERT ID: lvconvert_start_poll DESC: Poll LV to continue conversion. RULE: all and lv_is_converting # alternate form of lvconvert --startpoll, this is only kept # for compat since this was how it used to be done. lvconvert LV_mirror_raid OO: OO_LVCONVERT ID: lvconvert_plain DESC: Poll LV to continue conversion (also see --startpoll) DESC: or waits till conversion/mirror syncing is finished FLAGS: SECONDARY_SYNTAX --- lvconvert --raidintegrity Bool LV_raid OO: --raidintegritymode String, --raidintegrityblocksize Number, OO_LVCONVERT OP: PV ... ID: lvconvert_integrity DESC: Add or remove data integrity checksums to raid images. --- # --extents is not specified; it's an automatic alternative for --size OO_LVCREATE: --addtag Tag, --alloc Alloc, --autobackup Bool, --activate Active, --contiguous Bool, --ignoreactivationskip, --ignoremonitoring, --major Number, --metadataprofile String, --minor Number, --monitor Bool, --name String, --nosync, --noudevsync, --permission Permission, --persistent Bool, --readahead Readahead, --reportformat ReportFmt, --setactivationskip Bool, --wipesignatures Bool, --zero Bool, --setautoactivation Bool OO_LVCREATE_CACHE: --cachemode CacheMode, --cachepolicy String, --cachesettings String, --chunksize SizeKB, --cachemetadataformat CacheMetadataFormat OO_LVCREATE_POOL: --poolmetadatasize SizeMB, --poolmetadataspare Bool, --chunksize SizeKB OO_LVCREATE_VDO: --compression Bool, --deduplication Bool, --vdosettings String OO_LVCREATE_THINPOOL: --discards Discards, --errorwhenfull Bool, --pooldatavdo Bool, OO_LVCREATE_VDO --- lvcreate --type error --size SizeMB VG OO: OO_LVCREATE ID: lvcreate_error_vol DESC: Create an LV that returns errors when used. FLAGS: SECONDARY_SYNTAX --- lvcreate --type zero --size SizeMB VG OO: OO_LVCREATE ID: lvcreate_zero_vol DESC: Create an LV that returns zeros when read. FLAGS: SECONDARY_SYNTAX --- lvcreate --type linear --size SizeMB VG OO: OO_LVCREATE OP: PV ... IO: --mirrors 0, --stripes 1 ID: lvcreate_linear DESC: Create a linear LV. FLAGS: SECONDARY_SYNTAX lvcreate --size SizeMB VG OO: OO_LVCREATE OP: PV ... IO: --mirrors 0, --stripes 1 ID: lvcreate_linear DESC: Create a linear LV. AUTOTYPE: linear --- # all lvcreate combinations of: # a) --type striped # b) --type mirror # c) --type raid # d) --stripes # e) --mirrors # # R1. a: striped with default stripes # R2. a,d: striped with specified stripes # R3. a,e: NA # R4. a,d,e: NA # # R5. b: mirror with default mirrors # R6. b,d: NA # R7. b,e: mirror with specified mirrors # R8. b,d,e: NA # # R9. c: raid with default stripes/mirrors # R10. c,d: raid with specified stripes # R11. c,e: raid with specified mirrors # R12. c,d,e: raid10 with specified stripes and mirrors # # R13. d: striped with specified stripes # R14. e: mirror with specified mirrors # R15. d,e: raid10 with specified mirrors # R1,R2 (--type striped with or without --stripes) lvcreate --type striped --size SizeMB VG OO: --stripes Number, --stripesize SizeKB, OO_LVCREATE OP: PV ... ID: lvcreate_striped DESC: Create a striped LV (also see lvcreate --stripes). FLAGS: SECONDARY_SYNTAX # R13 (just --stripes) lvcreate --stripes Number --size SizeMB VG OO: --stripesize SizeKB, OO_LVCREATE OP: PV ... ID: lvcreate_striped DESC: Create a striped LV. AUTOTYPE: striped # R5,R7 (--type mirror with or without --mirrors) lvcreate --type mirror --size SizeMB VG OO: --stripes Number, --stripesize SizeKB, --mirrors PNumber, --mirrorlog MirrorLog, --regionsize RegionSize, OO_LVCREATE OP: PV ... ID: lvcreate_mirror DESC: Create a mirror LV (also see --type raid1). FLAGS: SECONDARY_SYNTAX # R14 (just --mirrors) # alternate form of lvcreate --type raid1|mirror lvcreate --mirrors PNumber --size SizeMB VG OO: --stripesize SizeKB, --mirrorlog MirrorLog, --regionsize RegionSize, --minrecoveryrate SizeKB, --maxrecoveryrate SizeKB, --raidintegrity Bool, --raidintegritymode String, --raidintegrityblocksize Number, OO_LVCREATE OP: PV ... IO: --stripes 1 ID: lvcreate_mirror_or_raid1 DESC: Create a raid1 or mirror LV. AUTOTYPE: raid1 AUTOTYPE: mirror # R9,R10,R11,R12 (--type raid with any use of --stripes/--mirrors) lvcreate --type raid --size SizeMB VG OO: --stripes Number, --stripesize SizeKB, --mirrors PNumber, --regionsize RegionSize, --minrecoveryrate SizeKB, --maxrecoveryrate SizeKB, --raidintegrity Bool, --raidintegritymode String, --raidintegrityblocksize Number, OO_LVCREATE OP: PV ... ID: lvcreate_raid_any DESC: Create a raid LV (a specific raid level must be used, e.g. raid1). # R15 (--stripes and --mirrors which implies raid10) # FIXME: --mirrors N --stripes 1 is raid1|mirror and should only # match the cmd def above for raid1|mirror with IO: --stripes 1 lvcreate --mirrors PNumber --stripes Number --size SizeMB VG OO: --stripesize SizeKB, --regionsize RegionSize, --minrecoveryrate SizeKB, --maxrecoveryrate SizeKB, --raidintegrity Bool, --raidintegritymode String, --raidintegrityblocksize Number, OO_LVCREATE OP: PV ... ID: lvcreate_raid_any DESC: Create a raid10 LV. AUTOTYPE: raid10 --- # The LV created by these commands actually has type linear or striped, # not snapshot as specified by the command. If LVs never have type # snapshot, perhaps "snapshot" should not be considered an LV type, but # another new LV property? # alternate form of lvcreate --snapshot lvcreate --type snapshot --size SizeMB LV OO: --snapshot, --stripes Number, --stripesize SizeKB, --chunksize SizeKB, OO_LVCREATE OP: PV ... ID: lvcreate_cow_snapshot DESC: Create a COW snapshot LV of an origin LV DESC: (also see --snapshot). FLAGS: SECONDARY_SYNTAX lvcreate --snapshot --size SizeMB LV OO: --stripes Number, --stripesize SizeKB, --chunksize SizeKB, OO_LVCREATE OP: PV ... ID: lvcreate_cow_snapshot DESC: Create a COW snapshot LV of an origin LV. AUTOTYPE: snapshot --- # alternate form of lvcreate --snapshot lvcreate --type snapshot --size SizeMB --virtualsize SizeMB VG OO: --snapshot, --chunksize SizeKB, OO_LVCREATE OP: PV ... ID: lvcreate_cow_snapshot_with_virtual_origin DESC: Create a sparse COW snapshot LV of a virtual origin LV DESC: (also see --snapshot). FLAGS: SECONDARY_SYNTAX --- lvcreate --type thin-pool --size SizeMB VG OO: --thinpool LV_new, --stripes Number, --stripesize SizeKB, --thin, OO_LVCREATE_THINPOOL, OO_LVCREATE_POOL, OO_LVCREATE OP: PV ... IO: --mirrors 0 ID: lvcreate_thinpool DESC: Create a thin pool. # alternate form of lvcreate --type thin-pool lvcreate --thin --size SizeMB VG OO: --stripes Number, --stripesize SizeKB, OO_LVCREATE_THINPOOL, OO_LVCREATE_POOL, OO_LVCREATE OP: PV ... IO: --mirrors 0 ID: lvcreate_thinpool DESC: Create a thin pool. FLAGS: SECONDARY_SYNTAX AUTOTYPE: thin-pool # alternate form of lvcreate --type thin-pool lvcreate --size SizeMB --thinpool LV_new VG OO: --stripes Number, --stripesize SizeKB, --thin, OO_LVCREATE_THINPOOL, OO_LVCREATE_POOL, OO_LVCREATE OP: PV ... IO: --mirrors 0 ID: lvcreate_thinpool DESC: Create a thin pool named in --thinpool. FLAGS: SECONDARY_SYNTAX AUTOTYPE: thin-pool --- # NB. there are no alternate forms of these commands that # use --cache in place of --type cache-pool, but --cache # still needs to be listed as an optional addition to # --type cache-pool. lvcreate --type cache-pool --size SizeMB VG OO: --stripes Number, --stripesize SizeKB, --cache, OO_LVCREATE_CACHE, OO_LVCREATE_POOL, OO_LVCREATE OP: PV ... ID: lvcreate_cachepool DESC: Create a cache pool. # alternate form of lvcreate --type cache-pool lvcreate --type cache-pool --size SizeMB --cachepool LV_new VG OO: --stripes Number, --stripesize SizeKB, --cache, OO_LVCREATE_CACHE, OO_LVCREATE_POOL, OO_LVCREATE OP: PV ... ID: lvcreate_cachepool DESC: Create a cache pool named by the --cachepool arg DESC: (variant, uses --cachepool in place of --name). FLAGS: SECONDARY_SYNTAX --- lvcreate --type thin --virtualsize SizeMB --thinpool LV_thinpool VG OO: --thin, OO_LVCREATE IO: --mirrors 0 ID: lvcreate_thin_vol DESC: Create a thin LV in a thin pool. FLAGS: SECONDARY_SYNTAX # alternate form of lvcreate --type thin lvcreate --type thin --virtualsize SizeMB LV_thinpool OO: --thin, OO_LVCREATE IO: --mirrors 0 ID: lvcreate_thin_vol DESC: Create a thin LV in a thin pool named in the first arg DESC: (variant, also see --thinpool for naming pool). FLAGS: SECONDARY_SYNTAX # NB. this is the variant which can substitute # --thin for --type thin, even though --thin is in OO. # alternate form of lvcreate --type thin lvcreate --virtualsize SizeMB --thinpool LV_thinpool VG OO: --thin, OO_LVCREATE IO: --mirrors 0 ID: lvcreate_thin_vol DESC: Create a thin LV in a thin pool. AUTOTYPE: thin # alternate form of lvcreate --type thin lvcreate --virtualsize SizeMB LV_thinpool OO: --thin, OO_LVCREATE IO: --mirrors 0 ID: lvcreate_thin_vol DESC: Create a thin LV in the thin pool named in the first arg DESC: (also see --thinpool for naming pool.) FLAGS: SECONDARY_SYNTAX AUTOTYPE: thin --- lvcreate --type thin LV_thin OO: --thin, --snapshot, OO_LVCREATE IO: --mirrors 0 ID: lvcreate_thin_snapshot DESC: Create a thin LV that is a snapshot of an existing thin LV. FLAGS: SECONDARY_SYNTAX # alternate form of lvcreate --type thin lvcreate --thin LV_thin OO: --snapshot, OO_LVCREATE IO: --mirrors 0 ID: lvcreate_thin_snapshot DESC: Create a thin LV that is a snapshot of an existing thin LV. FLAGS: SECONDARY_SYNTAX AUTOTYPE: thin # alternate form of lvcreate --type thin lvcreate --snapshot LV_thin OO: --thin, OO_LVCREATE IO: --mirrors 0 ID: lvcreate_thin_snapshot DESC: Create a thin LV that is a snapshot of an existing thin LV. AUTOTYPE: thin lvcreate --type thin --thinpool LV_thinpool LV OO: --thin, OO_LVCREATE IO: --mirrors 0 ID: lvcreate_thin_snapshot_of_external DESC: Create a thin LV that is a snapshot of an external origin LV. # alternate form of lvcreate --type thin --thinpool LV_thinpool LV lvcreate --snapshot --thinpool LV_thinpool LV OO: OO_LVCREATE IO: --mirrors 0 ID: lvcreate_thin_snapshot_of_external DESC: Create a thin LV that is a snapshot of an external origin LV. FLAGS: SECONDARY_SYNTAX AUTOTYPE: thin --- lvcreate --type vdo --size SizeMB VG OO: --stripes Number, --stripesize SizeKB, --vdo, --virtualsize SizeMB, --vdopool LV_new, OO_LVCREATE_VDO, OO_LVCREATE OP: PV ... IO: --mirrors 0 ID: lvcreate_vdo_vol DESC: Create a LV that returns VDO when used. lvcreate --vdo --size SizeMB VG OO: --stripes Number, --stripesize SizeKB, --virtualsize SizeMB, --vdopool LV_new, OO_LVCREATE_VDO, OO_LVCREATE OP: PV ... IO: --mirrors 0 ID: lvcreate_vdo_vol DESC: Create a VDO LV with VDO pool. FLAGS: SECONDARY_SYNTAX AUTOTYPE: vdo lvcreate --vdopool LV_new --size SizeMB VG OO: --stripes Number, --stripesize SizeKB, --virtualsize SizeMB, OO_LVCREATE_VDO, OO_LVCREATE OP: PV ... IO: --mirrors 0 ID: lvcreate_vdo_vol DESC: Create a VDO LV with VDO pool. FLAGS: SECONDARY_SYNTAX AUTOTYPE: vdo --- # stripes option is not intuitive when creating a thin LV, # but here it applies to creating the new thin pool that # is used for the thin LV # FIXME: there are commands here that differ only in that # one takes LV_new in arg pos 1, and the other takes a VG name # in arg pos 1. The commands that take LV_new use that # name as the new name of the pool, but the commands that # take a VG automatically generate the LV name. The problem # is that currently the command matching function cannot # distinguish between an LV name and a VG name being used # in arg pos 1, so a user-entered command would just match # the first it finds and not necessarily the correct # definition. Note that when LV_new is used in arg pos 1, # it needs to include a VG name, i.e. VG/LV_new lvcreate --type thin --virtualsize SizeMB --size SizeMB --thinpool LV_new VG OO: --stripes Number, --stripesize SizeKB, --thin, OO_LVCREATE_THINPOOL, OO_LVCREATE_POOL, OO_LVCREATE OP: PV ... IO: --mirrors 0 ID: lvcreate_thin_vol_and_thinpool DESC: Create a thin LV, first creating a thin pool for it, DESC: where the new thin pool is named by the --thinpool arg. FLAGS: SECONDARY_SYNTAX # alternate form of lvcreate --type thin lvcreate --virtualsize SizeMB --size SizeMB --thinpool LV_new VG OO: --stripes Number, --stripesize SizeKB, --thin, OO_LVCREATE_THINPOOL, OO_LVCREATE_POOL, OO_LVCREATE OP: PV ... IO: --mirrors 0 ID: lvcreate_thin_vol_and_thinpool DESC: Create a thin LV, first creating a thin pool for it, DESC: where the new thin pool is named by --thinpool. FLAGS: SECONDARY_SYNTAX AUTOTYPE: thin # alternate form of lvcreate --type thin lvcreate --type thin --virtualsize SizeMB --size SizeMB LV_new|VG OO: --stripes Number, --stripesize SizeKB, --thin, OO_LVCREATE_THINPOOL, OO_LVCREATE_POOL, OO_LVCREATE OP: PV ... IO: --mirrors 0 ID: lvcreate_thin_vol_and_thinpool DESC: Create a thin LV, first creating a thin pool for it, DESC: where the new thin pool is named in the first arg, DESC: or the new thin pool name is generated when the first DESC: arg is a VG name. FLAGS: SECONDARY_SYNTAX # alternate form of lvcreate --type thin lvcreate --thin --virtualsize SizeMB --size SizeMB LV_new|VG OO: --stripes Number, --stripesize SizeKB, OO_LVCREATE_THINPOOL, OO_LVCREATE_POOL, OO_LVCREATE OP: PV ... IO: --mirrors 0 ID: lvcreate_thin_vol_and_thinpool DESC: Create a thin LV, first creating a thin pool for it, DESC: where the new thin pool is named in the first arg, DESC: or the new thin pool name is generated when the first DESC: arg is a VG name. FLAGS: SECONDARY_SYNTAX AUTOTYPE: thin --- lvcreate --size SizeMB --virtualsize SizeMB VG OO: --stripes Number, --stripesize SizeKB, --snapshot, --thin, OO_LVCREATE_THINPOOL, OO_LVCREATE_POOL, OO_LVCREATE OP: PV ... IO: --mirrors 0 ID: lvcreate_thin_vol_with_thinpool_or_sparse_snapshot DESC: Create a thin LV, first creating a thin pool for it. DESC: Create a sparse snapshot of a virtual origin LV DESC: Chooses type thin or snapshot according to DESC: config setting sparse_segtype_default. FLAGS: SECONDARY_SYNTAX AUTOTYPE: thin AUTOTYPE: snapshot --- # stripes option is not intuitive when creating a cache LV, # but here it applies to creating the new origin that # is used to create the cache LV lvcreate --type cache --size SizeMB --cachepool LV_cachepool VG OO: --stripes Number, --stripesize SizeKB, --cache, OO_LVCREATE_CACHE, OO_LVCREATE_POOL, OO_LVCREATE OP: PV ... ID: lvcreate_and_attach_cachepool DESC: Create a new LV, then attach the specified cachepool DESC: which converts the new LV to type cache. # alternate form of lvcreate --type cache # (omits the --type cache option which is inferred) lvcreate --size SizeMB --cachepool LV_cachepool VG OO: --stripes Number, --stripesize SizeKB, --cache, OO_LVCREATE_CACHE, OO_LVCREATE OP: PV ... ID: lvcreate_and_attach_cachepool_v2 DESC: Create a new LV, then attach the specified cachepool DESC: which converts the new LV to type cache. FLAGS: SECONDARY_SYNTAX AUTOTYPE: cache # alternate form of lvcreate --type cache # (moves cachepool from option arg to position arg, # dropping the normal VG position arg) lvcreate --type cache --size SizeMB LV_cachepool OO: --stripes Number, --stripesize SizeKB, --cache, OO_LVCREATE_CACHE, OO_LVCREATE_POOL, OO_LVCREATE OP: PV ... ID: lvcreate_and_attach_cachepool_v3 DESC: Create a new LV, then attach the specified cachepool DESC: which converts the new LV to type cache. DESC: (variant, also use --cachepool). FLAGS: SECONDARY_SYNTAX # This command has two different meanings which ought to # have separate command defs, but since the syntax is the # same for both they have to share one command def with # an ambiguous meaning. Which command is performed depends # on whether the LV in the first arg position is a # cachepool or not (we can't have two different command # defs that differ only in the type of LV in the arg position # because when parsing commands we don't know the LV type.) # # 1. An alternate form of lvcreate_and_attach_cachepool_v3 # this syntax: lvcreate --cache --size SizeMB LV_cachepool # is alternative for: lvcreate --type cache --size SizeMB LV_cachepool # # 2. An alternative to using lvconvert to convert LV to type cache, # but in this case the cachepool is created internally and # then attached to the LV arg. # # Note that stripes are accepted by the first and not by the # second, but it's not possible to validate this until after # the LV type is known. lvcreate --cache --size SizeMB LV OO: OO_LVCREATE_CACHE, OO_LVCREATE_POOL, OO_LVCREATE, --stripes Number, --stripesize SizeKB OP: PV ... ID: lvcreate_new_plus_old_cachepool_or_lvconvert_old_plus_new_cachepool DESC: When the LV arg is a cachepool, then create a new LV and DESC: attach the cachepool arg to it. DESC: (variant, use --type cache and --cachepool.) DESC: When the LV arg is not a cachepool, then create a new cachepool DESC: and attach it to the LV arg (alternative, use lvconvert.) FLAGS: SECONDARY_SYNTAX AUTOTYPE: cache --- # These all create a new origin LV, then forwards to lvconvert # which combines it with a cachevol (which already exists or # which needs to be created from cachedevice), converting # the new LV to type cache or writecache. lvcreate --type cache --size SizeMB --cachevol LV VG OO: --stripes Number, --stripesize SizeKB, OO_LVCREATE_CACHE, OO_LVCREATE OP: PV ... ID: lvcreate_and_attach_cachevol_for_cache DESC: Create a new LV, then attach the specified cachevol DESC: which converts the new LV to type cache. lvcreate --type cache --size SizeMB --cachedevice PV VG OO: --stripes Number, --stripesize SizeKB, --cachesize SizeMB, OO_LVCREATE_CACHE, OO_LVCREATE OP: PV ... ID: lvcreate_and_attach_cachedevice_for_cache DESC: Create a new LV, then attach a cachevol created from DESC: the specified cache device, which converts the DESC: new LV to type cache. lvcreate --type writecache --size SizeMB --cachevol LV VG OO: OO_LVCREATE, --cachesettings String, --stripes Number, --stripesize SizeKB OP: PV ... ID: lvcreate_and_attach_cachevol_for_writecache DESC: Create a new LV, then attach the specified cachevol DESC: which converts the new LV to type writecache. lvcreate --type writecache --size SizeMB --cachedevice PV VG OO: OO_LVCREATE, --cachesize SizeMB, --cachesettings String, --stripes Number, --stripesize SizeKB OP: PV ... ID: lvcreate_and_attach_cachedevice_for_writecache DESC: Create a new LV, then attach a cachevol created from DESC: the specified cache device, which converts the DESC: new LV to type writecache. --- lvdisplay OO: --aligned, --all, --binary, --colon, --columns, --configreport ConfigReport, --foreign, --history, --ignorelockingfailure, --logonly, --maps, --noheadings, --nosuffix, --options String, --sort String, --readonly, --segments, --select String, --separator String, --shared, --unbuffered, --units Units OP: VG|LV|Tag ... IO: --partial, --ignoreskippedcluster, --reportformat ReportFmt ID: lvdisplay_general --- # --type is an option in lvextend/lvresize only so that the specified type # value can be checked to match the existing type; using it doesn't # currently enable any different behavior. # --extents is not specified; it's an automatic alternative for --size lvextend --size PSizeMB LV OO: --alloc Alloc, --autobackup Bool, --force, --mirrors Number, --nofsck, --nosync, --noudevsync, --reportformat ReportFmt, --resizefs, --stripes Number, --stripesize SizeKB, --poolmetadatasize PSizeMB, --type SegType, --fs String, --fsmode String OP: PV ... ID: lvextend_size DESC: Extend an LV by a specified size. lvextend LV PV ... OO: --alloc Alloc, --autobackup Bool, --force, --mirrors Number, --nofsck, --nosync, --noudevsync, --reportformat ReportFmt, --resizefs, --stripes Number, --stripesize SizeKB, --type SegType, --fs String, --fsmode String ID: lvextend_pv DESC: Extend an LV by specified PV extents. lvextend --poolmetadatasize PSizeMB LV_thinpool_linear OO: --alloc Alloc, --autobackup Bool, --force, --mirrors Number, --nofsck, --nosync, --noudevsync, --reportformat ReportFmt, --stripes Number, --stripesize SizeKB, --type SegType OP: PV ... ID: lvextend_pool_metadata DESC: Extend a pool metadata SubLV by a specified size. lvextend --usepolicies LV_snapshot_thinpool_vdopool OO: --alloc Alloc, --autobackup Bool, --force, --mirrors Number, --nofsck, --nosync, --noudevsync, --reportformat ReportFmt, --resizefs, --type SegType, --fs String, --fsmode String OP: PV ... ID: lvextend_policy DESC: Extend an LV according to a predefined policy. --- lvmconfig OO: OO_CONFIG OP: String ... ID: lvmconfig_general --- lvmdevices ID: lvmdevices_list DESC: Print devices in the devices file. lvmdevices --check ID: lvmdevices_check OO: --refresh DESC: Check the devices file and report incorrect values. lvmdevices --update OO: --delnotfound, --refresh ID: lvmdevices_update DESC: Update the devices file to fix incorrect values. lvmdevices --adddev PV OO: --deviceidtype String ID: lvmdevices_edit DESC: Add a device to the devices file. lvmdevices --deldev PV|String OO: --deviceidtype String ID: lvmdevices_edit DESC: Remove a device from the devices file. lvmdevices --addpvid String OO: --deviceidtype String ID: lvmdevices_edit DESC: Find the device with the given PVID and add it to the devices file. lvmdevices --delpvid String ID: lvmdevices_edit DESC: Remove the devices file entry for the given PVID. --- lvreduce --size NSizeMB LV OO: --autobackup Bool, --force, --nofsck, --noudevsync, --reportformat ReportFmt, --resizefs, --fs String, --fsmode String ID: lvreduce_size --- lvremove VG|LV|Tag|Select ... OO: --autobackup Bool, --force, --nohistory, --noudevsync, --reportformat ReportFmt, --select String ID: lvremove_general --- lvrename VG LV LV_new OO: --autobackup Bool, --noudevsync, --reportformat ReportFmt ID: lvrename_vg_lv_lv lvrename LV LV_new OO: --autobackup Bool, --noudevsync, --reportformat ReportFmt ID: lvrename_lv_lv --- # --type is an option in lvextend/lvresize only so that the specified type # value can be checked to match the existing type; using it doesn't # currently enable any different behavior. lvresize --size SSizeMB LV OO: --alloc Alloc, --autobackup Bool, --force, --nofsck, --nosync, --noudevsync, --reportformat ReportFmt, --resizefs, --stripes Number, --stripesize SizeKB, --poolmetadatasize PSizeMB, --type SegType, --fs String, --fsmode String OP: PV ... ID: lvresize_size DESC: Resize an LV by a specified size. lvresize LV PV ... OO: --alloc Alloc, --autobackup Bool, --force, --nofsck, --nosync, --noudevsync, --reportformat ReportFmt, --resizefs, --stripes Number, --stripesize SizeKB, --type SegType, --fs String, --fsmode String ID: lvresize_pv DESC: Resize an LV by specified PV extents. lvresize --poolmetadatasize PSizeMB LV_thinpool OO: --alloc Alloc, --autobackup Bool, --force, --nofsck, --nosync, --noudevsync, --reportformat ReportFmt, --stripes Number, --stripesize SizeKB, --type SegType OP: PV ... ID: lvresize_pool_metadata DESC: Resize a pool metadata SubLV by a specified size. --- lvs OO: --history, --segments, OO_REPORT OP: VG|LV|Tag ... IO: --partial, --ignoreskippedcluster, --trustcache ID: lvs_general RULE: --noheadings not --headings --- lvscan OO: --all, --blockdevice, --ignorelockingfailure, --readonly, --reportformat ReportFmt IO: --partial, --cache_long ID: lvscan_general --- # None of these can function as a required option for pvchange. OO_PVCHANGE: --autobackup Bool, --force, --reportformat ReportFmt, --uuid # Any of these can function as a required option for pvchange. OO_PVCHANGE_META: --allocatable Bool, --addtag Tag, --deltag Tag, --uuid, --metadataignore Bool pvchange --all OO_PVCHANGE_META OO: OO_PVCHANGE IO: --ignoreskippedcluster ID: pvchange_properties_all DESC: Change properties of all PVs. pvchange OO_PVCHANGE_META PV|Select ... OO: --select String, OO_PVCHANGE IO: --ignoreskippedcluster ID: pvchange_properties_some DESC: Change properties of specified PVs. --- pvresize PV ... OO: --setphysicalvolumesize SizeMB, --reportformat ReportFmt ID: pvresize_general --- pvck PV ... OO: --labelsector Number ID: pvck_general DESC: Check for metadata on a device pvck --dump DumpType PV OO: --settings String, --file String, --pvmetadatacopies MetadataCopiesPV, --labelsector Number ID: pvck_dump DESC: Check and print LVM headers and metadata on a device pvck --repairtype RepairType PV OO: --settings String, --file String, --labelsector Number ID: pvck_repair_type DESC: Repair LVM headers or metadata on a device pvck --repair --file String PV OO: --settings String, --labelsector Number ID: pvck_repair DESC: Repair LVM headers and metadata on a device --- # Use --uuidstr here which will be converted to uuidstr_ARG # which is actually --uuid string on the command line. pvcreate PV ... OO: --dataalignment SizeKB, --dataalignmentoffset SizeKB, --bootloaderareasize SizeMB, --force, --labelsector Number, --metadatatype MetadataType, --pvmetadatacopies MetadataCopiesPV, --metadatasize SizeMB, --metadataignore Bool, --norestorefile, --setphysicalvolumesize SizeMB, --reportformat ReportFmt, --restorefile String, --uuidstr String, --zero Bool ID: pvcreate_general RULE: --norestorefile not --restorefile RULE: --bootloaderareasize not --restorefile --- pvdisplay OO: --aligned, --all, --binary, --colon, --columns, --configreport ConfigReport, --foreign, --ignorelockingfailure, --logonly, --maps, --noheadings, --nosuffix, --options String, --readonly, --reportformat ReportFmt, --select String, --separator String, --shared, --short, --sort String, --unbuffered, --units Units OP: PV|Tag ... IO: --ignoreskippedcluster ID: pvdisplay_general --- pvmove PV OO: --abort, --alloc Alloc, --atomic, --autobackup Bool, --background, --interval Number, --name LV, --noudevsync, --reportformat ReportFmt OP: PV ... ID: pvmove_one DESC: Move PV extents. pvmove OO: --abort, --background, --interval Number ID: pvmove_any DESC: Continue or abort existing pvmove operations. --- pvremove PV ... OO: --force, --reportformat ReportFmt ID: pvremove_general --- pvs OO: --segments, --allpvs, OO_REPORT OP: PV|Tag ... IO: --partial, --ignoreskippedcluster, --trustcache ID: pvs_general RULE: --noheadings not --headings --- pvscan OO: --ignorelockingfailure, --reportformat ReportFmt, --exported, --novolumegroup, --short, --uuid, --allpvs ID: pvscan_display DESC: Display PV information. pvscan --cache_long OO: --ignorelockingfailure, --reportformat ReportFmt, --major Number, --minor Number, --noudevsync OP: PV|String ... IO: --background ID: pvscan_cache DESC: Record that a PV is online or offline. pvscan --cache_long --activate ay OO: --ignorelockingfailure, --reportformat ReportFmt, --major Number, --minor Number, --noudevsync, --autoactivation String OP: PV|String ... IO: --background ID: pvscan_cache DESC: Record that a PV is online and autoactivate the VG if complete. pvscan --cache_long --listvg PV OO: --ignorelockingfailure, --checkcomplete, --vgonline, --udevoutput, --autoactivation String ID: pvscan_cache DESC: Record that a PV is online and list the VG using the PV. pvscan --cache_long --listlvs PV OO: --ignorelockingfailure, --checkcomplete, --vgonline ID: pvscan_cache DESC: Record that a PV is online and list LVs using the PV. pvscan --listlvs PV ID: pvscan_cache DESC: List LVs using the PV. pvscan --listvg PV ID: pvscan_cache DESC: List the VG using the PV. --- vgcfgbackup OO: --file String, --foreign, --ignorelockingfailure, --readonly, --reportformat ReportFmt OP: VG ... IO: --partial ID: vgcfgbackup_general --- OO_VGCFGRESTORE: --force_long, --metadatatype MetadataType vgcfgrestore VG OO: OO_VGCFGRESTORE ID: vgcfgrestore_by_vg DESC: Restore VG metadata from last backup. vgcfgrestore --file String VG OO: OO_VGCFGRESTORE ID: vgcfgrestore_by_file DESC: Restore VG metadata from specified file. vgcfgrestore --list VG OO: OO_VGCFGRESTORE ID: vgcfgrestore_list_by_vg DESC: List all VG metadata backups. # FIXME: the optional VG pos arg is not used or checked and can be # anything, but a test in the test suite uses it. Fix the test or # verify that the positional VG is correct? vgcfgrestore --list --file String OO: OO_VGCFGRESTORE OP: VG ID: vgcfgrestore_list_by_file DESC: List one VG metadata backup file. --- # None of these can function as a required option for vgchange. OO_VGCHANGE: --autobackup Bool, --ignoremonitoring, --noudevsync, --reportformat ReportFmt, --select String, --force # Any of these can function as a required option for vgchange. # profile is also part of OO_ALL, but is repeated in OO_VGCHANGE_META # because it can function as a required opt. OO_VGCHANGE_META: --addtag Tag, --deltag Tag, --logicalvolume Uint32, --maxphysicalvolumes Uint32, --alloc Alloc, --uuid, --pvmetadatacopies MetadataCopiesPV, --vgmetadatacopies MetadataCopiesVG, --physicalextentsize SizeMB, --resizeable Bool, --profile String, --detachprofile, --metadataprofile String, --setautoactivation Bool vgchange OO_VGCHANGE_META OO: --poll Bool, OO_VGCHANGE OP: VG|Tag|Select ... IO: --ignoreskippedcluster ID: vgchange_properties DESC: Change a general VG attribute. DESC: For options listed in parentheses, any one is DESC: required, after which the others are optional. vgchange --monitor Bool OO: --sysinit, --ignorelockingfailure, --poll Bool, OO_VGCHANGE OP: VG|Tag|Select ... IO: --ignoreskippedcluster ID: vgchange_monitor DESC: Start or stop monitoring LVs from dmeventd. vgchange --poll Bool OO: --ignorelockingfailure, OO_VGCHANGE OP: VG|Tag|Select ... IO: --ignoreskippedcluster ID: vgchange_poll DESC: Start or stop processing LV conversions. vgchange --activate Active OO: --activationmode ActivationMode, --ignoreactivationskip, --partial, --sysinit, --readonly, --ignorelockingfailure, --monitor Bool, --poll Bool, --autoactivation String, OO_VGCHANGE OP: VG|Tag|Select ... IO: --ignoreskippedcluster ID: vgchange_activate DESC: Activate or deactivate LVs. vgchange --refresh OO: --sysinit, --ignorelockingfailure, --poll Bool, OO_VGCHANGE OP: VG|Tag|Select ... IO: --ignoreskippedcluster ID: vgchange_refresh DESC: Reactivate LVs using the latest metadata. vgchange --systemid String VG|Tag|Select OO: --select String, --majoritypvs ID: vgchange_systemid DESC: Change the system ID of a VG. vgchange --lockstart OO: --select String OP: VG|Tag|Select ... ID: vgchange_lockstart DESC: Start the lockspace of a shared VG in lvmlockd. vgchange --lockstop OO: --select String OP: VG|Tag|Select ... ID: vgchange_lockstop DESC: Stop the lockspace of a shared VG in lvmlockd. vgchange --locktype LockType VG ID: vgchange_locktype DESC: Change the lock type for a shared VG. --- vgck OO: --reportformat ReportFmt OP: VG|Tag ... ID: vgck_general DESC: Read and display information about a VG. vgck --updatemetadata VG ID: vgck_update_metadata DESC: Rewrite VG metadata to correct problems. --- vgcreate VG_new PV ... OO: --addtag Tag, --alloc Alloc, --autobackup Bool, --clustered Bool, --maxlogicalvolumes Uint32, --maxphysicalvolumes Uint32, --metadataprofile String, --metadatatype MetadataType, --physicalextentsize SizeMB, --force, --zero Bool, --labelsector Number, --metadatasize SizeMB, --pvmetadatacopies MetadataCopiesPV, --vgmetadatacopies MetadataCopiesVG, --reportformat ReportFmt, --dataalignment SizeKB, --dataalignmentoffset SizeKB, --shared, --systemid String, --locktype LockType, --setautoactivation Bool ID: vgcreate_general --- vgdisplay OO: --activevolumegroups, --aligned, --binary, --colon, --columns, --configreport ConfigReport, --foreign, --ignorelockingfailure, --logonly, --noheadings, --nosuffix, --options String, --readonly, --select String, --shared, --short, --separator String, --sort String, --unbuffered, --units Units OP: VG|Tag ... IO: --partial, --ignoreskippedcluster, --reportformat ReportFmt ID: vgdisplay_general --- OO_VGEXPORT: --reportformat ReportFmt vgexport VG|Tag|Select ... OO: --select String, OO_VGEXPORT ID: vgexport_some DESC: Export specified VGs. vgexport --all OO: OO_VGEXPORT ID: vgexport_all DESC: Export all VGs. --- vgextend VG PV ... OO: --autobackup Bool, --force, --zero Bool, --labelsector Number, --metadatatype MetadataType, --metadatasize SizeMB, --pvmetadatacopies MetadataCopiesPV, --metadataignore Bool, --dataalignment SizeKB, --dataalignmentoffset SizeKB, --reportformat ReportFmt, --restoremissing ID: vgextend_general --- OO_VGIMPORT: --force, --reportformat ReportFmt vgimport VG|Tag|Select ... OO: --select String, OO_VGIMPORT ID: vgimport_some DESC: Import specified VGs. vgimport --all OO: OO_VGIMPORT ID: vgimport_all DESC: Import all VGs. --- vgimportclone PV ... OO: --basevgname VG, --import, --importdevices ID: vgimportclone_general --- vgimportdevices VG|Tag|Select ... OO: --select String, --foreign, --reportformat ReportFmt ID: vgimportdevices_some DESC: Add devices from specific VGs to the devices file. vgimportdevices --all OO: --foreign, --reportformat ReportFmt ID: vgimportdevices_all DESC: Add devices from all accessible VGs to the devices file. --- vgmerge VG VG OO: --autobackup Bool, --list, --poolmetadataspare Bool ID: vgmerge_general --- vgmknodes OO: --ignorelockingfailure, --refresh, --reportformat ReportFmt OP: VG|LV|Tag ... ID: vgmknodes_general --- OO_VGREDUCE: --autobackup Bool, --force, --reportformat ReportFmt vgreduce VG PV ... OO: OO_VGREDUCE ID: vgreduce_by_pv DESC: Remove a PV from a VG. vgreduce --all VG OO: OO_VGREDUCE ID: vgreduce_all DESC: Remove all unused PVs from a VG. vgreduce --removemissing VG OO: --mirrorsonly, OO_VGREDUCE ID: vgreduce_missing DESC: Remove all missing PVs from a VG. --- vgremove VG|Tag|Select ... OO: --force, --noudevsync, --reportformat ReportFmt, --select String ID: vgremove_general --- vgrename VG VG_new OO: --autobackup Bool, --force, --reportformat ReportFmt ID: vgrename_by_name DESC: Rename a VG. vgrename String VG_new OO: --autobackup Bool, --force, --reportformat ReportFmt ID: vgrename_by_uuid DESC: Rename a VG by specifying the VG UUID. --- vgs OO: OO_REPORT OP: VG|Tag ... IO: --partial, --ignoreskippedcluster, --trustcache ID: vgs_general RULE: --noheadings not --headings --- vgscan OO: --ignorelockingfailure, --mknodes, --notifydbus, --reportformat ReportFmt IO: --partial, --cache_long ID: vgscan_general --- OO_VGSPLIT: --autobackup Bool, --poolmetadataspare Bool # used only when the destination VG is new OO_VGSPLIT_NEW: --alloc Alloc, --maxlogicalvolumes Uint32, --maxphysicalvolumes Uint32, --metadatatype MetadataType, --vgmetadatacopies MetadataCopiesVG vgsplit VG VG PV ... OO: OO_VGSPLIT, OO_VGSPLIT_NEW ID: vgsplit_by_pv DESC: Split a VG by specified PVs. vgsplit --name LV VG VG OO: OO_VGSPLIT, OO_VGSPLIT_NEW ID: vgsplit_by_lv DESC: Split a VG by PVs in a specified LV. --- # built-in and deprecated commands # use lvmconfig config OO: OO_CONFIG OP: String ... ID: lvmconfig_general # use lvmconfig dumpconfig OO: OO_CONFIG OP: String ... ID: lvmconfig_general devtypes OO: --aligned, --binary, --nameprefixes, --noheadings, --nosuffix, --options String, --reportformat ReportFmt, --rows, --select String, --separator String, --sort String, --unbuffered, --unquoted ID: devtypes_general fullreport OO: OO_REPORT OP: VG ... IO: --partial, --ignoreskippedcluster, --trustcache ID: fullreport_general RULE: --noheadings not --headings lastlog OO: --reportformat ReportFmt, --select String ID: lastlog_general lvpoll --polloperation PollOp LV ... OO: --abort, --autobackup Bool, --handlemissingpvs, --interval Number ID: lvpoll_general formats ID: formats_general help OP: String ... ID: help_general version ID: version_general # deprecated pvdata ID: pvdata_general segtypes ID: segtypes_general systemid ID: systemid_general tags ID: tags_general # deprecated lvmchange ID: lvmchange_general # deprecated lvmdiskscan OO: --lvmpartition, --readonly ID: lvmdiskscan_general # deprecated lvmsadc ID: lvmsadc_general # deprecated lvmsar OO: --full, --stdin ID: lvmsar_general # deprecated vgconvert VG ... OO: --force, --labelsector Number, --bootloaderareasize SizeMB, --metadatatype MetadataType, --pvmetadatacopies MetadataCopiesPV, --metadatasize SizeMB, --reportformat ReportFmt ID: vgconvert_general