How to extend an LVM Volume in Linux
In this artícle I will show you how to extend a existing LVM volume in Linux.
This article is one of those that I write for myself, because, I don't extend disk everyday and always I miss some step doing this procedure. Of course, also can work for you, this is a standard Linux procedure.
Let's get start, first, we going to identify our current disk in our virtual machine, we can do this running the next command:
$ df -h
For my case, this is the result:
Filesystem Size Used Avail Use% Mounted on
udev 955M 0 955M 0% /dev
tmpfs 198M 1.3M 196M 1% /run
/dev/sda2 20G 4.6G 14G 25% /
tmpfs 986M 0 986M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 986M 0 986M 0% /sys/fs/cgroup
/dev/loop0 94M 94M 0 100% /snap/core/8935
/dev/loop1 90M 90M 0 100% /snap/core/8268
/dev/mapper/a-disco 969M 2.5M 900M 1% /mnt/disco2
tmpfs 198M 0 198M 0% /run/user/1000
The disk I want to extend is the following:
/dev/mapper/a-disco 969M 2.5M 900M 1% /mnt/disco2
If you can see, that disk had a size of 1gb and is mounted in /mnt/disco2 directory. In this case. I will double the space of this disk.
First, I need to add a new disk to the virtual machine, and then, I need to find the identification that the system give to that new disk. You can do it running the following command:
$ fdisk -l
The terminal should return something like this:
Disk /dev/loop0: 89.1 MiB, 93417472 bytes, 182456 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/loop1: 93.8 MiB, 98336768 bytes, 192064 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: EAB3EDBC-7716-4B7B-9328-3D238759C495
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 41940991 41936896 20G Linux filesystem
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xeb92df94
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 2097151 2095104 1023M 8e Linux LVM
Disk /dev/sdc: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/a-disco: 1000 MiB, 1048576000 bytes, 2048000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Take a look that the last "entry" is our actual LVM and the before that is our new brand disk "/dev/sdc".
Disk /dev/sdc: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Lets partition and format this disk to extend our current LVM volume. But first, we need to know what is the name of our current Volume Group. We can see this, running the next command:
$ vgdisplay
The result looks like this:
--- Volume group ---
VG Name a
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 1020.00 MiB
PE Size 4.00 MiB
Total PE 255
Alloc PE / Size 250 / 1000.00 MiB
Free PE / Size 5 / 20.00 MiB
VG UUID X18nn3-W3U7-TjLc-iogG-Fo4d-fAnH-EIw4oo
Now, we going to partition the "/dev/sdc" disk executing the following command:
$ fdisk /dev/sdc
Let get start to the partition job, be advised, that the section where say "Created a new partition 1 of type 'linux' and of size 1023 MiB" because, from there, we must type "t" and the choose the type of partition. "8e" is the "code" for LVM.
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x26b1d169.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-2097151, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151):
Created a new partition 1 of type 'Linux' and of size 1023 MiB.
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'.
If the results is something like you see up here, press "w" to commit the changes:
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
The next is our list to do is create an "Physical Volume", let's do this.
$ pvcreate /dev/sdc1
The terminal should return this:
Physical volume "/dev/sdc1" successfully created.
Now, lets going to extend the "Volume Group" called "a". For this, we must write the following:
$ vgextend a /dev/sdc1
The return:
Volume group "a" successfully extended
And now, we need to extend our Logical Volume, remember the Volume Group and the name of the disk, in this case, was called "disco". In this example, I extend to 1Gb, but, will depend of you needs and space available in your new installed disk.
$ lvextend -L +1g /dev/mapper/a-disco
Size of logical volume a/disco changed from 1000.00 MiB (250 extents) to <1.98 GiB (506 extents).
Logical volume a/disco successfully resized.
For last we need to resize the disk:
$ resize2fs /dev/mapper/a-disco
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/mapper/a-disco is mounted on /mnt/disco2; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/a-disco is now 518144 (4k) blocks long.
Once that the last command execute, we need to check if our "disco" is actually had 2Gb. We can run "df-h" again and you should see that the disk is 2Gb size now.
Filesystem Size Used Avail Use% Mounted on
udev 955M 0 955M 0% /dev
tmpfs 198M 1.4M 196M 1% /run
/dev/sda2 20G 4.6G 14G 25% /
tmpfs 986M 0 986M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 986M 0 986M 0% /sys/fs/cgroup
/dev/loop0 90M 90M 0 100% /snap/core/8268
/dev/loop1 94M 94M 0 100% /snap/core/8935
/dev/mapper/a-disco 2.0G 3.0M 1.9G 1% /mnt/disco2
tmpfs 198M 0 198M 0% /run/user/1000
Last words:
I hope this article, what I wrote as record for me, help you to extend your LVM volume. I ran this lab in Ubuntu Server but, this apply to CentOS, RHEL o another Debian derived OS Linux.
Let me know if this works for you. Also, this is my very first article in english and for sure, some things can be improve, so, let me know your thoughts.