mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
188 lines
6.7 KiB
Groff
188 lines
6.7 KiB
Groff
.TH PVMOVE 8 "LVM TOOLS #VERSION#" "Sistina Software UK" \" -*- nroff -*-
|
|
.SH NAME
|
|
pvmove \(em move physical extents
|
|
.SH SYNOPSIS
|
|
.B pvmove
|
|
.RB [ \-\-abort ]
|
|
.RB [ \-\-alloc
|
|
.IR AllocationPolicy ]
|
|
.RB [ \-\-atomic ]
|
|
.RB [ \-b | \-\-background ]
|
|
.RB [ \-\-commandprofile
|
|
.IR ProfileName ]
|
|
.RB [ \-d | \-\-debug ]
|
|
.RB [ \-h | \-\-help ]
|
|
.RB [ \-i | \-\-interval
|
|
.IR Seconds ]
|
|
.RB [ \-\-noudevsync ]
|
|
.RB [ \-\-reportformat
|
|
.RB { basic | json }]
|
|
.RB [ \-v | \-\-verbose ]
|
|
.RB [ \-n | \-\-name
|
|
.IR LogicalVolume ]
|
|
.RI [ SourcePhysicalVolume [ :PE [ \-PE ]...]
|
|
.RI [ DestinationPhysicalVolume [ :PE [ \-PE ]...]...]]
|
|
.SH DESCRIPTION
|
|
pvmove allows you to move the allocated physical extents (PEs) on
|
|
.I SourcePhysicalVolume
|
|
to one or more other physical volumes (PVs).
|
|
You can optionally specify a source
|
|
.I LogicalVolume
|
|
in which case only extents used by that LV will be moved to
|
|
free (or specified) extents on
|
|
.IR DestinationPhysicalVolume (s).
|
|
If no
|
|
.I DestinationPhysicalVolume
|
|
is specified, the normal allocation rules for the Volume Group are used.
|
|
|
|
If pvmove gets interrupted for any reason (e.g. the machine crashes)
|
|
then run pvmove again without any PhysicalVolume arguments to
|
|
restart any moves that were in progress from the last checkpoint.
|
|
Alternatively use \fBpvmove \-\-abort\fP at any time to abort. The
|
|
resulting location of logical volumes after an abort is issued depends
|
|
on whether the
|
|
.B \-\-atomic
|
|
option was used when starting the pvmove process.
|
|
|
|
You can run more than one pvmove at once provided they are moving data
|
|
off different SourcePhysicalVolumes, but additional pvmoves will ignore
|
|
any Logical Volumes already in the process of being changed, so some
|
|
data might not get moved.
|
|
|
|
\fBpvmove\fP works as follows:
|
|
|
|
1. A temporary 'pvmove' Logical Volume is created to store
|
|
details of all the data movements required.
|
|
|
|
2. Every Logical Volume in the Volume Group 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 location 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 Volume Group metadata is updated on disk.
|
|
|
|
4. The first segment of the pvmove Logical Volume 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 Volume Group 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 Logical Volume is removed and the Volume Group metadata
|
|
is updated so that the Logical Volumes 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 \fBvgconvert\fP(8).
|
|
|
|
If the
|
|
.B \-\-atomic
|
|
option is used, a slightly different approach is used for the move. Again,
|
|
a temporary 'pvmove' logical volume 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 this time, an identical
|
|
logical volume 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. When a complete copy is accomplished, the temporary logical volumes
|
|
are removed, leaving behind the segments on the destination physical volume.
|
|
If an abort is issued during the move, all logical volumes being moved will
|
|
remain on the source physical volume.
|
|
|
|
.SH OPTIONS
|
|
See \fBlvm\fP(8) for common options.
|
|
.TP
|
|
.B \-\-abort
|
|
Abort any moves in progress. If the
|
|
.B \-\-atomic
|
|
option was used to start the pvmove, all logical volumes will remain on
|
|
the source physical volume. Otherwise, those segments that have completed
|
|
the move will stay on the destination physical volume, while those that
|
|
have not will remain on the source physical volume.
|
|
.TP
|
|
.B \-\-atomic
|
|
Make the entire operation atomic. That is, ensure that all affected logical
|
|
volumes are moved to the destination physical volume together; unless the move
|
|
has been aborted. If the move has been aborted, all logical volumes will
|
|
remain on the source physical volume.
|
|
.TP
|
|
.B \-\-noudevsync
|
|
Disable udev synchronisation. The
|
|
process will not wait for notification from udev.
|
|
It will continue irrespective of any possible udev processing
|
|
in the background. You should only use this if udev is not running
|
|
or has rules that ignore the devices LVM2 creates.
|
|
.TP
|
|
.BR \-b ", " \-\-background
|
|
Run the daemon in the background.
|
|
.TP
|
|
.BR \-i ", " \-\-interval " " \fISeconds
|
|
Report progress as a percentage at regular intervals.
|
|
.TP
|
|
.BR \-n ", " \-\-name " " \fILogicalVolume
|
|
Move only the extents belonging to
|
|
.I LogicalVolume
|
|
from
|
|
.I SourcePhysicalVolume
|
|
instead of all allocated extents to the destination physical volume(s).
|
|
|
|
.SH Examples
|
|
To move all Physical Extents that are used by simple Logical Volumes on
|
|
/dev/sdb1 to free Physical Extents elsewhere in the Volume Group use:
|
|
.sp
|
|
.B pvmove /dev/sdb1
|
|
.P
|
|
Additionally, a specific destination device /dev/sdc1
|
|
can be specified like this:
|
|
.sp
|
|
.B pvmove /dev/sdb1 /dev/sdc1
|
|
.P
|
|
To perform the action only on extents belonging to the single Logical Volume
|
|
lvol1 do this:
|
|
.sp
|
|
.B pvmove \-n lvol1 /dev/sdb1 /dev/sdc1
|
|
.P
|
|
Rather than moving the contents of the entire device, it is possible to
|
|
move a range of Physical Extents - for example numbers 1000 to 1999
|
|
inclusive on /dev/sdb1 - like this:
|
|
.sp
|
|
.B pvmove /dev/sdb1:1000\-1999
|
|
.P
|
|
A range can also be specified as start+length, so
|
|
.sp
|
|
.B pvmove /dev/sdb1:1000+1000
|
|
.P
|
|
also refers to 1000 Physical Extents starting from Physical Extent number 1000.
|
|
(Counting starts from 0, so this refers to the 1001st to the 2000th inclusive.)
|
|
.P
|
|
To move a range of Physical Extents to a specific location (which must have
|
|
sufficient free extents) use the form:
|
|
.sp
|
|
.B pvmove /dev/sdb1:1000\-1999 /dev/sdc1
|
|
.sp
|
|
or
|
|
.sp
|
|
.B pvmove /dev/sdb1:1000\-1999 /dev/sdc1:0\-999
|
|
.P
|
|
If the source and destination are on the same disk, the
|
|
.B anywhere
|
|
allocation policy would be needed, like this:
|
|
.sp
|
|
.B pvmove \-\-alloc anywhere /dev/sdb1:1000\-1999 /dev/sdb1:0\-999
|
|
.P
|
|
The part of a specific Logical Volume present within in a range of Physical
|
|
Extents can also be picked out and moved, like this:
|
|
.sp
|
|
.B pvmove \-n lvol1 /dev/sdb1:1000\-1999 /dev/sdc1
|
|
.SH SEE ALSO
|
|
.BR lvm (8),
|
|
.BR vgconvert (8)
|
|
.BR pvs (8)
|