Proxmox - Increase VM Disk Size
Steps
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)
Check current storage
First lets check how much space left on the VM:
1
2
3
4
5
6
7
8
9
10
11
12
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
Partitioning the new disk
As you can see the 64 GiB
disk is present without any partitioning. Lets go ahead and partition that disk:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
Check current volume group
Thereafter, let’s go ahead and check the current volume groups using vgdisplay
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
Extend current volume group
Now we can extend it using vgextend
and verify it using vgdisplay
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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
Extend the root volume
Lets extend the root volume by 10 GiB
using lvextend
:
1
2
3
4
5
6
7
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.
Allocate entire disk space to the volume
In case we want the entire disk space to extended you can simply assign 100% of the free space.
1
root@testvm:~# lvextend --resizefs -l +100%FREE /dev/ubuntu1604-vg/root