22

VMware allows to extend the size of a virtual disk online - when the VM is running. The next expected steps for Linux system are:

  1. extend the partition: delete and create a larger one with fdisk
  2. extend the PV size with pvresize
  3. use free extents for lvresize operations
  4. and then resize2fs for file system

But I am stuck on the first step: fdisk and sfdisk still display the old size for the disk.

My disk is a SCSI virtual disk connected thanks to the virtual LSI Logic controller.

How to refresh the virtual disk size and partition table information available in Linux kernel without reboot ?

As far as I know all that steps are possible for a running Windows, without reboot and even without any user actions thanks to VMWare tools. On Linux, I expects to do all steps online too and I already know steps 2, 3 and 4 work online. But the first one - change partition size declared in the partition table (still) seems to require a reboot.

Update: My system is a Debian Lenny with kernel 2.6.26 and the disk I have extended is the main disk with a large PV containing the "root" LV for "/".

Yves Martin
  • 879
  • 3
  • 7
  • 21

8 Answers8

18

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/

akraut
  • 311
  • 1
  • 3
  • 17
GRegg
  • 204
  • 2
  • 2
  • 1
    I agree but whatever I did to rescan the SCSI drive, I never got the new disk size visible in fdisk, so I was stuck until a first reboot. And "partprobe" is a new command for me. Definitely I have to test this procedure... Thank you. – Yves Martin Oct 09 '12 at 19:39
  • For information `partprobe` is a command from `parted` project. – Yves Martin Mar 25 '13 at 15:32
  • If you weren't seeing the new disk size in `fdisk` then the issue isn't with LVM. I'd have to ask how you were scanning since that usually picks up the new disk size to me. I also don't partition disks I'm going to use LVM on if I can help it. If you `pvcreate` the whole disk then updating the partition table is just one less thing you have to do when you go to resize it. – Bratchley Jun 11 '15 at 19:34
18

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.

J. M. Becker
  • 2,431
  • 1
  • 16
  • 21
5

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
Yves Martin
  • 879
  • 3
  • 7
  • 21
3

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.

JamesRyan
  • 8,138
  • 2
  • 24
  • 36
  • My system is a Debian and I run rescan-scsi-bus.sh from scsitools. I think it is equivalent to the command you propose on /sys/class/scsi_host but "fdisk" still display the old size on my disk... – Yves Martin Apr 11 '12 at 07:47
  • Does it recognise a new vmware disk when you rescan? – JamesRyan Apr 11 '12 at 10:16
  • No. This disk exists already, it is not new. The disk size has been increased in vSphere client. – Yves Martin Apr 11 '12 at 12:23
  • I realise that but you should try adding a new one to see if your scan picks it up to narrow down the problem – JamesRyan Apr 12 '12 at 09:27
  • I agree with you and I already know by practice that add a new SCSI disk to a Linux machine can be done online for all the steps listed. As the VM may run for 10 years... I fear the total number of disks in a near future... – Yves Martin Apr 12 '12 at 09:50
  • Well I just meant to try it to make sure your scan command was working at all, but what you can do with lvm is extend to the new disk, pvmove the data to the new disk and then reduce off the old disk and remove it from the the VM entirely – JamesRyan Apr 12 '12 at 10:38
  • OK that is a (long) way... In my opinion, the only thing lacking is a "refresh" of disk information and partition table in Linux kernel. That is what I am looking for. – Yves Martin Apr 12 '12 at 10:41
  • Ok so add a small test disk and see if the scan picks it up! then you can tell if your scan command is completely wrong or if its just because the drive is in use or whatever – JamesRyan Apr 12 '12 at 10:42
  • Yes it works... – Yves Martin Apr 13 '12 at 05:59
  • Only TechZilla way worked for me. – B Medeiros Dec 16 '15 at 21:48
3

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.

mwfearnley
  • 757
  • 9
  • 21
peelman
  • 801
  • 1
  • 5
  • 11
  • 4
    Lucky you. The reason is because you have no partition table but direct PV on `/dev/sdb`, which is probably your application data only secondary disk, but not your first disk with system (to mention I configure my systems the same way !). My question was about extending last PV/partition of such a "system disk" (cloned from a template), as far as Linux distributions do not support installation on direct PV whereas Linux kernel and GRUB should be able to boot and run on system disk without partition table at all. – Yves Martin Dec 12 '16 at 09:44
  • Fair point. For those that find this via Google: keep that in mind. – peelman Dec 12 '16 at 10:16
1

You've not provided us enough detail to tell you the exact commands you'll need but essentially you'll need to use the lvextend command to extend the logical volume, then the e2fsck command and then the resize2fs command to actually expand your filesystem. Each of these commands will need additional parameters, specifically device and filesystem information, that we can't provide but you'll need to know these, just use the --help option for each command to tell you how to use them specifically, plus you'll probably end up using the pvdisplay, lvdisplay and mount commands to help fill out these parameters.

Chopper3
  • 100,240
  • 9
  • 106
  • 238
1

No one has posted a complete set of commands, so here we go:

# the following steps are for adding a new HDD
apt install scsitools
rescan-scsi-bus
pvcreate /dev/sdX
vgextend /dev/vgname /dev/sdx
lvextend -l +100%FREE /dev/vgname/root 
resize2fs /dev/vgname/root

#if resizing existing HDD
fdisk /dev/sdX
create new partition
pvcreate /dev/sdXn
vgextend /dev/vgname /dev/sdXn
lvextend -l +100%FREE /dev/vgname/root 
resize2fs /dev/vgname/root
mzhaase
  • 3,778
  • 2
  • 19
  • 32
  • Sorry to distrub but I find adding disk, partition and PV at each disk growth is "ugly" and do not scale. My question was about extending an existing primary partition on disk without adding disk or partition or PV. – Yves Martin Dec 12 '16 at 09:39
0

If you dont partition your PV before adding it and instead add the raw disk (/dev/sda instead of /dev/sda1) then you can skip the fdisk part entirely and just pvextend /dev/sda

Sorry for the necro