In below example, I have RHEL 8 server with 100 GB OS disk, the partitions are distributed between:
- root = 50 GB
- home = 46.3 GB
- swap = 2.1 GB
Filesystem: xfs, however it should work with ext partitions.
The requirement to fulfill here is to extend the root partition from 50 GB to 100 GB.
Ok, Let’s find the device where root “/” partition is:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 98.4G 0 part
├─rhel-root 253:0 0 50G 0 lvm /
├─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
└─rhel-home 253:2 0 46.3G 0 lvm /home
#==> /dev/sda is my OS disk, root partition is on /dev/sda3
Find device with LVM PV Scan
#pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 rhel lvm2 a-- 98.41g 0
/dev/sdb1 vgapp lvm2 a-- <200.00g 0
My server is running on VMware vSphere environment, I have increased the disk size on VM from 100 GB to 150 GB and we will be increasing the space without rebooting/restarting the server.
VM Edit Settings > Disk Size Increase from 100 to 150 GB
Note: My server was already deployed with LVM configuration in place initially, we are just leveraging the LVM to extend the partition in this case.
Let us Rescan Extended Disk in OS to make Linux Kernel Aware, non-reboot method
# echo 1 > /sys/class/block/sda/device/rescan
Validate New Disk Size on sda
#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 150G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 98.4G 0 part
├─rhel-root 253:0 0 50G 0 lvm /
├─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
└─rhel-home 253:2 0 46.3G 0 lvm /home
#==> sda size changed from 100 GB to 150 GB
Note: The partition is not automatically adjusted and needs to be resized in two steps
- resizing the partition
- make the kernel aware of the bigger partition
Now typically we use fdisk for the first step and a utility like partprobe (or a reboot) for the second step. But we now have a great software called growpart which we will use here. growpart is part of the cloud-utils-package, and should be available in your distro’s repositories. In my case it was not installed so let’s install it.
#yum install -y cloud-utils-growpart
Let’s increase the partition now with growpart.
As identified by #lsblk, our:
Device = /dev/sda ==> Disk of Root Partition
Partition = /dev/sda3 ==> Where our Root partition is.
#growpart /dev/sda 3
CHANGED: partition=3 start=3328000 old: size=206385152 end=209713152 new: size=311244767,end=314572767
#Note: there is a space in /dev/sda & 3 (3 was our partition number)
Let’s validate new partition size
#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 150G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 148.4G 0 part
├─rhel-root 253:0 0 50G 0 lvm /
├─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
└─rhel-home 253:2 0 46.3G 0 lvm /home
#==> sda3 size changed from 98.4 GB to 148.5 GB
Let’s resize Physical Volume to occupy all new space
#pvresize /dev/sda3
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
Validate with LVM PV Scan
#pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 rhel lvm2 a-- 148.41g 50.00g
/dev/sdb1 vgapp lvm2 a-- <200.00g 0
#==> PSize changed for /dev/sda3
Let’s check the LVM volume group status
#vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 3 0 wz--n- 148.41g 50.00g
vgapp 1 1 0 wz--n- <200.00g 0
#==> We have free space of 50 GB for rhel VG i.e our root partition VG
Let’s resize Logical Volume to occupy all new space
#lvextend -r -l +100%FREE /dev/rhel/root
Size of logical volume rhel/root changed from 50.00 GiB (12800 extents) to 100.00 GiB (25600 extents).
Logical volume rhel/root successfully resized.
meta-data=/dev/mapper/rhel-root isize=512 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 13107200 to 26214400
#==> example: #lvextend -r -l +100%FREE /dev/<name-of-volume-group>/root
Validate root partition should be increased to 100 GB now:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 150G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 148.4G 0 part
├─rhel-root 253:0 0 100G 0 lvm /
├─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
└─rhel-home 253:2 0 46.3G 0 lvm /home
#==> rhel-root increased size.
Hope you find this article useful, share the love with others if you feel worth it.
Have a nice day.