In this post I want to cover one of the most commonly used features of lvm, extending a logical volume. If you were following along with the last post, “Working with logical volumes part 1â€, then you should already have a volume group with a couple of live volumes attached.
With lvm you can quickly and easily extend a Linux file system on the fly without interrupting any services.
Becoming familiar with our lvm environment.
The first thing we should do is become familiar with our current lvm environment. Open your terminal and type  sudo pvscan
 to find some basic information about your volume groups. After running pvscan you should see the following output (again assuming that you are following along from the previous post).
sudo pvscan PV /dev/sdb VG vgtest lvm2 [10.00 GiB / 6.00 GiB free]
From the above we can see a few things. First is the location of our physical volume (/dev/sdb). Next is the Volume group it is attached to “vgtestâ€. Last you can see the size, 10 GB with 6GB free.
You can get more detailed output with  pvdisplay
sudo pvdisplay --- Physical volume --- PV Name /dev/sdb VG Name vgtest PV Size 10.00 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 2559 Free PE 1535 Allocated PE 1024 PV UUID tVrpRc-U1yi-IMdP-ONog-jDFh-pjej-VfX9ct
Check the state of our current live volumes by running  lvscan
sudo lvscan ACTIVE '/dev/vgtest/testlv' [2.00 GiB] inherit ACTIVE '/dev/vgtest/omg_testlv' [2.00 GiB] inherit
In this case I have two logical volumes “testlv†and “omg_testlv†each of which is 2 GB in size. Once again we can see more information on these volumes by running  lvdisplay
sudo lvdisplay --- Logical volume --- LV Path /dev/vgtest/testlv LV Name testlv VG Name vgtest LV UUID zw2JB7-gmmZ-4llC-FLf1-jJhE-B82R-Xz4Cxc LV Write Access read/write LV Creation host, time fedora01, 2017-11-01 21:24:33 -0400 LV Status available # open 1 LV Size 2.00 GiB Current LE 512 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 --- Logical volume --- LV Path /dev/vgtest/omg_testlv LV Name omg_testlv VG Name vgtest LV UUID h6eLKT-Aq5u-UXem-dgtA-OIXs-z901-lNRhNp LV Write Access read/write LV Creation host, time fedora01, 2017-11-01 21:25:28 -0400 LV Status available # open 1 LV Size 2.00 GiB Current LE 512 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:3
Running  vgdisplay
 much like  pvdisplay
 and  lvdisplay
 will output detailed information about our volume group.
sudo vgdisplay --- Volume group --- VG Name vgtest 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 10.00 GiB PE Size 4.00 MiB Total PE 2559 Alloc PE / Size 1024 / 4.00 GiB Free PE / Size 1535 / 6.00 GiB VG UUID HkxLMU-ncGp-pKIc-l35e-Fbx0-EU80-Iublex
So, now that we have familiarized ourselves with the lvm environment that we previously set up, we know a few things.
- We have one physical volume, /dev/sdb which is 10 GB in size.
- That physical volume contains the volume group “vgtestâ€.
- The volume group vgtest contains two logical volumes “testlv†and “omg_testlv†each of which are 2 GB in size.
Resize a logical volume
Let’s resize one of our logical volumes. Both of our volumes are 2 GB, but lets make testlv 4 GB using the  lvextend
 command.
sudo lvextend /dev/vgtest/testlv -L 4G Size of logical volume vgtest/testlv changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents). Logical volume vgtest/testlv successfully resized.
In this case I used the -L option to tell lvm that I wanted the final size of the volume to be 4 G, alternatively you could use “-L +2G†to the same effect. Or you can use lowercase L “-l†to specify extents directly. I suggest you read the man page for lvextend if you plan to use it on a regular basis.
Once again run  lvscan
 to verify that your volume has indeed expanded to 4 GB.
sudo lvscan ACTIVE '/dev/vgtest/testlv' [4.00 GiB] inherit ACTIVE '/dev/vgtest/omg_testlv' [2.00 GiB] inherit
Also notice that your /testlv file system has not changed. It is still 2 GB as far as the file system is concerned.
df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 937M 0 937M 0% /dev tmpfs 949M 0 949M 0% /dev/shm tmpfs 949M 2.0M 947M 1% /run tmpfs 949M 0 949M 0% /sys/fs/cgroup /dev/mapper/fedora-root 26G 6.2G 18G 26% / tmpfs 949M 16K 949M 1% /tmp /dev/sda2 976M 140M 770M 16% /boot /dev/sda1 200M 9.5M 191M 5% /boot/efi /dev/mapper/vgtest-testlv 2.0G 35M 2.0G 2% /testlv /dev/mapper/vgtest-omg_testlv 2.0G 35M 2.0G 2% /omgtestlv tmpfs 190M 16K 190M 1% /run/user/42 tmpfs 190M 0 190M 0% /run/user/1000
When you do an extend operation keep in mind that you must also grow the underlying file system in order to make the additional space usable.
We formatted our file system as xfs in the last tutorial so we will use  xfs_growfs
 to allow the file system to use the additional storage space.
sudo xfs_growfs /testlv meta-data=/dev/mapper/vgtest-testlv isize=512 agcount=4, agsize=131072 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=1 spinodes=0 rmapbt=0 = reflink=0 data = bsize=4096 blocks=524288, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 524288 to 1048576
Check the size again with  df -h
 This time you should notice that /testlv is now 4 GB.
df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 937M 0 937M 0% /dev tmpfs 949M 0 949M 0% /dev/shm tmpfs 949M 2.0M 947M 1% /run tmpfs 949M 0 949M 0% /sys/fs/cgroup /dev/mapper/fedora-root 26G 6.2G 18G 26% / tmpfs 949M 16K 949M 1% /tmp /dev/sda2 976M 140M 770M 16% /boot /dev/sda1 200M 9.5M 191M 5% /boot/efi /dev/mapper/vgtest-testlv 4.0G 37M 4.0G 1% /testlv /dev/mapper/vgtest-omg_testlv 2.0G 35M 2.0G 2% /omgtestlv tmpfs 190M 16K 190M 1% /run/user/42
The  lvextend
 command has another option “-r†that will automatically increase the size of the file system without the need to call an additional command to extend the file system. Try it on the “omg_testlv†volume.
sudo lvextend /dev/vgtest/omg_testlv -L 4G -r Size of logical volume vgtest/omg_testlv changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents). Logical volume vgtest/omg_testlv successfully resized. meta-data=/dev/mapper/vgtest-omg_testlv isize=512 agcount=4, agsize=131072 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=1 spinodes=0 rmapbt=0 = reflink=0 data = bsize=4096 blocks=524288, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 524288 to 1048576
Notice this time the output of the  lvextend
 command includes the  xfx_growfs
 output. That is because lvm is smart enough to know how to resize common file systems for you, so that you only need to run one command to get the desired results.
Once you are done I suggest that you run through the initial familiarization steps again so that you can see the changes that we made in this tutorial. Compare the new output with the old.
In the next post we will add a new disk to volume group and learn how to move all of our data off of one disk and onto another.
Luke has an RHCSA for Red Hat Enterpirse Linux 7 and currently works as a Linux Systems Adminstrator in Ohio.
This post, re-published here with permission, was originally published on Luke’s site here.
Leave a Reply