Latest Version: https://forums.truenas.com/t/howto-resize-a-linux-vms-llvm-virtual-disk-on-a-zvol/128
If you have a Linux VM, which uses the LLVM filesystem, you can easily increase the disk space available to the VM.
Linux Logical Volume Manager allows you to have logical volumes (LV) on top of logical volume groups (VG) on top of physical volumes (PV) (ie partitions).
This is conceptually similar to zvols on pools on vdevs in zfs.
This was tested with TrueNAS-CORE 12 and Ubuntu 20.04.
Firstly, there are some useful commands:
So, to start
and you should see something like this
This is the interesting line:
it gives you the hint of which LV and VG the root drive is using.
you can list the logical volumes
and physical volumes
Now you can see that the ubuntu-lv LV is on the ubuntu-vg VG is on the PV /dev/vda3
(that's partition 3 of device vda)
Shutdown the VM. Edit the ZVOL to change the size. Restart the VM.
Once you get back, run parted with the device id, repair the GPT information and resize the partition, as per below.
launch parted on the disk
view the partitions
Parted will offer to fix the GPT. Fix it.
The disk is resized, but the partition is not.
Resize partition 3 to 100%,
And the partition is resized. You can exit parted with
now we need to resize the physical volume
You can check the result with
Then you can use lvextend to resize the LV and resize the the filesystem, over the resized pv.
and finally... you can check the freespace again.
85G free instead of 0 much better.
If you have a Linux VM, which uses the LLVM filesystem, you can easily increase the disk space available to the VM.
Linux Logical Volume Manager allows you to have logical volumes (LV) on top of logical volume groups (VG) on top of physical volumes (PV) (ie partitions).
This is conceptually similar to zvols on pools on vdevs in zfs.
This was tested with TrueNAS-CORE 12 and Ubuntu 20.04.
Firstly, there are some useful commands:
pvs
- list physical volumes lvs
- list logical volumes lvdisplay
- logical volume display pvdisplay
- physical volume display df
- disk free spaceSo, to start
df -h
- show disk free space, human readableand you should see something like this
Code:
Filesystem Size Used Avail Use% Mounted on dev 2.9G 0 2.9G 0% /dev tmpfs 595M 61M 535M 11% /run /dev/mapper/ubuntu--vg-ubuntu--lv 8.4G 8.1G 0 100% / tmpfs 3.0G 0 3.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock
This is the interesting line:
Code:
/dev/mapper/ubuntu--vg-ubuntu--lv 8.4G 8.1G 0 100% /
it gives you the hint of which LV and VG the root drive is using.
you can list the logical volumes
lvs
Code:
root@ubuntu:/# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert ubuntu-lv ubuntu-vg -wi-ao---- <8.50g
and physical volumes
pvs
Code:
root@ubuntu:/# pvs PV VG Fmt Attr PSize PFree /dev/vda3 ubuntu-vg lvm2 a-- <8.50g 0
Now you can see that the ubuntu-lv LV is on the ubuntu-vg VG is on the PV /dev/vda3
(that's partition 3 of device vda)
Shutdown the VM. Edit the ZVOL to change the size. Restart the VM.
Once you get back, run parted with the device id, repair the GPT information and resize the partition, as per below.
launch parted on the disk
parted /dev/vda
Code:
root@ubuntu:~# parted /dev/vda GNU Parted 3.3 Using /dev/vda Welcome to GNU Parted! Type 'help' to view a list of commands.
view the partitions
print
Code:
(parted) print Warning: Not all of the space available to /dev/vda appears to be used, you can fix the GPT to use all of the space (an extra 188743680 blocks) or continue with the current setting?
Parted will offer to fix the GPT. Fix it.
f
Code:
Fix/Ignore? f Model: Virtio Block Device (virtblk) Disk /dev/vda: 107GB Sector size (logical/physical): 512B/16384B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 538MB 537MB fat32 boot, esp 2 538MB 1612MB 1074MB ext4 3 1612MB 10.7GB 9125MB
The disk is resized, but the partition is not.
Resize partition 3 to 100%,
resizepart 3 100%
Code:
(parted) resizepart 3 100% (parted) print Model: Virtio Block Device (virtblk) Disk /dev/vda: 107GB Sector size (logical/physical): 512B/16384B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 538MB 537MB fat32 boot, esp 2 538MB 1612MB 1074MB ext4 3 1612MB 107GB 106GB (parted)
And the partition is resized. You can exit parted with
quit
now we need to resize the physical volume
pvresize /dev/vda3
Code:
root@ubuntu:~# pvresize /dev/vda3 Physical volume "/dev/vda3" changed 1 physical volume(s) resized or updated / 0 physical volume(s) not resized
You can check the result with
pvdisplay
Code:
root@ubuntu:~# pvdisplay --- Physical volume --- PV Name /dev/vda3 VG Name ubuntu-vg PV Size <98.50 GiB / not usable 1.98 MiB Allocatable yes PE Size 4.00 MiB Total PE 25215 Free PE 23040 Allocated PE 2175 PV UUID IGdmTf-7Iql-V9UK-q3aD-BdNP-VfBo-VPx1Hs
Then you can use lvextend to resize the LV and resize the the filesystem, over the resized pv.
lvextend --resizefs ubuntu-vg/ubuntu-lv /dev/vda3
Code:
root@ubuntu:~# lvextend --resizefs ubuntu-vg/ubuntu-lv /dev/vda3 Size of logical volume ubuntu-vg/ubuntu-lv changed from <8.50 GiB (2175 extents) to <98.50 GiB (25215 extents). Logical volume ubuntu-vg/ubuntu-lv successfully resized. resize2fs 1.45.5 (07-Jan-2020) Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required old_desc_blocks = 2, new_desc_blocks = 13 The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 25820160 (4k) blocks long. root@ubuntu:~#
and finally... you can check the freespace again.
df -h
Code:
root@ubuntu:~# df -h Filesystem Size Used Avail Use% Mounted on udev 2.9G 0 2.9G 0% /dev tmpfs 595M 1.1M 594M 1% /run /dev/mapper/ubuntu--vg-ubuntu--lv 97G 8.2G 85G 9% /
85G free instead of 0 much better.