[CentOS] Troubles expanding file system. - Solved

Thu Sep 9 15:46:22 UTC 2021
Jeff Boyce <jboyce at meridianenv.com>

To follow-up and provide a conclusion to my issue, in case anyone else 
runs into a similar situation.

TLDR - go to bottom and read item #7.

To recap the issue:
I have a Dell PowerEdge server with a CentOS KVM host (Earth) with
one CentOS guest (Sequoia) that I am trying to expand the partition and
filesystem on.  I have LVM logical volumes on the host system (Earth),
which are used as devices/partitions on the guest system (Sequoia).  In
this particular situation I have successfully extended the logical
volume (lv_SeqEco) on Earth from 500GB to 700GB.

1.  Checking the disk information (lsblk) on Earth shows that the
logical volume (lv_SeqEco) is now listed as 700GB.

2.  Checking disk information (lsblk) on Sequoia shows that the disk
/dev/vde is still listed as 500GB, and partition /dev/vde1 where the
mount point /ecosystem is located is also listed as 500GB.

3.  I had tried using the resize2fs command to expand the filesystem on
/dev/vde1, but it returned with the result that there was nothing to
do.  Which makes sense now after I checked the disk information, since
/dev/vde on Sequoia has not increased from 500GB to 700GB.

4.  On previous occasions when I have done this task, I would just start
GParted on Sequoia and use the GUI to expand the partition and
filesystem.  I am unable to do this now, as the VGA adapter on my server 
has died and I have no graphical output to the attached monitor.

5.  My goal was to not have to not have to reboot the system. Especially 
since it is a 10-year old server and there is no longer VGA output to 
view the boot process.

What I tried, and what worked to solve my issue:

1.  First, I tried rescannning the device on the guest:
echo 1 > 

This resulted in no output, and checking lsblk on the guest (Sequoia) 
showed no change:
vde  500GB  disk
vde1   500GB   part /ecosystem

2.  Second, I tried using "virsh blockresize" from the host (Earth) system.
Get the block size information
earth# virsh domblkinfo SequoiaVM vde
output:  vde capacity 751619276800

Resize the block (express the size in Bytes)
earth# virsh blockresize SequioaVM vde 751619276800B
output:  Block device vde is resized.

Check the block device on the guest to confirm.
sequoia# lsblk
vde   700GB   disk
vde1   500GB   part /ecosystem

Therefore, virsh blockresize was successful.

3.  I now have the larger disk recognized on the guest system, but still 
need to expand the partition and the filesystem.  Tried the following 

resize2fs -p /dev/vde1
    output:  filesystem is already xx blocks long, nothing to do.

growpart /dev/vde 1
    output:  This showed output indicating the partition had changed
       changed:  partition=1 start=63
       old:  size=1048575937
       new:  size=1468003572

However, checking lsblk on the guest still showed the same result
    vde   700GB   disk
    vde1   500GB   part /ecosystem

On the off chance that growpart was successful, I ran resize2fs again 
and it produced the same result as above.

    output:  failed to re-read the partition table on all attached 
devices (including /dev/vde1); device or resource busy.

Tried using "parted" and its resize command.  First, using the print 
command to get the parameters of /dev/vde (output: end=751617861119B, 
size=751617828864B).  Then changing parted to select (use) /dev/vde1 and 
used print command to view parameters of /dev/vde1 (output:  
end=536870879743B, size=536870879744B).

(parted)# resize 1 0 751617861119
output:  The location 751617861119 is outside of the device /dev/vde1

Looked at using fdisk; however, the documentation stated that the only 
way to change the partition size using fdisk is by deleting it and 
recreating it.  I didn't want to do this.

I finally decided that everything indicated that I would not be able to 
complete this while the system was online and/or mounted, despite all my 
research information showing that.

4.  Unmounted the filesystem of the guest and run partprobe.

sequoia# service smb stop
sequoia# umount /ecosystem
sequoia# partprobe
    output:  This produced the same warnings as before (failed to 
re-read the partition, device busy) for all partitions that were still 
mounted, but did not produce the warning for partition /dev/vde1 that 
had been unmounted.

sequoia# lsblk
   vde   700GB   disk
    vde1   700GB   part /ecosystem

Success.  The new partition is now recognized in the kernel, and I 
should now be able to resize the filesystem.

5.  Run resize2fs

sequoia# resize2fs -p /dev/vde1
    output:  please run e2fsck -f /dev/vde1 first

sequoia# e2fsck -f -C 0 /dev/vde1  (-C 0 will display the progress)
    output:  system passed all checks.

sequoia# resize2fs -p /dev/vde1
    output:  resizing the filesystem on /dev/vde1 to 183500446 (4k) 
blocks, begin Pass 1, extending inode table, filesystem is now 183500446 
blocks long.

6.  Remount the filesystem and check the filesystem size.

sequoia# mount /dev/vde1 /ecosystem
sequoia# service smb start
sequoia# df -h

7.  So in conclusion I needed to do the following steps to resize and 
expand my disk without a reboot.  There may still be other ways that 
this can be accomplished, but this worked for my CentOS 6 system (both 
host and guest).

   a.  On the host system, lvextend to expand the logical volume used by 
the guest as it's disk.
   b.  On the host system, virsh blockresize to get the guest system to 
recognize the expanded disk space.
   c.  On the guest system, growpart to grow the partition to the 
expanded space.
   d.  On the guest system, unmount the filesystem (stop services as 
   e.  On the guest system, partprobe to get the kernel to recognize the 
expanded partition.
   f.  On the guest system, resize2fs (run filesystem check if required) 
to expand the filesystem.

Thanks to all that provided suggestions and insight, it was very helpful 
in my research and methodical stepping through this process.