How to Force the Linux Kernel to Reread Partition Tables Without Rebooting Using partprobe and partx

Whenever you provision new storage, expand an existing virtual disk on a cloud hypervisor, or create partitions using partitioning utilities such as fdisk, parted, or gdisk on a running Linux server, you are frequently greeted by a familiar kernel warning:

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 you may run partprobe or partx.

On production servers, enterprise database hosts, or high-availability Kubernetes worker nodes, taking an unscheduled system reboot just to inform the Linux kernel about a modified partition table is completely unacceptable. Fortunately, Linux provides dedicated command-line utilities—specifically partprobe and partx—that force the operating system kernel to scan storage geometry and update device nodes under /dev/ live in memory. Here is how to reread partition tables without rebooting in Linux.

Why Does the Kernel Fail to Reread Partition Tables Automatically?

When storage partitions are actively mounted, claimed by an LVM (Logical Volume Manager) volume group, attached to a software RAID array, or utilized as an active swap space, the Linux block layer locks the parent block device (such as /dev/sda or /dev/nvme0n1) to prevent concurrent metadata corruption.

When a partition tool writes a new partition table header (MBR or GPT) to the first sectors of the drive, it attempts an ioctl(BLKRRPART) system call to instruct the kernel to reread the disk geometry. If any slice of that physical disk is currently open, the system call fails with EBUSY (Device or resource busy). Consequently, new device nodes (such as /dev/sda3 or /dev/nvme0n1p2) are not created, and resizing operations cannot proceed until the kernel updates its internal partition maps.

Method 1: Force Kernel Update Using partprobe

The partprobe utility (included with the GNU parted suite) informs the operating system kernel of partition table changes across all attached devices or a designated storage target:

  1. To probe and refresh partition tables on all connected storage controllers, execute:
    sudo partprobe
  2. To target a specific storage drive without querying unrelated devices, pass the block device path directly:
    sudo partprobe /dev/sdb
    or for NVMe drives:
    sudo partprobe /dev/nvme0n1
  3. To enable verbose output and confirm exactly which partition tables were refreshed, add the -s flag:
    sudo partprobe -s /dev/sdb
    The command will output the partition table schema:
    /dev/sdb: gpt partitions 1 2 3
  4. Verify that the new partition device node has been registered in /dev/ and lsblk:
    lsblk /dev/sdb

Method 2: Target Individual Partitions Using partx

If partprobe encounters locked partitions on a heavily utilized root volume, the partx utility (part of the standard util-linux package) offers a more surgical approach. Instead of attempting to reread the entire disk structure from scratch, partx can add, delete, or resize individual partition entries in the kernel’s table:

1. Adding a Newly Created Partition

If you created partition 3 on /dev/sda and the device node /dev/sda3 did not appear, tell the kernel to register that specific partition index:

sudo partx -a /dev/sda

Or add only the specific new partition number:

sudo partx -a --nr 3 /dev/sda

2. Updating an Expanded Partition Size

If you used growpart or parted to expand an existing partition (for example, expanding partition 1 to consume newly allocated SAN storage), instruct the kernel to refresh that entry:

sudo partx -u --nr 1 /dev/sda

3. Deleting an Obsolete Partition Node

If you deleted a partition from the disk table but the kernel still exposes the old device node, execute:

sudo partx -d --nr 2 /dev/sda

Alternative Kernel Refresh: Using sysfs Directly

If you are working on a minimal embedded Linux installation or container host where neither partprobe nor partx is installed, you can trigger a kernel partition reread directly through the Linux sysfs virtual filesystem:

echo 1 | sudo tee /sys/class/block/sdb/device/rescan

For SCSI and SATA devices, this instructs the SCSI mid-layer to query the disk controller for updated disk capacities and reread the underlying partition structures.

Troubleshooting Persistent “Device or Resource Busy” Errors

If partprobe or partx continues to return EBUSY errors, check these common blocking processes:

  • Active Swap Partitions: If the disk hosts an active swap partition, the kernel holds a lock on the entire physical spindle. Temporarily deactivate swap using sudo swapoff -a, execute sudo partprobe, and re-enable swap with sudo swapon -a.
  • LVM and Device Mapper Mappings: If the partition belongs to an LVM volume group or multipath target, run sudo vgchange -an <vg_name> to deactivate the volume group before reprobing, or use kpartx -u /dev/sdb to update device-mapper mappings.
  • Filesystem Formatting: Once the kernel recognizes the new block device node, format and label your filesystem; consult our comprehensive guide on formatting and labelling a Btrfs filesystem in Linux.
  • Partition Signatures: If you are restructuring disks and encountering lingering metadata, learn how to safely wipe legacy partition headers with our tutorial on erasing filesystem and partition signatures using wipefs.
  • Partition Backups: Before modifying live production partition tables, safeguard your layout using our guide on backing up and restoring GPT partition tables with sgdisk.

Leveraging partprobe and partx allows Linux administrators to expand and provision enterprise storage on live production systems without incurring costly service interruptions or system reboots.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.