You expanded your VM disk from 120G to 140G, but lsblk still shows the old size:

NAME                        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                           8:0    0   140G  0 disk
├─sda1                        8:1    0     1G  0 part  /boot/efi
├─sda2                        8:2    0     2G  0 part  /boot
└─sda3                        8:3    0 116.9G  0 part
  └─dm_crypt-0              253:0    0 116.9G  0 crypt
    └─ubuntu--vg-ubuntu--lv 253:1    0 116.9G  0 lvm   /

The disk is bigger but nothing downstream knows about it. Here's how to propagate the growth through every layer.

Prerequisites

You need growpart — it's in the cloud-guest-utils package on Ubuntu:

sudo apt install cloud-guest-utils

Step 1: Expand the partition

growpart /dev/sda 3

Output:

CHANGED: partition=3 start=6397952 old: size=245260255 end=251658207 new: size=287203295 end=293601247

The partition now fills the disk. lsblk will show sda3 at 136.9G.

Step 2: Resize the LUKS container

cryptsetup resize dm_crypt-0

This will prompt for your LUKS passphrase. The crypt device will expand to match the partition.

Step 3: Resize the LVM physical volume

pvresize /dev/mapper/dm_crypt-0

Output:

  Physical volume "/dev/mapper/dm_crypt-0" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

Step 4: Extend the logical volume

lvextend -rl +100%FREE /dev/ubuntu-vg/ubuntu-lv

Output:

  Size of logical volume ubuntu-vg/ubuntu-lv changed from <116.93 GiB (29934 extents) to <136.93 GiB (35054 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/ubuntu--vg--ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 15, new_desc_blocks = 18
The filesystem on /dev/mapper/ubuntu--vg--ubuntu--lv is now 35895296 (4k) blocks long.

The -r flag is the key shortcut here — it extends the LV and auto-resizes the filesystem in one command. Works for ext4, xfs, and btrfs. Without -r, you'd need to run resize2fs or xfs_growfs separately.

When to fill vs. when to leave space

+100%FREE is the right call when:

  • Single-purpose volume with no plans for LVM snapshots
  • Fixed disk size — you're not going to add more storage later
  • Fill it, forget it

Leave free space when you need:

  • LVM snapshots — useful for pre-upgrade rollback or backup. But watch out: if your snapshot reserve fills up, the snapshot is silently invalidated. Exactly when you needed it. Undersize a snapshot reserve and it's worse than having no reserve at all.
  • A second LV later — without having to add physical storage

Verify

lsblk /dev/sda
df -h /

Everything should now show the expanded size.

Previous Post