Re-read The Partition Table Without Rebooting Linux System

Posted on in Categories File system, Linux, RedHat/Fedora Linux, Sys admin, Tips, Troubleshooting, Ubuntu Linux last updated May 8, 2006

IIf you are using hot swappable hard disk and created a new partition using the fdisk, then you need to reboot Linux based system to get partition recognized. Without reboot, you will NOT be able to create a filesystem on your newly created or modified partitions with the mke2fs command.
The kernel still uses the old table. The new table will be utilized at the next reboot or after you run partprobe or kpartx command. Both of these programs informs the operating system kernel of partition table changes, by requesting that the operating system re-read the partition table.

You will seen an error that read as follows:

Re-reading the partition table failed.: Device or resource busy

A sample session:

fdisk command in action
fdisk command in action

After the fdisk command session (which makes changes to partition table) just type the following command:
# partprobe
OR
# partprobe /dev/sdXpartprobepartprobe
Replace /dev/sdX or /dev/hdX with actual device name. Now you will able to create filesystem on new partition with the mke2fs command.

Inform the OS of partition table changes

The partprobe command is part of GNU parted software. parted is a disk partitioning and partition resizing program. It allows you to create, destroy, resize, move and copy ext2, ext3, linux-swap, FAT, FAT32, and reiserfs partitions. It can create, resize and move Macintosh HFS partitions, as well as detect jfs, ntfs, ufs, and xfs partitions. It is useful for creating space for new operating systems, reorganising disk usage, and copying data to new hard disks.

Install parted

To use partprobe command install parted. If you are using Debian / Ubuntu Linux, enter:
$ sudo apt-get install parted
OR if you are using RHEL version <= 4, enter: # up2date parted
OR if you are using CentOS / RHEL 5/6, enter:
# yum install parted
OR if you are Fedora, enter:
$ sudo dnf install parted
Now you can use the partprobe command.

Install kpartx

The kpartx tool, derived from util-linux’ partx, reads partition tables on specified device and create device maps over partitions segments detected. It is called from hotplug upon device maps creation and deletion. To use kpartx command install kpartx. If you are using Debian / Ubuntu Linux, enter:
$ sudo apt install kpartx
To use, type:
# kpartx -u /dev/sdd2

See also:

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

38 comment

    1. partprobe won’t always work. If you are lucky hdparm -z will work, but again cannot be guartenteed. The problem with Linux and partition tables carries on into the 21st century’s second decade.

  1. Thanks for the tips (LINUXTITLI, Jason) and also thanks domen for making this more googlable!

    Created a new partition from unformatted disk space (got error in re-reading the partition table: device busy) , partprobed, mkfs.ext3’d, e2labeled and mounted!
    No reboot needed, thanks again. 🙂

    1. i am run this command in rhel6 .and i want without reboot update partition table.when i am use partprobe ,kpartx, and hdperm -z command .
      system are given massage device or resource busy due to failed .

  2. I found this website while I was trying to figure out what the difference between the three ways I’ve found so far (partprobe, hdparm -z /dev/disk, and blockdev –rereadpt /dev/disk) is.

    1. According to ltrace and strace, hdparm and blockdev are basically the same(they all called ioctl(3, BLKRRPART, 0) to reread partition table).

      partprobe is much complex the the above but I don’t know what they’re doing underhood.

  3. Never was able to get the disk formatting re-read using partprobe. Had to reboot servers. May be to note that I am working on Redhat clusters with gfs. That shouldn’t matter much, as I run partprobe on both nodes.

    1. i am run this command in rhel6 .and i want without reboot update partition table.when i am use partprobe ,kpartx, and hdperm -z command .
      system are give massage device or resource busy due to failed .
      so what are doing me pls help???

      1. I found that even after all the fdisk’ing, the partition/disk was still in use. Ended up being nfs (even though I was not sharing that disk any more and had run exportfs -av a few times). I had to restart nfs server to free the disk, then partprobe worked.

        I thought I was heading for a reboot.

  4. Doesn’t seem to work for the disk that houses the root-partition or CentOS/RHEL machines. The resize2fs command simply stats the filesystem is already at maximum size. If I enter a value of 100 blocks less then available resize2fs tells me that the devices is not that big. Any hints?

    – “partprobe” or “partprobe /dev/sda” does not provide any output and nothing is written in dmesg.
    – “hdparm -z /dev/sda” throws me the same “device or resource busy” message as fdisk.
    – “echo 1 > /sys/block/sda/device/rescan” doesn’t help either.

    This is quite annoying as almost all of our machines are virtual machines which we can expand on-the-fly. Even more annoying is the fact that we can accomplish this with just a few clicks on a Windows machine…

  5. Hi,

    For those on RH6/CentOS6 wondering why this does not work stop wondering, it never will. Due to stupid people frying their systems playing with partitions on the side the device will always block you with “BUSY” if there is even one active partition on a disk still in use. This was implemented by one of the developers, cant remember where I saw it but it was on BugZilla somewhere listed as a bug.

    For example:

    sda1 – In use
    sda2 – Not in use

    If you modify the partition data for sda2 and try to get it to reread in live without a reboot it will throw a device busy because sda1 is still active and in use. This at the end of the day is always going to lead to one of two paths, kill everything, unmount everything and try again or reboot. Both result in the same case scenario anyway, downtime of services.

    You can rescan the bus for the devices but that wont reread in the partition information, only physical disk size. So you will have a disk that now accurately reflects the increase, say from 10GB to 20GB but you still wont be able to resize the partition to fill the space because the kernel cant reread in the changes to it you have made until after a reboot.

    Please, if someone wants to point this out as being incorrect I beg of you please go right ahead because I seem to just keep running into dead ends.

    1. The solution is rather simple: the 1st disk should have a small /boot partition, and the rest should be a single LVM physical volume. That’s why I’ve never bothered with that sort of a problem in years. LVM makes life quite wonderful, and offers features that don’t exist even on Windows 🙂

  6. @Jay Porter, your problem should be caused by old version parted . After I upgrade from 2.1 ( centos6.3 default ) to 3.1 (build from source). I can happily make/delete partitions without booting now!

    1. Looks like it is problem with older version parted. So gist of the story if you don’t have parted 3.1 in your system be ready to reboot your system. As none of the technique seems to work on RHEL 6

  7. Anyone else still having trouble with this, I found a solution for RHEL 6 somewhere else

    Read the partition table with partx -a /dev/sda

    It spits out an error but the second time I ran partx it showed the 3rd partition I created with cfdisk.

  8. If you are using RHEL/CENTOS6 with LVM do the following:

    example:
    -/dev/sdb1 was created and is LVM partition.
    -In VMware I extended the Virtual Disk file an extra 100GB
    -I added a new partition called /dev/sdb2
    -OS states I need to run kpartx or partprobe
    -OS states drive is busy and cannot continue

    In order to get the drive working, I did the following;

    umount /mnt/
    vgchange -an vg_data
    blockdev –rereadpt /dev/ (ex /dev/sdb not /dev/sdb1,2,3,4…)
    vgchange -ay
    pvcreate /dev/sdb2

Leave a Comment