dwww Home | Manual pages | Find package

PVMOVE(8)                   System Manager's Manual                   PVMOVE(8)

NAME
       pvmove — Move extents from one physical volume to another

SYNOPSIS
       pvmove position_args
           [ option_args ]
           [ position_args ]

DESCRIPTION
       pvmove  moves the allocated physical extents (PEs) on a source PV to one
       or more destination PVs.  You can optionally  specify  a  source  LV  in
       which case only extents used by that LV will be moved to free (or speci-
       fied)  extents on the destination PV. If no destination PV is specified,
       the normal allocation rules for the VG are used.

       If pvmove is interrupted for any reason (e.g. the machine crashes)  then
       run pvmove again without any PV arguments to restart any operations that
       were  in progress from the last checkpoint. Alternatively, use the abort
       option at any time to abort the operation. The resulting location of LVs
       after an abort depends on whether the atomic option was used.

       More than one pvmove can run concurrently if they are moving  data  from
       different source PVs, but additional pvmoves will ignore any LVs already
       in the process of being changed, so some data might not get moved.

USAGE
       Move PV extents.

       pvmove PV
           [ -A|--autobackup y|n ]
           [ -n|--name LV ]
           [    --alloc contiguous|cling|cling_by_tags|normal|anywhere|inherit
           ]
           [    --atomic ]
           [    --noudevsync ]
           [    --reportformat basic|json|json_std ]
           [ COMMON_OPTIONS ]
           [ PV ... ]

       Continue or abort existing pvmove operations.

       pvmove
           [ COMMON_OPTIONS ]

       Common options for command:
           [ -b|--background ]
           [ -i|--interval Number ]
           [    --abort ]

       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

       --abort
              Abort  any pvmove operations in progress. If a pvmove was started
              with the --atomic option, then all LVs will remain on the  source
              PV.   Otherwise, segments that have been moved will remain on the
              destination PV, while unmoved segments will remain on the  source
              PV.

       --alloc contiguous|cling|cling_by_tags|normal|anywhere|inherit
              Determines the allocation policy when a command needs to allocate
              Physical Extents (PEs) from the VG. Each VG and LV has an alloca-
              tion policy which can be changed with vgchange/lvchange, or over-
              ridden  on  the  command line.  normal applies common sense rules
              such as not placing parallel stripes on the same PV.  inherit ap-
              plies the VG policy to an LV.  contiguous  requires  new  PEs  be
              placed  adjacent  to  existing  PEs.  cling places new PEs on the
              same PV as existing PEs in the same stripe of the LV.   If  there
              are  sufficient  PEs  for  an allocation, but normal does not use
              them, anywhere will use them even if it reduces performance, e.g.
              by placing two stripes on the same PV.   Optional  positional  PV
              args  on the command line can also be used to limit which PVs the
              command will use for allocation.  See lvm(8) for more information
              about allocation.

       --atomic
              Makes a pvmove operation atomic, ensuring that all  affected  LVs
              are  moved to the destination PV, or none are if the operation is
              aborted.

       -A|--autobackup y|n
              Specifies if metadata should be backed up automatically  after  a
              change.   Enabling  this is strongly advised!  See vgcfgbackup(8)
              for more information.

       -b|--background
              If the operation requires polling, this option causes the command
              to return before the operation is complete, and polling  is  done
              in the background.

       --commandprofile String
              The  command  profile  to  use  for  command  configuration.  See
              lvm.conf(5) for more information about profiles.

       --config String
              Config settings for the command. These override lvm.conf(5)  set-
              tings.   The  String  arg uses the same format as lvm.conf(5), or
              may use section/field syntax.  See lvm.conf(5) for more  informa-
              tion about config.

       -d|--debug ...
              Set  debug level. Repeat from 1 to 6 times to increase the detail
              of messages sent to the log file and/or syslog (if configured).

       --devices PV
              Restricts the devices that are visible and accessible to the com-
              mand.  Devices not listed will appear to be missing. This  option
              can  be  repeated,  or 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) com-
              mand.  This overrides the lvm.conf(5) devices/devicesfile and de-
              vices/use_devicesfile settings.

       --driverloaded y|n
              If set to no, the command will not attempt to use  device-mapper.
              For testing and debugging.

       -h|--help
              Display help text.

       -i|--interval Number
              Report progress at regular intervals.

       --journal String
              Record  information  in the systemd journal.  This information is
              in addition to information enabled by  the  lvm.conf  log/journal
              setting.  command: record information about the command.  output:
              record  the  default  command output.  debug: record full command
              debugging.

       --lockopt String
              Used to pass options for special cases  to  lvmlockd.   See  lvm-
              lockd(8) for more information.

       --longhelp
              Display long help text.

       -n|--name String
              Move only the extents belonging to the named LV.

       --nohints
              Do  not  use  the hints file to locate devices for PVs. A command
              may read more devices to find PVs when hints are  not  used.  The
              command  will still perform standard hint file invalidation where
              appropriate.

       --nolocking
              Disable locking. Use with caution, concurrent commands  may  pro-
              duce incorrect results.

       --noudevsync
              Disables  udev synchronization. The process will not wait for no-
              tification from udev. It will continue irrespective of any possi-
              ble udev processing in the background. Only use this if  udev  is
              not running or has rules that ignore the devices LVM creates.

       --profile String
              An  alias for --commandprofile or --metadataprofile, depending on
              the command.

       -q|--quiet ...
              Suppress output and log messages. Overrides  --debug  and  --ver-
              bose.  Repeat once to also suppress any prompts with answer 'no'.

       --reportformat basic|json|json_std
              Overrides  current  output  format  for  reports which is defined
              globally by the report/output_format setting in lvm.conf(5).  ba-
              sic is the original format with columns and rows.   If  there  is
              more  than  one  report per command, each report is prefixed with
              the report name for identification. json produces  report  output
              in  JSON  format.  json_std produces report output in JSON format
              which is more compliant with JSON standard.  See lvmreport(7) for
              more information.

       -t|--test
              Run in test mode. Commands will not update metadata.  This is im-
              plemented by disabling all metadata writing but nevertheless  re-
              turning 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  de-
              tail of messages sent to stdout and stderr.

       --version
              Display version information.

       -y|--yes
              Do  not  prompt  for confirmation interactively but always assume
              the answer yes. Use with extreme caution.  (For automatic no, see
              -qq.)

