Chapter 5. Modifying the size of a logical volume
After you have created a logical volume, you can modify the size of the volume.
5.1. Growing logical volumes
To increase the size of a logical volume, use the
When you extend the logical volume, you can indicate how much you want to extend the volume, or how large you want it to be after you extend it.
The following command extends the logical volume
/dev/myvg/homevol to 12 gigabytes.
lvextend -L12G /dev/myvg/homevollvextend -- extending logical volume "/dev/myvg/homevol" to 12 GB lvextend -- doing automatic backup of volume group "myvg" lvextend -- logical volume "/dev/myvg/homevol" successfully extended
The following command adds another gigabyte to the logical volume
lvextend -L+1G /dev/myvg/homevollvextend -- extending logical volume "/dev/myvg/homevol" to 13 GB lvextend -- doing automatic backup of volume group "myvg" lvextend -- logical volume "/dev/myvg/homevol" successfully extended
As with the
lvcreate command, you can use the
-l argument of the
lvextend command to specify the number of extents by which to increase the size of the logical volume. You can also use this argument to specify a percentage of the volume group, or a percentage of the remaining free space in the volume group. The following command extends the logical volume called
testlv to fill all of the unallocated space in the volume group
lvextend -l +100%FREE /dev/myvg/testlvExtending logical volume testlv to 68.59 GB Logical volume testlv successfully resized
After you have extended the logical volume it is necessary to increase the file system size to match.
By default, most file system resizing tools will increase the size of the file system to be the size of the underlying logical volume so you do not need to worry about specifying the same size for each of the two commands.
5.2. Growing a file system on a logical volume
To grow a file system on a logical volume, perform the following steps:
Determine whether there is sufficient unallocated space in the existing volume group to extend the logical volume. If not, perform the following procedure:
Create a new physical volume with the
vgextendcommand to extend the volume group that contains the logical volume with the file system you are growing to include the new physical volume.
- Create a new physical volume with the
Once the volume group is large enough to include the larger file system, extend the logical volume with the
- Resize the file system on the logical volume.
Note that you can use the
-r option of the
lvresize command to extend the logical volume and resize the underlying file system with a single command
5.3. Shrinking logical volumes
You can reduce the size of a logical volume with the
Shrinking is not supported on a GFS2 or XFS file system, so you cannot reduce the size of a logical volume that contains a GFS2 or XFS file system.
If the logical volume you are reducing contains a file system, to prevent data loss you must ensure that the file system is not using the space in the logical volume that is being reduced. For this reason, it is recommended that you use the
--resizefs option of the
lvreduce command when the logical volume contains a file system. When you use this option, the
lvreduce command attempts to reduce the file system before shrinking the logical volume. If shrinking the file system fails, as can occur if the file system is full or the file system does not support shrinking, then the
lvreduce command will fail and not attempt to shrink the logical volume.
In most cases, the
lvreduce command warns about possible data loss and asks for a confirmation. However, you should not rely on these confirmation prompts to prevent data loss because in some cases you will not see these prompts, such as when the logical volume is inactive or the
--resizefs option is not used.
Note that using the
--test option of the
lvreduce command does not indicate where the operation is safe, as this option does not check the file system or test the file system resize.
The following command shrinks the logical volume
lvol1 in volume group
vg00 to be 64 megabytes. In this example,
lvol1 contains a file system, which this command resizes together with the logical volume. This example shows the output to the command.
lvreduce --resizefs -L 64M vg00/lvol1fsck from util-linux 2.23.2 /dev/mapper/vg00-lvol1: clean, 11/25688 files, 8896/102400 blocks resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/mapper/vg00-lvol1 to 65536 (1k) blocks. The filesystem on /dev/mapper/vg00-lvol1 is now 65536 blocks long. Size of logical volume vg00/lvol1 changed from 100.00 MiB (25 extents) to 64.00 MiB (16 extents). Logical volume vg00/lvol1 successfully resized.
Specifying the - sign before the resize value indicates that the value will be subtracted from the logical volume’s actual size. The following example shows the command you would use if, instead of shrinking a logical volume to an absolute size of 64 megabytes, you wanted to shrink the volume by a value 64 megabytes.
lvreduce --resizefs -L -64M vg00/lvol1
5.4. Extending a striped logical volume
In order to increase the size of a striped logical volume, there must be enough free space on the underlying physical volumes that make up the volume group to support the stripe. For example, if you have a two-way stripe that that uses up an entire volume group, adding a single physical volume to the volume group will not enable you to extend the stripe. Instead, you must add at least two physical volumes to the volume group.
For example, consider a volume group
vg that consists of two underlying physical volumes, as displayed with the following
vgsVG #PV #LV #SN Attr VSize VFree vg 2 0 0 wz--n- 271.31G 271.31G
You can create a stripe using the entire amount of space in the volume group.
lvcreate -n stripe1 -L 271.31G -i 2 vgUsing default stripesize 64.00 KB Rounding up size to full physical extent 271.31 GB Logical volume "stripe1" created #
lvs -a -o +devicesLV VG Attr LSize Origin Snap% Move Log Copy% Devices stripe1 vg -wi-a- 271.31G /dev/sda1(0),/dev/sdb1(0)
Note that the volume group now has no more free space.
vgsVG #PV #LV #SN Attr VSize VFree vg 2 1 0 wz--n- 271.31G 0
The following command adds another physical volume to the volume group, which then has 135 gigabytes of additional space.
vgextend vg /dev/sdc1Volume group "vg" successfully extended #
vgsVG #PV #LV #SN Attr VSize VFree vg 3 1 0 wz--n- 406.97G 135.66G
At this point you cannot extend the striped logical volume to the full size of the volume group, because two underlying devices are needed in order to stripe the data.
lvextend vg/stripe1 -L 406GUsing stripesize of last segment 64.00 KB Extending logical volume stripe1 to 406.00 GB Insufficient suitable allocatable extents for logical volume stripe1: 34480 more required
To extend the striped logical volume, add another physical volume and then extend the logical volume. In this example, having added two physical volumes to the volume group we can extend the logical volume to the full size of the volume group.
vgextend vg /dev/sdd1Volume group "vg" successfully extended #
vgsVG #PV #LV #SN Attr VSize VFree vg 4 1 0 wz--n- 542.62G 271.31G #
lvextend vg/stripe1 -L 542GUsing stripesize of last segment 64.00 KB Extending logical volume stripe1 to 542.00 GB Logical volume stripe1 successfully resized
If you do not have enough underlying physical devices to extend the striped logical volume, it is possible to extend the volume anyway if it does not matter that the extension is not striped, which may result in uneven performance. When adding space to the logical volume, the default operation is to use the same striping parameters of the last segment of the existing logical volume, but you can override those parameters. The following example extends the existing striped logical volume to use the remaining free space after the initial
lvextend command fails.
lvextend vg/stripe1 -L 406GUsing stripesize of last segment 64.00 KB Extending logical volume stripe1 to 406.00 GB Insufficient suitable allocatable extents for logical volume stripe1: 34480 more required #
lvextend -i1 -l+100%FREE vg/stripe1