When production database or application servers running RHEL, Rocky Linux, CentOS (7 ~ 9), or Ubuntu (20.04 ~ 24.04 LTS) reach 90%+ disk utilization, scheduling emergency maintenance downtime is rarely an acceptable option. In modern virtualization (VMware, KVM, Nutanix, SimpliVity) and cloud infrastructures, performing 100% online, non-disruptive storage expansion is an essential skill for system engineers.

Here is the battle-tested standard operating procedure for triggering a kernel SCSI bus rescan, extending LVM physical/logical volumes, and expanding filesystems (XFS vs EXT4) without unmounting.


1. The 4-Step Process

flowchart LR
    A["1. Expand VM/Storage Disk"] --> B["2. Trigger OS SCSI Bus Rescan"]
    B --> C["3. Extend LVM (pvresize / lvextend)"]
    C --> D["4. Grow Filesystem (xfs_growfs / resize2fs)"]

2. Step 1: Trigger SCSI Bus Rescan in Linux Kernel

After increasing disk size in your hypervisor or SAN storage (e.g., 100GB to 200GB), the Linux kernel does not automatically notice the change. You can trigger a rescan without rebooting:

# Verify disk name
lsblk

# Trigger rescan on specific disk (e.g. /dev/sdb)
echo 1 > /sys/class/block/sdb/device/rescan

To rescan all SCSI hosts at once:

for host in /sys/class/scsi_host/host*/scan; do echo "- - -" > ${host}; done

Check dmesg and lsblk to verify the new capacity:

dmesg | tail -n 15
lsblk /dev/sdb

3. Step 2: Resize Partition Table (If Partitioned)

If the entire raw disk was formatted directly as an LVM Physical Volume (pvcreate /dev/sdb), skip to Step 3.
If partitioned (/dev/sdb1), grow the partition using growpart:

# Install growpart if not already present
# RHEL/Rocky: yum install -y cloud-utils-growpart
# Ubuntu: apt install -y cloud-guest-utils

# Expand partition 1 on /dev/sdb
growpart /dev/sdb 1

4. Step 3: Extend LVM Physical & Logical Volumes

1) Update Physical Volume (PV)

pvresize /dev/sdb
# (or pvresize /dev/sdb1 if using a partition)

# Verify new Free Space
pvs
vgs

2) Extend Logical Volume (LV)

# Add 50GB
lvextend -L +50G /dev/mapper/vg_data-lv_data

# Or allocate 100% of remaining free space in Volume Group (most common)
lvextend -l +100%FREE /dev/mapper/vg_data-lv_data

5. Step 4: Online Filesystem Growth (XFS vs EXT4)

Identify your filesystem type:

df -Th /data

For XFS (Default on RHEL / Rocky / CentOS):

Specify the mount point directory:

xfs_growfs /data

⚠️ Important Field Note : XFS supports online expansion seamlessly, butcannot be shrunk. Never over-allocate if you expect to reduce storage later.

For EXT4 (Default on Ubuntu / Debian):

Specify the logical volume block device path:

resize2fs /dev/mapper/vg_data-lv_data

6. Verification

Confirm the new usable capacity:

df -h /data

The available storage updates immediately without zero impact on active I/O workloads.