VARIABLES
       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  ex-
              tents  (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  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 information about the string  con-
              tent.

       Size[UNIT]
              Size  is  an  input  number that accepts an optional unit.  Input
              units are always treated as base two values, regardless of  capi-
              talization, e.g. 'k' and 'K' both refer to 1024.  The default in-
              put  unit is specified by letter, followed by |UNIT.  UNIT repre-
              sents 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.  (This should not be confused  with  the  output
              control --units, where capital letters mean multiple of 1000.)

ENVIRONMENT VARIABLES
       See lvm(8) for information about environment variables used by lvm.  For
       example,  LVM_VG_NAME can generally be substituted for a required VG pa-
       rameter.

NOTES
       pvmove works as follows:

       1. A temporary 'pvmove' LV is created to store details of all  the  data
       movements required.

       2.  Every  LV in the VG is searched for contiguous data that need moving
       according to the command line arguments.  For each piece of data  found,
       a  new segment is added to the end of the pvmove LV.  This segment takes
       the form of a temporary mirror to copy the data from the original  loca-
       tion  to  a newly allocated location.  The original LV is updated to use
       the new temporary mirror segment in the pvmove LV instead  of  accessing
       the data directly.

       3. The VG metadata is updated on disk.

       4.  The first segment of the pvmove LV is activated and starts to mirror
       the first part of the data.  Only one segment is  mirrored  at  once  as
       this is usually more efficient.

       5.  A  daemon repeatedly checks progress at the specified time interval.
       When it detects that the first temporary mirror is in  sync,  it  breaks
       that  mirror  so  that only the new location for that data gets used and
       writes a checkpoint into the VG metadata on disk.  Then it activates the
       mirror for the next segment of the pvmove LV.

       6. When there are no more segments left to be mirrored, the temporary LV
       is removed and the VG metadata is updated so that the  LVs  reflect  the
       new data locations.

       Note  that this new process cannot support the original LVM1 type of on-
       disk metadata.  Metadata can be converted using vgconvert(8).

       If the --atomic option is used, a slightly different  approach  is  used
       for  the  move.   Again, a temporary 'pvmove' LV is created to store the
       details of all the data movements required.  This temporary LV  contains
       all  the segments of the various LVs that need to be moved.  However, in
       this case, an identical LV is allocated that contains the same number of
       segments and a mirror is created to copy the  contents  from  the  first
       temporary  LV  to the second.  After a complete copy is made, the tempo-
       rary LVs are removed, leaving behind the segments on the destination PV.
       If an abort is issued during the move, all LVs being moved  will  remain
       on the source PV.

EXAMPLES
       Move  all  physical extents that are used by simple LVs on the specified
       PV to free physical extents elsewhere in the VG.
       pvmove /dev/sdb1

       Use a specific destination PV when moving physical extents.
       pvmove /dev/sdb1 /dev/sdc1

       Move extents belonging to a single LV.
       pvmove -n lvol1 /dev/sdb1 /dev/sdc1

       Rather than moving the contents of an entire device, it is  possible  to
       move  a  range of physical extents, for example numbers 1000 to 1999 in-
       clusive on the specified PV.
       pvmove /dev/sdb1:1000-1999

       A range of physical extents to move can be  specified  as  start+length.
       For  example,  starting  from  PE 1000. (Counting starts from 0, so this
       refers to the 1001st to the 2000th PE inclusive.)
       pvmove /dev/sdb1:1000+1000

       Move a range of physical extents to a specific PV (which must have  suf-
       ficient free extents).
       pvmove /dev/sdb1:1000-1999 /dev/sdc1

       Move a range of physical extents to specific new extents on a new PV.
       pvmove /dev/sdb1:1000-1999 /dev/sdc1:0-999

       If the source and destination are on the same disk, the anywhere alloca-
       tion policy is needed.
       pvmove --alloc anywhere /dev/sdb1:1000-1999 /dev/sdb1:0-999

       The  part of a specific LV present within in a range of physical extents
       can also be picked out and moved.
       pvmove -n lvol1 /dev/sdb1:1000-1999 /dev/sdc1

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), cmirrord(8),
       lvmdbusd(8), fsadm(8),

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

Red Hat, Inc.          LVM TOOLS 2.03.31(2) (2025-02-27)              PVMOVE(8)

Generated by dwww version 1.16 on Tue Dec 16 04:57:49 CET 2025.