This article is targetted at virtual servers where the capacity of a drive can be extended without having to replace the physical hardware. If you have a physical hard drive where all the space has not been allocated, these instructions could still be of use – but that scenario is not likely.
Identify additional drive capacity
After using your selected hypervisor tool (VMware, AWS Console, etc) to extend the selected drive, you will need to re-scan the drives to allow the operating system to recognise the additional storage capacity.
# ls -1 /sys/class/scsi_device/*/device/rescan
/sys/class/scsi_device/1:0:0:0/device/rescan
/sys/class/scsi_device/2:0:0:0/device/rescan
/sys/class/scsi_device/3:0:0:0/device/rescan
# for i in `ls /sys/class/scsi_device/*/device/rescan`; do echo 1 > ${i}; done
The additional storage capacity should now be available through the lsblk
command – in this example I extended the volume from 10Gb to 20Gb
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 89.1M 1 loop /snap/core/8268
loop1 7:1 0 88.5M 1 loop /snap/core/7270
sda 8:0 0 10G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 9G 0 part
└─ubuntu--vg-ubuntu--lv 253:1 0 4G 0 lvm /
sdb 8:16 0 20G 0 disk
└─data--vg-data 253:0 0 10G 0 lvm /data
sr0 11:0 1 1024M 0 rom
Utilising the new capacity
Now that the operating system has recognised the additional capacity, the filesystem needs to be resized to take up the new storage.
# pvresize /dev/sdb
Physical volume "/dev/sdb" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
After the physical volume has been increased, the logical volume can be extended – make sure to enter the correct volume name to be extended at this time.
# lvextend -l +100%free /dev/data-vg/data
Size of logical volume data-vg/data changed from <10.00 GiB (2559 extents) to <20.00 GiB (5119 extents).
Logical volume data-vg/data successfully resized.
So the logical volume has now been resized, but the operating system still has the filesystem reported as the original size. To extend the filesystem size, run the following command
# resize2fs /dev/data-vg/data
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/data-vg/data is mounted on /data; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/data-vg/data is now 5241856 (4k) blocks long.
And that’s it! The new storage is now available for the operating system to use.
In summary, the commands required are as follows, assuming you are extending drive sdb
and logical volume /dev/data-vg/data
for i in `ls /sys/class/scsi_device/*/device/rescan`; do echo 1 > ${i}; done
pvresize /dev/sdb
lvextend -l +100%free /dev/data-vg/data
resize2fs /dev/data-vg/data