LVM quickly explained:
In
computer storage,
logical volume management or
LVM provides a method of allocating space on
mass-storage devices that is more flexible than conventional
partitioning schemes. In particular, a volume manager can concatenate,
stripe together or otherwise combine partitions into larger virtual ones that administrators can re-size or move, potentially without interrupting system use. As seen in the LVM design scheme, Physical Volumes (PV) are the bottom layer of LVM. The second layer are Volume Groups (VG) and the final, third layer are Logical Volumes (LV).
Logical Volume Management is a part 3/3 of LVM Management on CentOS 6!
In this post we will learn how to display, create, extend with filesystem resize, reduce with filesystem resize, resize, rename and remove Logical Volumes (LV).
Here is the basic design scheme:

LVM Logical Volume scheme (source: RedHat.com)
Let’s start our Logical Volume Management on CentOS 6 guide!
1. Display Logical Volumes
We can display all Logical Volumes (LV’s) on the system with the “lvdisplay” command:
[root@foo ~]# lvdisplay
--- Logical volume ---
LV Path /dev/vg_foo/LogVol01
LV Name LogVol01
VG Name vg_foo
LV UUID qtyLV0-EZuh-2b0f-raUG-EcIM-5teW-W3QyeW
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-05-08 10:59:33 +0200
LV Status available
# open 1
LV Size 13.04 GiB
Current LE 3339
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Logical volume ---
LV Path /dev/vg_foo/LogVol00
LV Name LogVol00
VG Name vg_foo
LV UUID bMxELt-4cN1-lpzb-j7nd-Ixyr-mpsE-vmO1Oe
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-05-08 10:59:48 +0200
LV Status available
# open 1
LV Size 1.46 GiB
Current LE 375
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
We can also display Logical Volumes with “lvscan” or “lvs” commands, but as we see the output is a bit different:
[root@foo ~]# lvscan
ACTIVE '/dev/vg_foo/LogVol01' [13.04 GiB] inherit
ACTIVE '/dev/vg_foo/LogVol00' [1.46 GiB] inherit
[root@foo ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
LogVol00 vg_foo -wi-ao--- 1.46g
LogVol01 vg_foo -wi-ao--- 13.04g
In the following examples i will be mostly using “lvdisplay” command, because it gives me the most information.
We see there are currently two existing Logical Volumes present. The first is called LogVol00 and the second is called LogVol01. These LV’s hold the system root and swap partition. With the “lvdisplay” command we can see additional information – LV Status, LV UUID, Current LE,…
2. Create Logical Volume
To create new Logical Volume (LV) we first have to check the desired Volume Group (VG) for free Physical Extent (PE) – Free PE’s.
[root@foo ~]# vgdisplay
--- Volume group ---
VG Name GeekPeek
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 16
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 5.99 GiB
PE Size 2.00 MiB
Total PE 3066
Alloc PE / Size 0 / 0
Free PE / Size 3066 / 5.99 GiB
VG UUID oj2GS6-l5aE-6WNv-QPJy-r1pC-ahSQ-EzFiKc
--- Volume group ---
VG Name vg_foo
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 14.51 GiB
PE Size 4.00 MiB
Total PE 3714
Alloc PE / Size 3714 / 14.51 GiB
Free PE / Size 0 / 0
VG UUID 3n3nzs-dzHK-rApY-EApz-Zz2H-JQVP-TlcYfF
As we can see, Volume Group “GeekPeek” has all of the 3066 PE’s free which means 5.99GiB of allocatable LV space. We can now create a Logical Volume with “lvcreate” command. Simple syntax is “lvcreate -n lvname -L size vgname“.
[root@foo ~]# lvcreate -n GeekVol01 -L 3GiB GeekPeek
Logical volume "GeekVol01" created
If we use the -l parameter instead of -L we are allocating Physical Extents and not actual size in GB, MB or KB. Check “lvcreate –help” for more info.
[root@foo ~]# lvcreate -n GeekVol01 -l 1536 GeekPeek
Logical volume "GeekVol01" created
[root@foo ~]# lvdisplay
--- Logical volume ---
LV Path /dev/GeekPeek/GeekVol01
LV Name GeekVol01
VG Name GeekPeek
LV UUID F99J0T-07s8-LJAy-rNvI-GZNd-DppC-HXsXai
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-07-09 16:18:41 +0200
LV Status available
# open 0
LV Size 3.00 GiB
Current LE 1536
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
--- Logical volume ---
LV Path /dev/vg_foo/LogVol01
LV Name LogVol01
VG Name vg_foo
LV UUID qtyLV0-EZuh-2b0f-raUG-EcIM-5teW-W3QyeW
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-05-08 10:59:33 +0200
LV Status available
# open 1
LV Size 13.04 GiB
Current LE 3339
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Logical volume ---
LV Path /dev/vg_foo/LogVol00
LV Name LogVol00
VG Name vg_foo
LV UUID bMxELt-4cN1-lpzb-j7nd-Ixyr-mpsE-vmO1Oe
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-05-08 10:59:48 +0200
LV Status available
# open 1
LV Size 1.46 GiB
Current LE 375
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
Both commands created 3GiB large Logical Volume called “GeekVol01“.
3. Extend Logical Volume
We can extend a Logical Volume with “lvextend” command. The simple syntax is “lvextend -L +size vgname/lvname“. You can also resize the filesystem, but you need to add -r parameter “lvextend -L +size vgname/lvname -r“. In our example we will extend LV called “GeekVol01” on a VG called “GeekPeek” from 3GB to 5GB (+2GB in size).
Of course you first have to check if you have enough space available in your VG to complete the action!!
[root@foo ~]# lvextend -L +2GiB GeekPeek/GeekVol01
Extending logical volume GeekVol01 to 5.00 GiB
Logical volume GeekVol01 successfully resized
To automatically resize LV and filesystem use the -r parameter! We can resize filesystem on the fly, while mounted!
[root@foo ~]# lvextend -L +2GiB GeekPeek/GeekVol01 -r
Extending logical volume GeekVol01 to 5.00 GiB
Logical volume GeekVol01 successfully resized
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/GeekPeek-GeekVol01 is mounted on /geek; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/mapper/GeekPeek-GeekVol01 to 1310720 (4k) blocks.
The filesystem on /dev/mapper/GeekPeek-GeekVol01 is now 1310720 blocks long.
[root@foo ~]# lvdisplay
--- Logical volume ---
LV Path /dev/GeekPeek/GeekVol01
LV Name GeekVol01
VG Name GeekPeek
LV UUID F99J0T-07s8-LJAy-rNvI-GZNd-DppC-HXsXai
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-07-09 16:18:41 +0200
LV Status available
# open 0
LV Size 5.00 GiB
Current LE 2560
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
--- Logical volume ---
LV Path /dev/vg_foo/LogVol01
LV Name LogVol01
VG Name vg_foo
LV UUID qtyLV0-EZuh-2b0f-raUG-EcIM-5teW-W3QyeW
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-05-08 10:59:33 +0200
LV Status available
# open 1
LV Size 13.04 GiB
Current LE 3339
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Logical volume ---
LV Path /dev/vg_foo/LogVol00
LV Name LogVol00
VG Name vg_foo
LV UUID bMxELt-4cN1-lpzb-j7nd-Ixyr-mpsE-vmO1Oe
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-05-08 10:59:48 +0200
LV Status available
# open 1
LV Size 1.46 GiB
Current LE 375
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
When extending LV, do not forget the plus sign before the extend size! +2GiB!!
4. Reduce Logical Volume
We can reduce a Logical Volume with “lvreduce” command. The simple syntax is “lvreduce -L -size vgname/lvname“. You can also resize the filesystem, but you need to add -r parameter “lvreduce -L -size vgname/lvname -r“. In our example we will reduce LV called “GeekVol01” on a VG called “GeekPeek” from 5GB to 3GB (-2GB in size). We should deactivate our LV first with “lvchange” and later reactivate it:
[root@foo ~]# lvchange -an GeekPeek/GeekVol01
[root@foo ~]# lvreduce -L -2GiB geekpeek/GeekVol01
Reducing logical volume GeekVol01 to 3.00 GiB
Logical volume GeekVol01 successfully resized
[root@foo ~]# lvchange -ay GeekPeek/GeekVol01
To automatically resize LV and your filesystem use the -r parameter:
[root@foo ~]# lvreduce -L -2GiB GeekPeek/GeekVol01 -r
Do you want to unmount "/geek"? [Y|n] y
fsck from util-linux-ng 2.17.2
/dev/mapper/GeekPeek-GeekVol01: 18/327680 files (0.0% non-contiguous), 694497/1310720 blocks
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/GeekPeek-GeekVol01 to 786432 (4k) blocks.
The filesystem on /dev/mapper/GeekPeek-GeekVol01 is now 786432 blocks long.
Reducing logical volume GeekVol01 to 3.00 GiB
Logical volume GeekVol01 successfully resized
[root@foo ~]# lvdisplay
--- Logical volume ---
LV Path /dev/GeekPeek/GeekVol01
LV Name GeekVol01
VG Name GeekPeek
LV UUID F99J0T-07s8-LJAy-rNvI-GZNd-DppC-HXsXai
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-07-09 16:18:41 +0200
LV Status available
# open 1
LV Size 3.00 GiB
Current LE 1536
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
--- Logical volume ---
LV Path /dev/vg_foo/LogVol01
LV Name LogVol01
VG Name vg_foo
LV UUID qtyLV0-EZuh-2b0f-raUG-EcIM-5teW-W3QyeW
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-05-08 10:59:33 +0200
LV Status available
# open 1
LV Size 13.04 GiB
Current LE 3339
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Logical volume ---
LV Path /dev/vg_foo/LogVol00
LV Name LogVol00
VG Name vg_foo
LV UUID bMxELt-4cN1-lpzb-j7nd-Ixyr-mpsE-vmO1Oe
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-05-08 10:59:48 +0200
LV Status available
# open 1
LV Size 1.46 GiB
Current LE 375
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
When reducing LV, do not forget the minus sign before the extend size! -2GiB!!
5. Resize Logical Volume
We can extend and reduce LV’s with “lvresize” command. Simple syntax to reduce a LV is “lvresize -L -size vgname/lvname” – again to resize filesystem to add -r at the end. Simple syntax to extend a LV is “lvresize -L +size vgname/lvname” – again to resize filesystem to add -r at the end. We will reduce our LV called “GeekVol01” from 5GB to 3GB and then extend from 3GB back to 5GB – with filesystem resize!
[root@foo ~]# lvresize -L -2GiB geekpeek/GeekVol01 -r
Do you want to unmount "/geek"? [Y|n] y
fsck from util-linux-ng 2.17.2
/dev/mapper/geekpeek-GeekVol01: 18/327680 files (0.0% non-contiguous), 694497/1310720 blocks
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/geekpeek-GeekVol01 to 786432 (4k) blocks.
The filesystem on /dev/mapper/geekpeek-GeekVol01 is now 786432 blocks long.
Reducing logical volume GeekVol01 to 3.00 GiB
Logical volume GeekVol01 successfully resized
[root@foo ~]# lvresize -L +2GiB geekpeek/GeekVol01 -r
Extending logical volume GeekVol01 to 5.00 GiB
Logical volume GeekVol01 successfully resized
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/geekpeek-GeekVol01 is mounted on /geek; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/mapper/geekpeek-GeekVol01 to 1310720 (4k) blocks.
The filesystem on /dev/mapper/geekpeek-GeekVol01 is now 1310720 blocks long.
6. Rename Logical Volume
We can rename Logical Volume with “lvrename” command. The simple syntax is “lvrename vgname1/lvname1 vgname1/lvname2“. In our example we will rename our LV called “GeekVol01” existing on VG called “GeekPeek” to “RenameVol01“:
[root@foo ~]# lvrename GeekPeek/GeekVol01 GeekPeek/RenameVol01
Renamed "GeekVol01" to "RenameVol01" in volume group "geekpeek"
[root@foo ~]# lvdisplay
--- Logical volume ---
LV Path /dev/geekpeek/RenameVol01
LV Name RenameVol01
VG Name geekpeek
LV UUID F99J0T-07s8-LJAy-rNvI-GZNd-DppC-HXsXai
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-07-09 16:18:41 +0200
LV Status available
# open 1
LV Size 5.00 GiB
Current LE 2560
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
7. Remove Logical Volume
We can remove Logical Volumes with “lvremove” command. The simple syntax is “vgremove vgname/lvname“. In our example we will remove LV called “GeekVol01” existing on VG called “GeekPeek“. First deactivate LV and then remove it:
All data from LV you will remove will be lost!!
[root@foo ~]# lvchange -an geekpeek
[root@foo ~]# lvremove GeekPeek/GeekVol01
Logical volume "GeekVol01" successfully removed
[root@foo ~]# lvdisplay
--- Logical volume ---
LV Path /dev/vg_foo/LogVol01
LV Name LogVol01
VG Name vg_foo
LV UUID qtyLV0-EZuh-2b0f-raUG-EcIM-5teW-W3QyeW
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-05-08 10:59:33 +0200
LV Status available
# open 1
LV Size 13.04 GiB
Current LE 3339
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Logical volume ---
LV Path /dev/vg_foo/LogVol00
LV Name LogVol00
VG Name vg_foo
LV UUID bMxELt-4cN1-lpzb-j7nd-Ixyr-mpsE-vmO1Oe
LV Write Access read/write
LV Creation host, time foo.geekpeek.net, 2013-05-08 10:59:48 +0200
LV Status available
# open 1
LV Size 1.46 GiB
Current LE 375
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
Do it the easy way! Download GeekPeek.Net LVM Management automated bash script!