Logical Volume Management is easily one of the most important and useful tools in storage administration. With LVM you can easily move “partitions” (volumes) around your physical disk, have snapshots, even mirroring or live migrations across disks become possible.

Disclaimer: I take absolutely no responsibility for what you do following this tutorial, thus it is made only as a reference and for learning purpose.

LVM at a glance

Before we fire up the terminal, let’s take a look at the LVM structure. LVM is an abstraction layer, a way to provide higher-level functions using lower-level ones. This enables you to have much more flexibility and in the end a higher level of control over your disks. Let’s now define three important concept: PV, VG and LV.

Physical Volume : A physical volume is a device or a partition that will be used to support LVM.

: A physical volume is a device or a partition that will be used to support LVM. Volume Group : A volume group is a group of one or more PV . VG can span across multiple PV .

: A volume group is a group of one or more . VG can span across multiple . Logical Volume: A logical volume is the final step of this chain, it acts as a partition to the file system. It belongs to a VG, and is physically stored on one of the PV of its VG.

We didn’t cover PE and LE, since they’re not fundamental to understand the basics of LVM. Feel free to learn about them after you’ve done some practice with it.

LVM-ization

Creating your very first LVM volume is really easy. The first step is to create a PV: a partition or an entire device. Remember: that space (and its data) will be lost upon creating a PV, so be warned to back up whatever you’re using. Done? In case of a whole disk:

# pvcreate /dev/sdX

In case of a partition use:

# pvcreate /dev/sdXY

Of course replace X with the letter of the device you want to use and Y with the number of the partition. Once done it is time to create a VG do so by:

# vgcreate NAME /dev/sdXY

Replace NAME with the desired name of the volume group and use the device/partition you used in the precedent step. Once done, you’re practically done, you can now start creating and manipulating your LVs. To create one you just need to issue:

# lvcreate -L SIZE -n NAME VOLUME_GROUP

Replace SIZE with the desired size with a suffix e.g. 10G or 250M. Replace NAME with the desired volume name. Replace VOLUME_GROUP with the volume group you created before. That’s it, you’ve just create a LV that acts exactly like a partition, but is way more flexible. First, to access it you should seek /dev/VG_NAME/LV_NAME . Now let’s take a look at the most used commands associated with LVM.

# Physical Volumes pvcreate /dev/sdXY # Create a PV pvremove /dev/sdXY # Remove a PV pvdisplay # Display detailed information about PVs pvs # Display brief information about PVs # Volume Groups vgcreate NAME /dev/sdXY # Create a VG named NAME on PV /dev/sdXY vgremove NAME # Destroy the VG named NAME vgextend NAME /dev/sdXY # Extend the VG named NAME over PV /dev/sdXY vgreduce NAME /dev/sdXY # Remove PV /dev/sdXY from VG named NAME vgdisplay # Display detailed information about VGs vgs # Display brief information about VGs # Logical Volumes lvcreate -L SIZE -n NAME VG # Create a LV named NAME with SIZE onto VG lvremove /dev/VG/LV # Remove LV from VG lvextend -L SIZE /dev/VG/LV # Add SIZE space to LV lvreduce -L SIZE /dev/VG/LV # Reduce LV by SIZE lvdisplay # Display detailed information about LVs lvs # Display brief information about LVs

Image courtesy of Docklandsboy.