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.