Situation
-
After a storage upgrade on a cloud/virtual server, the volume size allocated will be larger than the current partition size.
- Need to resize the partition to make sue of the upgraded space.
Procedure
-
SSH to the newly created instance/VM and check current disk usage. You will see that regardless how much volume size upgraded earlier, total space will still follow the original size. In this example:-
-
Current storage size: 9GB
-
Upgraded storage size allocated to instance: 20GB
-
-
You will need to resize this partition to fully utilize the whole allocated volume size.
df -h
Sample output:-
Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 8.5G 5.7G 2.8G 68% / <----------------- Total Disk Space only 8.5GB devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 8.6M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/vda1 497M 169M 329M 34% /boot tmpfs 380M 0 380M 0% /run/user/0 /dev/loop0 477M 2.4M 449M 1% /tmp
-
Check current VM ROOT volume partition layout:-
fdisk /dev/vda
Sample output:-
Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p Disk /dev/vda: 21.5 GB, 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 Disk label type: dos Disk identifier: 0x000eb263 Device Boot Start End Blocks Id System /dev/vda1 * 2048 1026047 512000 83 Linux /dev/vda2 1026048 20971519 9972736 8e Linux LVM <----- Needs to be resized
-
First, we delete (yes, delete) the current Linux LVM partition.
Command (m for help): d Partition number (1,2, default 2): Partition 2 is deleted
-
Next, we create a new primary partition with full volume size allocated to it (In this example, total volume size is 19.5GB):-
Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): 2 First sector (1026048-41943039, default 1026048): Using default value 1026048 Last sector, +sectors or +size{K,M,G} (1026048-41943039, default 41943039): Using default value 41943039 Partition 2 of type Linux and of size 19.5 GiB is set
-
We need to set this new partition type to Linux LVM, just as before.
Command (m for help): t Partition number (1,2, default 2): Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM'
-
Now, view the partition summary again, to verify that the size of the new Linux LVM partition now maximizes the available volume space:-
Command (m for help): p Disk /dev/vda: 21.5 GB, 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 Disk label type: dos Disk identifier: 0x000eb263 Device Boot Start End Blocks Id System /dev/vda1 * 2048 1026047 512000 83 Linux /dev/vda2 1026048 41943039 20458496 8e Linux LVM
-
If all OK, write changes to disk.
Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.
-
Rescan the partitions to update the environment on this new size.
partprobe -s
Example output:-
Error: Partition(s) 2 on /dev/vda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes.
-
Reboot the VM to activate the new sizing:-
shutdown -r now
-
After it reboots, check PV size:-
pvs
Sample output:-
PV VG Fmt Attr PSize PFree /dev/vda2 centos lvm2 a-- 9.51g 40.00m
You will see that the PV size is still the same as the old volume size (in this example, 9.51GB).
-
Resize this partition:-
pvresize /dev/vda2
Sample output:-
Physical volume "/dev/vda2" changed 1 physical volume(s) resized / 0 physical volume(s) not resized
-
Now check PV size after resizing, should be utilizing whole volume space:-
pvs
Sample output:-
PV VG Fmt Attr PSize PFree /dev/vda2 centos lvm2 a-- 19.51g 10.04g
-
Next, check Volume Group (VG) size:-
vgs
Sample output:-
VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- 19.51g 10.04g
-
Looks OK already (utilizing whole space). Next is to check LV:-
lvs
Sample output:-
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 8.47g swap centos -wi-ao---- 1.00g
Ok LV still occupying old amount of space. Need to extend as follows:-
lvextend -l +100%FREE centos/root
Sample output:-
Size of logical volume centos/root changed from 8.47 GiB (2168 extents) to 18.51 GiB (4738 extents). Logical volume centos/root successfully resized.
-
Check LV again:-
lvs
Sample output (verify LSize now fills up maximum volume size):-
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 18.51g swap centos -wi-ao---- 1.00g
-
Now grow the filesystem in order to follow the new volume size. Find out the filesystem of the partition to be resized:-
mount
Sample output:-
.... /dev/mapper/vg_centos6template-lv_root on / type ext4 (rw) ....
-
Resize the filesystem according to its type:-
-
For xfs filesystem, use xfs_growfs, for example:-
xfs_growfs /dev/mapper/centos-root
Sample output:-
meta-data=/dev/mapper/centos-root isize=256 agcount=4, agsize=555008 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 spinodes=0 data = bsize=4096 blocks=2220032, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 2220032 to 4851712
-
For ext4 filesystem, use resize2fs, for example:-
resize2fs /dev/mapper/vg_centos6template-lv_root
Sample output:-
resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/vg_centos6template-lv_root is mounted on /; on-line resizing required old desc_blocks = 1, new_desc_blocks = 2 Performing an on-line resize of /dev/mapper/vg_centos6template-lv_root to 7683072 (4k) blocks. The filesystem on /dev/mapper/vg_centos6template-lv_root is now 7683072 blocks long.
-
-
Check df -h again to reconfirm:-
df -h
Sample output:-
Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 19G 5.7G 13G 31% / devtmpfs 5.8G 0 5.8G 0% /dev tmpfs 5.8G 0 5.8G 0% /dev/shm tmpfs 5.8G 8.6M 5.8G 1% /run tmpfs 5.8G 0 5.8G 0% /sys/fs/cgroup /dev/vda1 497M 169M 329M 34% /boot /dev/loop0 477M 2.4M 449M 1% /tmp tmpfs 1.2G 0 1.2G 0% /run/user/0
-
Resizing complete. Continue the rest of the tasks you were working on.