Increasing VM Disk Size

These are the steps to increase the disk size of the VMs in Proxmox

  • Add new disk in Proxmox VE UI
  • Partition the new disk
  • Create a new physical device (using pvcreate)
  • Extend the existing volume group
  • Extend the logical volume
  • Extend the file system (ext4 in my case)

First lets check how much space left on the VM:

root@jupyterhub:~# df -h
Filesystem                       Size  Used Avail Use% Mounted on
udev                             2.0G     0  2.0G   0% /dev
tmpfs                            396M   11M  385M   3% /run
/dev/mapper/ubuntu1604--vg-root   18G   15G  1.8G  90% /
tmpfs                            2.0G  4.0K  2.0G   1% /dev/shm
tmpfs                            5.0M     0  5.0M   0% /run/lock
tmpfs                            2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/ubuntu1604--vg-home   20G   44M   19G   1% /home/jupyter
/dev/mapper/ubuntu1604--vg-log   465M  112M  325M  26% /var/log
/dev/sda1                        472M  155M  293M  35% /boot
tmpfs                            396M     0  396M   0% /run/user/2160

Now lets see all the available disks on the system after adding a new disk through Promox VE User Interface:

root@testvm:~# fdisk -l
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x93152316

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1  *       2048   999423   997376  487M 83 Linux
/dev/sda2       1001470 20969471 19968002  9.5G  5 Extended
/dev/sda5       1001472 20969471 19968000  9.5G 8e Linux LVM


Disk /dev/sdb: 64 GiB, 68719476736 bytes, 134217728 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdc: 32 GiB, 34359738368 bytes, 67108864 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6B4A0899-D3D5-4771-856D-EDB254829C91

Device     Start      End  Sectors Size Type
/dev/sdc1   2048 67108830 67106783  32G Linux filesystem


Disk /dev/mapper/ubuntu1604--vg-root: 17.5 GiB, 18815647744 bytes, 36749312 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ubuntu1604--vg-swap: 952 MiB, 998244352 bytes, 1949696 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ubuntu1604--vg-log: 488 MiB, 511705088 bytes, 999424 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ubuntu1604--vg-home: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

As you can see the 64GiB disk is present without any partitioning. Lets go ahead and partition that disk:

root@testvm:~# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x193c65a1.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-134217727, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-134217727, default 134217727):

Created a new partition 1 of type 'Linux' and of size 64 GiB.

Command (m for help): p
Disk /dev/sdb: 64 GiB, 68719476736 bytes, 134217728 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x193c65a1

Device     Boot Start       End   Sectors Size Id Type
/dev/sdb1        2048 134217727 134215680  64G 83 Linux

Command (m for help): p
Disk /dev/sdb: 64 GiB, 68719476736 bytes, 134217728 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x193c65a1

Device     Boot Start       End   Sectors Size Id Type
/dev/sdb1        2048 134217727 134215680  64G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Now let’s create a new physical device with the newly partitioned disk using pvcreate and view it using pvdisplay:

root@testvm:~# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created

root@jupyterhub:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda5
  VG Name               ubuntu1604-vg
  PV Size               9.52 GiB / not usable 2.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              2437
  Free PE               0
  Allocated PE          2437
  PV UUID               qNCelA-nJDf-NX7Q-ZkK4-iR4M-vQho-mfFqA1

  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               ubuntu1604-vg
  PV Size               32.00 GiB / not usable 2.98 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              8191
  Free PE               662
  Allocated PE          7529
  PV UUID               fu3bxw-oCCH-jOh1-428b-lAQf-DCBe-E6KQiv

  "/dev/sdb1" is a new physical volume of "64.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               64.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               F0FsRP-ROTm-xbMv-7I3D-E0Jh-mfBw-rM4mn4

Thereafter, let’s go ahead and check the current volume groups using vgdisplay:

root@testvm:~# vgdisplay
  --- Volume group ---
  VG Name               ubuntu1604-vg
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  12
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               4
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               41.52 GiB
  PE Size               4.00 MiB
  Total PE              10628
  Alloc PE / Size       9966 / 38.93 GiB
  Free  PE / Size       662 / 2.59 GiB
  VG UUID               BR84gF-JBKN-ndcp-At3G-l9UB-4CAs-KVyyta

Now we can extend it using vgextend and verify it using vgdisplay:

root@testvm:~# vgextend ubuntu1604-vg /dev/sdb1
  Volume group "ubuntu1604-vg" successfully extended

root@testvm:~# vgdisplay
  --- Volume group ---
  VG Name               ubuntu1604-vg
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  13
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               4
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               105.51 GiB
  PE Size               4.00 MiB
  Total PE              27011
  Alloc PE / Size       9966 / 38.93 GiB
  Free  PE / Size       17045 / 66.58 GiB
  VG UUID               BR84gF-JBKN-ndcp-At3G-l9UB-4CAs-KVyyta

Thereafter, lets go ahead and check the logical volumes using lvdisplay:

root@testvm:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/ubuntu1604-vg/swap
  LV Name                swap
  VG Name                ubuntu1604-vg
  LV UUID                0SYO9N-bAdU-vfGR-soF1-vvcp-Bg8v-EPrJEL
  LV Write Access        read/write
  LV Creation host, time ubuntu1604, 2017-06-27 15:12:58 +0100
  LV Status              available
  # open                 2
  LV Size                952.00 MiB
  Current LE             238
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1

  --- Logical volume ---
  LV Path                /dev/ubuntu1604-vg/log
  LV Name                log
  VG Name                ubuntu1604-vg
  LV UUID                fXp0kR-TYBp-mdiS-sYXd-ja2S-dABf-ThjEf0
  LV Write Access        read/write
  LV Creation host, time ubuntu1604, 2017-06-27 15:13:14 +0100
  LV Status              available
  # open                 1
  LV Size                488.00 MiB
  Current LE             122
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:2

  --- Logical volume ---
  LV Path                /dev/ubuntu1604-vg/root
  LV Name                root
  VG Name                ubuntu1604-vg
  LV UUID                WwteZj-vPhz-3iNC-26Dg-Ju36-o6xe-75WRto
  LV Write Access        read/write
  LV Creation host, time ubuntu1604, 2017-06-27 15:13:50 +0100
  LV Status              available
  # open                 1
  LV Size                17.52 GiB
  Current LE             4486
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

  --- Logical volume ---
  LV Path                /dev/ubuntu1604-vg/home
  LV Name                home
  VG Name                ubuntu1604-vg
  LV UUID                OQHBcC-aEeD-ePLq-ezMU-3OgV-JPyn-2yarKe
  LV Write Access        read/write
  LV Creation host, time ubuntu1604, 2017-09-27 12:16:53 +0100
  LV Status              available
  # open                 1
  LV Size                20.00 GiB
  Current LE             5120
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:3

Lets extend the root volume by 10 GiB using lvextend:

root@testvm:~# lvextend --resizefs -L+10G /dev/ubuntu1604-vg/root
  Size of logical volume ubuntu1604-vg/root changed from 22.52 GiB (5766 extents) to 32.52 GiB (8326 extents).
  Logical volume root successfully resized.
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/mapper/ubuntu1604--vg-root is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/mapper/ubuntu1604--vg-root is now 8525824 (4k) blocks long.