How to extend a Linux PV partition online after virtual disk growth

Solution 1:

You can do this without a reboot. pvresize doesn't resize the physical volume until the partition is updated with the added space. You must fdisk the partition and recreate it with the the new full size of the disk, after you can rescan'd the drives for it to see the extra space in the first place.

More info: http://theducks.org/2009/11/expanding-lvm-partitions-in-vmware-on-the-fly/

Solution 2:

The other answered provided do not address your question, I've identified the correct command to rescan an already connected disk.

We must rescan your already connected disk, first identify which disk you want to rescan.

ls /sys/class/scsi_disk/

In my example, I see a symlink named 0:0:0:0, so we rescan this scsi-disk.

echo '1' > /sys/class/scsi_disk/0\:0\:0\:0/device/rescan

I just extended my VMware disk also, and had to scour other answers to find the correct command. Hopefully this will save future searchers from futile attempts.

Solution 3:

As far as the root file system / is mounted on the disk that has been resized, the partition table and disk size are not refreshed by a SCSI rescan with Linux 2.6.26.

I really hope it will be better soon with newer kernel versions.

So I had to:

  • reboot a first time to see the new disk size in fdisk
  • delete the old primary PV partion in fdisk
  • create a partition entry with the same number and start sector until the end of disk
  • reboot a second time OR run partprobe from parted package only if / is not mounted there
  • Now I can run pvresize to get new free space, lvextend and resize2fs to allocate some more space to a file system

I have been recommended to simply discard that stupid old partition table and run pvcreate directly on the device as Grub2 is able to load a kernel image directly from a file system on a LVM partition. But such a setup is not obvious at all with distribution installers.

Update: I have just checked with Debian GNU/Linux Jessie 8.2 running kernel 3.16 and parted 3.2, the partprobe now succeeds after partition table edition with cfdisk with no reboot. pvresize works immediately after.

If you want to extend a PV stored as logical PC partition, for instance /dev/sda5 on extended primary partition /dev/sda2, do not use fdisk but prefer parted:

parted /dev/sda2 -1
parted /dev/sda5 -1
pvresize /dev/sda5

Solution 4:

You need to rescan the disks before you can make the bigger partition.

In Centos you can do this by

ls /sys/class/scsi_host

then for each host

echo "- - -" > /sys/class/scsi_host/host#/scan

(replace # with the number)

There is also one more step to the above which is expanding ext or whatever filesystem you are using once you have resized the partition.

You are still going to have to unmount that partition though at some point. What we tend to do is add a 2nd vmware disk and use lvm to extend onto the new disk (and reduce off the old if it is a replacement) as this allows the whole process to happen live.

Solution 5:

My PV was not in a partition, but existed on /dev/sdb directly.

On Ubuntu 16.04.1 I was able to do the following to resize a volume from 1024GB to 1.4TB:

echo '1' > /sys/class/scsi_disk/32\:0\:1\:0/device/rescan
pvresize /dev/sdb
lvextend -l +100%FREE /dev/nvr01-opt/opt
resize2fs /dev/nvr01-opt/opt

No fdisk required, and the space was immediately available.