This tutorial details enabling LVM2 on Ubuntu for Raspberry Pi. Ubuntu kernels for Raspberry Pi include LVM2 drivers natively, so no kernel recompilation or creation of initrd initramfs needed.

Create standard RPI Ubuntu Image#

Archive Existing Rootfs from /dev/sdb2#

Use e.g. your laptop or computer

  1. Mount (use your device name):
sudo mkdir /mnt/sdb2
sudo mount /dev/sdb2 /mnt/sdb2
  1. Archive root file system:
sudo tar -czvf rpi.tar.gz -C /mnt/sdb2 .
  1. Unmount:
sudo umount /mnt/sdb2

Repartition Disk#

sudo umount /dev/sdb*; sudo cfdisk /dev/sdb
  1. Change /dev/sdb2 (or your disk) from ext4 to Linux LVM (8e).

Initialize LVM2#

sudo pvcreate /dev/sdb2
sudo vgcreate rpi.vg /dev/sdb2
sudo lvcreate -L 50G -n root rpi.vg
sudo mkfs.ext4 /dev/rpi.vg/root

Set Filesystem Labels#

Labels identify filesystems for fstab and Raspberry Pi boot (config.txt and fstab uses root=LABEL=writable). Without them, boot will fail.

Root LV label (ext4):

sudo e2label /dev/rpi.vg/root "writable"
  • Verifies: sudo blkid /dev/rpi.vg/root → LABEL=“writable” TYPE=“ext4”.

Restore and Mount#

sudo mkdir -p /mnt/newroot
sudo mount /dev/rpi.vg/root /mnt/newroot
sudo tar -xzvf rpi.tar.gz -C /mnt/newroot
umount /mnt/newroot

Verify Setup#

Connect drive or flash to RPI and you should see working LVM2 set-up.

rpi:~$ lsblk
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0                          7:0    0  42.9M  1 loop /snap/snapd/24787
sda                            8:0    0 238.5G  0 disk
├─sda1                         8:1    0   512M  0 part /boot/firmware
└─sda2                         8:2    0   238G  0 part
  ├─rpi.vg-root-real         254:1    0    50G  0 lvm
  │ ├─rpi.vg-root            254:0    0    50G  0 lvm  /