Este conteúdo não está disponível no idioma selecionado.
Chapter 15. Controlling LVM allocation
By default, a volume group uses the normal
allocation policy. This allocates physical extents according to common-sense rules such as not placing parallel stripes on the same physical volume. You can specify a different allocation policy (contiguous
, anywhere
, or cling
) by using the --alloc
argument of the vgcreate
command. In general, allocation policies other than normal
are required only in special cases where you need to specify unusual or nonstandard extent allocation.
15.1. Allocating extents from specified devices
You can restrict the allocation from specific devices by using the device arguments at the end of the command line with the lvcreate
and the lvconvert
commands. You can specify the actual extent ranges for each device for more control. The command only allocates extents for the new logical volume (LV) by using the specified physical volume (PV) as arguments. It takes available extents from each PV until they run out and then takes extents from the next PV listed. If there is not enough space on all the listed PVs for the requested LV size, then command fails. Note that the command only allocates from the named PVs. Raid LVs use sequential PVs for separate raid images or separate stripes. If the PVs are not large enough for an entire raid image, then the resulting device use is not entirely predictable.
Procedure
Create a volume group (VG):
# vgcreate <vg_name> <PV> ...
Where:
-
<vg_name>
is the name of the VG. -
<PV>
are the PVs.
-
You can allocate PV to create different volume types, such as linear or raid:
Allocate extents to create a linear volume:
# lvcreate -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]
Where:
-
<lv_name>
is the name of the LV. -
<lv_size>
is the size of the LV. Default unit is megabytes. -
<vg_name>
is the name of the VG. [ <PV …> ]
are the PVs.You can specify one of the PVs, all of them, or none on the command line:
If you specify one PV, extents for that LV will be allocated from it.
NoteIf the PV does not have sufficient free extents for the entire LV, then the
lvcreate
fails.- If you specify two PVs, extents for that LV will be allocated from one of them, or a combination of both.
If you do not specify any PV, extents will be allocated from one of the PVs in the VG, or any combination of all PVs in the VG.
NoteIn these cases, LVM might not use all of the named or available PVs. If the first PV has sufficient free extents for the entire LV, then the other PV will probably not be used. However, if the first PV does not have a set allocation size of free extents, then LV might be allocated partly from the first PV and partly from the second PV.
Example 15.1. Allocating extents from one PV
In this example,
lv1
extents will be allocated fromsda
.# lvcreate -n lv1 -L1G vg /dev/sda
Example 15.2. Allocating extents from two PVs
In this example,
lv2
extents will be allocated from eithersda
, orsdb
, or a combination of both.# lvcreate -n lv2 L1G vg /dev/sda /dev/sdb
Example 15.3. Allocating extents without specifying PV
In this example,
lv3
extents will be allocated from one of the PVs in the VG, or any combination of all PVs in the VG.# lvcreate -n lv3 -L1G vg
or
-
Allocate extents to create a raid volume:
# lvcreate --type <segment_type> -m <mirror_images> -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]
Where:
-
<segment_type>
is the specified segment type (for exampleraid5
,mirror
,snapshot
). -
<mirror_images>
creates araid1
or a mirrored LV with the specified number of images. For example,-m 1
would result in araid1
LV with two images. -
<lv_name>
is the name of the LV. -
<lv_size>
is the size of the LV. Default unit is megabytes. -
<vg_name>
is the name of the VG. <[PV …]>
are the PVs.The first raid image will be allocated from the first PV, the second raid image from the second PV, and so on.
Example 15.4. Allocating raid images from two PVs
In this example,
lv4
first raid image will be allocated fromsda
and second image will be allocated fromsdb
.# lvcreate --type raid1 -m 1 -n lv4 -L1G vg /dev/sda /dev/sdb
Example 15.5. Allocating raid images from three PVs
In this example,
lv5
first raid image will be allocated fromsda
, second image will be allocated fromsdb
, and third image will be allocated fromsdc
.# lvcreate --type raid1 -m 2 -n lv5 -L1G vg /dev/sda /dev/sdb /dev/sdc
-
Additional resources
-
lvcreate(8)
man page -
lvconvert(8)
man page -
lvmraid(7)
man page
15.2. LVM allocation policies
When an LVM operation must allocate physical extents for one or more logical volumes (LVs), the allocation proceeds as follows:
- The complete set of unallocated physical extents in the volume group is generated for consideration. If you supply any ranges of physical extents at the end of the command line, only unallocated physical extents within those ranges on the specified physical volumes (PVs) are considered.
-
Each allocation policy is tried in turn, starting with the strictest policy (
contiguous
) and ending with the allocation policy specified using the--alloc
option or set as the default for the particular LV or volume group (VG). For each policy, working from the lowest-numbered logical extent of the empty LV space that needs to be filled, as much space as possible is allocated, according to the restrictions imposed by the allocation policy. If more space is needed, LVM moves on to the next policy.
The allocation policy restrictions are as follows:
The
contiguous
policy requires that the physical location of any logical extent is adjacent to the physical location of the immediately preceding logical extent, with the exception of the first logical extent of a LV.When a LV is striped or mirrored, the
contiguous
allocation restriction is applied independently to each stripe or raid image that needs space.-
The
cling
allocation policy requires that the PV used for any logical extent be added to an existing LV that is already in use by at least one logical extent earlier in that LV. -
An allocation policy of
normal
will not choose a physical extent that shares the same PV as a logical extent already allocated to a parallel LV (that is, a different stripe or raid image) at the same offset within that parallel LV. -
If there are sufficient free extents to satisfy an allocation request but a
normal
allocation policy would not use them, theanywhere
allocation policy will, even if that reduces performance by placing two stripes on the same PV.
You can change the allocation policy by using the vgchange
command.
Future updates can bring code changes in layout behavior according to the defined allocation policies. For example, if you supply on the command line two empty physical volumes that have an identical number of free physical extents available for allocation, LVM currently considers using each of them in the order they are listed; there is no guarantee that future releases will maintain that property. If you need a specific layout for a particular LV, build it up through a sequence of lvcreate
and lvconvert
steps such that the allocation policies applied to each step leave LVM no discretion over the layout.
15.3. Preventing allocation on a physical volume
You can prevent allocation of physical extents on the free space of one or more physical volumes with the pvchange
command. This might be necessary if there are disk errors, or if you will be removing the physical volume.
Procedure
Use the following command to disallow the allocation of physical extents on
device_name
:# pvchange -x n /dev/sdk1
You can also allow allocation where it had previously been disallowed by using the
-xy
arguments of thepvchange
command.
Additional resources
-
pvchange(8)
man page