DEV Community

Cover image for An intro to LVM
Tiffanie BOREUX
Tiffanie BOREUX

Posted on • Originally published at blog.boreux.dev

An intro to LVM

I'm not gonna try to convince you to use LVM. Here, I'm just gonna show you how to use this beautiful level of abstraction.

This is more a cheatsheet than a complete tutorial.

LVM Diagram

Table of Contents

  1. Physical Volume
    1. Description
    2. Create a PV
    3. Display infos of a PV
  2. Volume Group
    1. Description
    2. Create a VG
    3. Display infos of a VG
    4. Manipulations
  3. Logical Volume
    1. Description
    2. Create a LV
    3. Display infos of a LV
    4. Access a LV
    5. Snapshot
    6. Manipulations

Physical Volume (PV)

Description

Physical system (disks, partitions, RAID); used as raw hardware to build the architecture with a higher level of abstraction.
LVM writes a header to the hardware, indicating its manageability by LVM.

Create a PV

sudo lvmdiskscan 
# Displays all disks potentially manageable by lvm

sudo pvcreate /dev/sda /dev/sdb
# ⤷ Output pvcreate :
#     Physical volume "/dev/sda" successfully created
#     Physical volume "/dev/sdb" successfully created

Enter fullscreen mode Exit fullscreen mode

Display infos of PVs

sudo pvs
# For more details, use : 
sudo pvdisplay

# ⤷ Output pvs :
#    PV         VG    Fmt  Attr PSize   PFree  
#     /dev/sda        lvm2 ---  200.00g 200.00g
#     /dev/sdb        lvm2 ---  100.00g 100.00g
Enter fullscreen mode Exit fullscreen mode

Volume Group (VG)

Description

LVM combines Physical Volumes into a group. These groups abstract from the underlying characteristics of the physical devices and therefore function as a unified whole that combines the storage capabilities of the Physical Volumes.

Create a VG

sudo vgcreate <NAME_VG> /dev/sda /dev/sdb 
# PV previously tagged

# ⤷ Output vgcreate :
#     Volume group "NAME_VG" successfully created
Enter fullscreen mode Exit fullscreen mode

Display infos of VGs

sudo vgs
# For more details, use : 
sudo vgdisplay

# ⤷ Output vgs :
#      VG         #PV #LV #SN   Attr    VSize     VFree  
#      NAME_VG     2   0   0    wz--n- 299.99g   299.99g
Enter fullscreen mode Exit fullscreen mode

Note: now that our Physical Volumes are associated with a Volume Group, when pvs is run, the VG column now points to the Volume Group name.

Manipulations

Remove a VG

sudo umount /dev/<NAME_VG>/<ALL_LVS>
sudo vgremove <NAME_VG>
Enter fullscreen mode Exit fullscreen mode

Logical Volume (LV)

Description

A Volume Group can now be divided into a number of Logical Volumes. These Logical Volumes are functionally equivalent to a partition on a physical disk, while retaining much more flexibility. These Logical Volumes are the primary components that users and applications use.

Create a LV

sudo lvcreate -L <10G> -n <NAME_LV1> <NAME_VG>
# To create a LV <NAME_LV2> that uses all the remaining space available on <NAME_VG> :
sudo lvcreate -l 100%FREE -n <NAME_LV2> <NAME_VG>

# ⤷ Output lvcreate :
#     Logical volume "NAME_LV1" created.
#     Logical volume "NAME_LV2" created.

Enter fullscreen mode Exit fullscreen mode

Display infos of LVs

sudo lvs
# For more details, use : 
sudo lvdisplay

# ⤷ Output lvs :
#       LV             VG         Attr          Lsize
#    NAME_LV1         NAME_VG    -wi-ao----     10,00g
#    NAME_LV1         NAME_VG    -wi-ao----    100,00g
Enter fullscreen mode Exit fullscreen mode

How to access LVs

Logical Volumes are accessible via /dev/NAME_VG/NAME_LV1 or /dev/mapper/NAME_VG-NAME_LV1; for formatting or mounting, for example.

Create a snapshot

sudo lvcreate –s –L <10G> -n <NAME_SNAP> <NAME_VG>/<NAME_LV1>
Enter fullscreen mode Exit fullscreen mode

Manipulations

Enlarge a LV

sudo lvresize -L <+5G> --resizefs <NAME_VG>/<NAME_LV1>
# Adds 5G to LV and also extends its filesystem
Enter fullscreen mode Exit fullscreen mode

Shrink a LV

df -h # Evaluate the size we can recover
sudo umount /dev/<NAME_VG>/<NAME_LV1> # Unmount the LV
sudo fsck -t ext4 -f /dev/<NAME_VG>/<NAME_LV1> # Check the file system
sudo resize2fs -p /dev/<NAME_VG>/<NAME_LV1> <5G> # Shrink the size of the filesystem
sudo lvresize -L <5G> /dev/<NAME_VG>/<NAME_LV1> # Shrink LV size
sudo fsck -t ext4 -f /dev/<NAME_VG>/<NAME_LV1> # Control the filesystem
sudo mount /dev/<NAME_VG>/<NAME_LV1> /mnt/... # Mount the LV
Enter fullscreen mode Exit fullscreen mode

Remove a LV

sudo umount /dev/<NAME_VG>/<NAME_LV1>
sudo lvremove <NAME_VG>/<NAME_LV1>
Enter fullscreen mode Exit fullscreen mode

Top comments (0)