Linux Logical Volume Manager (LVM) Deep Dive Tutorial

From Wiki
Jump to navigation Jump to search


LVM, short for Logical Volume Manager, is awesome - and it doesn't seem to get the attention it deserves. In this one-shot tutorial, I'll show you why you should care about LVM, how to get started, some of the commands you can use to manage it, and more. You'll even learn how to use it to take snapshots of your system!

Relevant Links
Original Video

Commands Used

Resizing a logical volume

First, get a tiny bit of space back for tmp files (this command clears apt caches and etc):

 sudo apt clean
Extend the logical volume
 lvextend --resizefs -l +100%FREE /dev/mapper/vg_ubuntu-lv_root

Adding a disk to LVM

After adding a physical or virtual disk to the server, run the following commands.

Convert the new disk to an LVM physical volume

Note: Make sure you change "sdb" to the identifier of your drive):

 pvcreate /dev/sdb
Add the new physical volume to the volume group
 vgextend vg_ubuntu /dev/sdb
Check the status
Extend the physical volume by 10GB (or however many "GB" you want)
 lvextend -L +10G /dev/mapper/vg_ubuntu-lv_root
Grow the logical volume with ALL of the available space, without specifying a particular size
 lvextend --resizefs -l +100%FREE /dev/mapper/vg_ubuntu-lv_root
Grow the filesystem to match the newly available space
 resize2fs /dev/mapper/vg_ubuntu-lv_root
Check current available space
 df -h

Creating a brand-new LVM setup

Add a new virtual or physical disk to the server.

Note: For all of the below commands, change "sdc" to match your disk's identifier

Convert the new disk to be an LVM physical volume
 pvcreate /dev/sdc
Create the volume group
 vgcreate vg_extra /dev/sdc
Check the volume group
Create a logical volume (named lv_logs in this example)
 lvcreate vg_extra -L 5G -n lv_logs
Format the logical volume
 mkfs.ext4 /dev/mapper/vg_extra-lv_logs
Create a directory to mount the new logical volume
 mkdir /mnt/extra/logs
Mount the logical volume
 mount /dev/mapper/vg_extra-lv_logs /mnt/extra/logs
Find the "block id" of the new logical volume
 blkid /dev/mapper/vg_extra-lv_logs
Back up your fstab file to be safe
 cp /etc/fstab /etc/fstab.bak
Edit the fstab file
 nano /etc/fstab
Add a line to the fstab to mount the volume, similar to this
 UUID=<BLOCK ID FOR LOGICAL VOLUME> /mnt/extra/logs ext4 defaults 0 2
Test the new mount, first making sure it's not mounted
 umount /mnt/extra/logs
Then test your fstab file (BEFORE rebooting)
 mount -a

If no errors, then you're all set.


Create a new snapshot
 lvcreate /dev/mapper/<SOURCE VOLUMEGROUP NAME> -L 1G -s -n snapshot_name
View used space of snapshots
Mount a snapshot
 mount /dev/mapper/vg_extra-web_snapshot_20200421 /mnt/extra/snapshot
Restore a snapshot

Umount the original volume:

 umount /path/to/mounted/logical-volume

Restore the snapshot:

 lvconvert --merge /dev/mapper/snapshot_name

Deactivate/reactivate to fresh it:

 lvchange -an /dev/mapper/vg_extra-lv_web
 lvchange -ay /dev/mapper/vg_extra-lv_web