VGSPLIT(8)

πŸ’– VGSPLIT πŸ’–

okay so bestie, this is vgsplit from section 8 of the System Manager's Manual, and it's literally the "moving out" of the LVM world β€” it takes physical volumes and moves them into a new or an existing volume group. let's get into it πŸ¦‹


✨ NAME ✨

vgsplit β€” Move physical volumes into a new or existing volume group


🌸 SYNOPSIS 🌸

vgsplit option_args position_args
       [ option_args ]

πŸ’œ DESCRIPTION πŸ’œ

ok so here's the tea β˜• β€” vgsplit takes one or more PVs and moves them from a source VG (that's the first VG arg) to a destination VG (that's the second VG arg). which PVs get moved? the ones you list after the source and destination VGs. OR β€” plot twist β€” you can name an LV, and in that case the PVs underlying that LV are the ones that get moved. main character energy, honestly.

if the destination VG doesn't exist yet? no worries, a whole new VG gets created ✨ (and you can use command options to specify the properties of that new VG, also see vgcreate(8)).

big important rule: LVs cannot be split between VGs. each LV must be entirely on the PVs in the source VG or entirely on the PVs in the destination VG. no halfsies. periodt.

and also β€” vgsplit can only move complete PVs. like, whole entire PVs, not bits of them. (if you need to move part of a PV, see pvmove(8), that's her job πŸ’…)


πŸŽ€ USAGE πŸŽ€

Split a VG by specified PVs.

vgsplit VG VG PV ...
       [ COMMON_OPTIONS ]

β€”

Split a VG by PVs in a specified LV.

vgsplit -n|--name LV VG VG
       [ COMMON_OPTIONS ]

β€”

Common options for command:

[ -A|--autobackup y|n ]
[ -l|--maxlogicalvolumes Number ]
[ -p|--maxphysicalvolumes Number ]
[ -M|--metadatatype lvm2 ]
[ --alloc contiguous|cling|cling_by_tags|normal|anywhere|inherit
]
[ --poolmetadataspare y|n ]
[ --[vg]metadatacopies all|unmanaged|Number ]

Common options for lvm:

[ -d|--debug ... ]
[ -h|--help ]
[ -q|--quiet ... ]
[ -t|--test ]
[ -v|--verbose ... ]
[ -y|--yes ]
[ --commandprofile String ]
[ --config String ]
[ --devices PV ]
[ --devicesfile String ]
[ --driverloaded y|n ]
[ --journal String ]
[ --lockopt String ]
[ --longhelp ]
[ --nohints ]
[ --nolocking ]
[ --profile String ]
[ --version ]

✨ OPTIONS ✨

  • --alloc contiguous|cling|cling_by_tags|normal|anywhere|inherit β€” this decides the allocation policy when a command needs to grab Physical Extents (PEs) out of the VG. every VG and every LV has an allocation policy, and you can change it with vgchange/lvchange, or just override it right here on the command line. normal is the sensible bestie β€” it applies common sense rules like not putting parallel stripes on the same PV. inherit passes the VG policy down to an LV. contiguous requires new PEs to sit right next to existing PEs (adjacent, cozy). cling puts new PEs on the same PV as existing PEs in the same stripe of the LV. and if there are enough PEs for an allocation but normal won't use them, anywhere will use them anyway β€” even if it tanks performance, like by putting two stripes on the same PV 😭. also, optional positional PV args on the command line can limit which PVs the command will use for allocation. see lvm(8) for more about allocation.
  • -A|--autobackup y|n β€” says whether metadata should get backed up automatically after a change. enabling this is strongly advised!! see vgcfgbackup(8) for more deets.
  • --commandprofile String β€” the command profile to use for command configuration. see lvm.conf(5) for more about profiles.
  • --config String β€” config settings for the command. these override lvm.conf(5) settings. the String arg uses the same format as lvm.conf(5), or you can use section/field syntax. see lvm.conf(5) for more about config.
  • -d|--debug ... β€” set debug level. repeat it from 1 to 6 times to crank up the detail of messages sent to the log file and/or syslog (if configured).
  • --devices PV β€” restricts which devices are visible and accessible to the command. devices not listed will look like they're missing. this option can be repeated, or it accepts a comma-separated list of devices. this overrides the devices file.
  • --devicesfile String β€” a file listing devices that LVM should use. the file must exist in /etc/lvm/devices/ and is managed with the lvmdevices(8) command. this overrides the lvm.conf(5) devices/devicesfile and devices/use_devicesfile settings.
  • --driverloaded y|n β€” if set to no, the command will not even attempt to use device-mapper. for testing and debugging πŸ§ͺ
  • -h|--help β€” display help text.
  • --journal String β€” record information in the systemd journal. this is in addition to whatever the lvm.conf log/journal setting already enables. command: records info about the command. output: records the default command output. debug: records full command debugging.
  • --lockopt String β€” used to pass options for special cases to lvmlockd. see lvmlockd(8) for more.
  • --longhelp β€” display long help text.
  • -l|--maxlogicalvolumes Number β€” sets the max number of LVs allowed in a VG.
  • -p|--maxphysicalvolumes Number β€” sets the max number of PVs that can belong to the VG. the value 0 removes any limitation. for big numbers of PVs, also peep the options --pvmetadatacopies and --vgmetadatacopies for improving performance.
  • -M|--metadatatype lvm2 β€” specifies the type of on-disk metadata to use. lvm2 (or just 2) is the current, standard format ✨. lvm1 (or just 1) is no longer used.
  • -n|--name String β€” move only the PVs used by the named LV.
  • --nohints β€” don't use the hints file to locate devices for PVs. a command may read more devices to find PVs when hints aren't used. it will still perform standard hint file invalidation where appropriate.
  • --nolocking β€” disable locking. use with caution β€” concurrent commands may produce incorrect results πŸ’€
  • --poolmetadataspare y|n β€” enable or disable the automatic creation and management of a spare pool metadata LV in the VG. a spare metadata LV is reserved space that can be used when repairing a pool.
  • --profile String β€” an alias for --commandprofile or --metadataprofile, depending on the command.
  • -q|--quiet ... β€” suppress output and log messages. overrides --debug and --verbose. repeat once to also suppress any prompts with answer 'no'.
  • -t|--test β€” run in test mode. commands will not update metadata. this is implemented by disabling all metadata writing but still returning success to the calling function. ⚠️ this may lead to unusual error messages in multi-stage operations if a tool relies on reading back metadata it believes has changed but hasn't.
  • -v|--verbose ... β€” set verbose level. repeat from 1 to 4 times to increase the detail of messages sent to stdout and stderr.
  • --version β€” display version information.
  • --[vg]metadatacopies all|unmanaged|Number β€” number of copies of the VG metadata that are kept. VG metadata lives in VG metadata areas on PVs in the VG, i.e. reserved space at the start and/or end of the PVs. keeping a copy of the VG metadata on every PV can reduce performance in VGs with a large number of PVs. when this number is set to a non-zero value, LVM will automatically choose PVs on which to store metadata, using the metadataignore flags on PVs to hit the number you asked for. the number can also be replaced with special string values: unmanaged means LVM won't automatically manage the PV metadataignore flags. all means LVM first clears the metadataignore flags on all PVs, and then becomes unmanaged.
  • -y|--yes β€” don't prompt for confirmation interactively, just always assume the answer is yes. use with extreme caution. (for automatic no, see -qq.)

πŸ¦‹ VARIABLES πŸ¦‹

  • VG β€” Volume Group name. see lvm(8) for valid names.
  • PV β€” Physical Volume name, a device path under /dev. for commands managing physical extents, a PV positional arg generally accepts a suffix indicating a range (or multiple ranges) of physical extents (PEs). when the first PE is omitted, it defaults to the start of the device, and when the last PE is omitted it defaults to the end.

Start and end range (inclusive): PV[:PE-PE] ...

Start and length range (counting from 0): PV[:PE+PE] ...

  • String β€” see the option description for info about the string content.
  • Size[UNIT] β€” Size is an input number that accepts an optional unit. input units are always treated as base two values, regardless of capitalization β€” e.g. 'k' and 'K' both mean 1024. the default input unit is specified by letter, followed by |UNIT. UNIT represents the other possible input units: b|B is bytes, s|S is sectors of 512 bytes, k|K is KiB, m|M is MiB, g|G is GiB, t|T is TiB, p|P is PiB, e|E is EiB. (don't confuse this with the output control --units, where capital letters mean multiple of 1000.)

🌈 ENVIRONMENT VARIABLES 🌈

see lvm(8) for info about environment variables used by lvm. for example, LVM_VG_NAME can generally be substituted for a required VG parameter. πŸ’…


πŸ‘‘ SEE ALSO πŸ‘‘

lvm(8), lvm.conf(5), lvmconfig(8), lvmdevices(8),

pvchange(8), pvck(8), pvcreate(8), pvdisplay(8), pvmove(8), pvremove(8), pvresize(8), pvs(8), pvscan(8),

vgcfgbackup(8), vgcfgrestore(8), vgchange(8), vgck(8), vgcreate(8), vgconvert(8), vgdisplay(8), vgexport(8), vgextend(8), vgimport(8), vgimportclone(8), vgimportdevices(8), vgmerge(8), vgmknodes(8), vgreduce(8), vgremove(8), vgrename(8), vgs(8), vgscan(8), vgsplit(8),

lvcreate(8), lvchange(8), lvconvert(8), lvdisplay(8), lvextend(8), lvreduce(8), lvremove(8), lvrename(8), lvresize(8), lvs(8), lvscan(8),

lvm-fullreport(8), lvm-lvpoll(8), blkdeactivate(8), lvmdump(8),

dmeventd(8), lvmpolld(8), lvmlockd(8), lvmlockctl(8), lvmdbusd(8), fsadm(8),

lvmsystemid(7), lvmreport(7), lvmcache(7), lvmraid(7), lvmthin(7), lvmvdo(7), lvmautoactivation(7)


and that's the whole page bestie, you ate that 🫢

cute little sign-off: this one's brought to you by Red Hat, Inc., it's LVM TOOLS 2.03.44(2) from 2026-10-27, and it lives at page VGSPLIT(8). go forth and split responsibly πŸ’–βœ¨
πŸ“¦ where this page comes from