Creating logical volumes in Linux with LVM

In this third LVM article, you'll learn how to create and use a logical volume which is the final piece of the LVM puzzle.

Logical Volumes (LV) are the final storage unit in the standard LVM architecture. These units are created from the volume group, which is made up of physical volumes (PV). If you have been following along in the series, you will have initialized your physical volumes and combined them into a volume group (VG). We will be continuing our LVM exploration by further splicing our newly created volume group LVMvgTEST into various logical volumes.

As with all things, variation is the spice of life, and that's no different when it comes to technology—specifically, logical volumes. You have a few different options at your disposal here, and they each have unique use cases that sysadmins can employ to best fit a given situation. Your options are as follows:

  • Linear logical volume
  • Striped logical volume
  • Mirrored logical volume

I will be discussing each of these volume types in further detail, walking you through examples of when and why you would want to use each one. I will also walk you through a basic configuration of each. Let's get to it!

Linear logical volume

Linear logical volumes are the LVM default when it comes to logical volume creation. They are generally used to combine one or more disks to create one usable storage unit. We created a 2G volume group called LVMvgTEST in our last article. That volume group was created by joining two unique 1G physical volumes. Here I am going to use a small portion of that volume group to create a linear logical volume titled, very creatively, lv_linear. Seen below:

[root@rhel ~]# lvcreate -L 500M -n lv_linear LVMvgTEST 
Logical volume "lv_linear" created.

You can use the lvdisplay for detailed information on the logical volumes currently in existence on your system.

[root@rhel ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/LVMvgTEST/lv_linear
  LV Name                lv_linear
  VG Name                LVMvgTEST
  LV UUID                hxBk3i-deYU-OjG1-KdR8-noDm-yeYh-EiF8Mc
  LV Write Access        read/write
  LV Creation host, time rhel.test, 2020-03-12 12:38:16 -0400
  LV Status              available
  # open                 0
  LV Size                500.00 MiB
  Current LE             125
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

You can also use the lvs command if verbosity isn't your thing:

[root@rhel ~]# lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_linear LVMvgTEST -wi-a----- 500.00m                                                    
  root      rhel      -wi-ao---- <26.00g                                                    
  swap      rhel      -wi-ao----   3.00g 

These are the most common logical volume types and are very straightforward to create.

Striped logical volume

Striped logical volumes allow the administrator to control the way that the data is written to the physical volumes. For high volume read/write scenarios, striped logical volumes would be ideal, as they allow for read and write operations to be done in parallel.

When using striped logical volumes, you can set the number of stripes (this number cannot exceed the number of physical volumes) and the stripe size. This allows the user a greater level of control over how I/O is performed on the system.

Here, we are going to create a striped logical volume of 500Mb. The -i2 denotes the number of stripes (because we only have two physical volumes, we are using two). The -I64 denotes the size of the stripes as the default 64Kb. We named the striped volume lv_stripe, and it is a part of the volume group LVMvgTEST.

 [root@rhel ~]# lvcreate -L 500M -i2 -I64 -n lv_stripe LVMvgTEST 
      Rounding size 500.00 MiB (125 extents) up to stripe boundary size 504.00 MiB(126 extents).
      Logical volume "lv_stripe" created.

Now, using the lvdisplay command, you can see both the linear volume and the newly created striped volume:

[root@rhel ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/LVMvgTEST/lv_linear
  LV Name                lv_linear
  VG Name                LVMvgTEST
  LV UUID                hxBk3i-deYU-OjG1-KdR8-noDm-yeYh-EiF8Mc
  LV Write Access        read/write
  LV Creation host, time rhel.test, 2020-03-12 12:38:16 -0400
  LV Status              available
  # open                 0
  LV Size                500.00 MiB
  Current LE             125
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
  --- Logical volume ---
  LV Path                /dev/LVMvgTEST/lv_stripe
  LV Name                lv_stripe
  VG Name                LVMvgTEST
  LV UUID                tqtkco-QZgj-TvOq-hzSk-G2Ti-jfsU-5bhMlz
  LV Write Access        read/write
  LV Creation host, time rhel.test, 2020-03-13 12:42:38 -0400
  LV Status              available
  # open                 0
  LV Size                504.00 MiB
  Current LE             126
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

These kinds of logical volumes are really helpful in the right circumstances! If you need high volume read/write, consider striping your volumes.

Mirrored logical volume

Mirrored logical volumes do exactly what you would expect them to do. They allow you to "reflect" the data on one device to an identical copy. This ensures your data is available. If one part of the mirror breaks, the remaining drive changes its characteristics to that of a linear volume and is still accessible. LVM keeps a log on what data is where, which allows the changes to be persistent. Let's look at how to create a mirror with LVM.

[root@rhel ~]# lvcreate -L 100M -m1 -n lv_mirror LVMvgTEST 
  Logical volume "lv_mirror" created.

You can see that we created a mirror drive of 100Mb, named the mirror lv_mirror, and created it on the LVMvgTEST volume group. All of this was done using the same lvcreate command from the previous examples. We can verify creation by using the lvdisplay command.

 [root@rhel ~]# lvdisplay
   --- Logical volume ---
  LV Path                /dev/LVMvgTEST/lv_mirror
  LV Name                lv_mirror
  VG Name                LVMvgTEST
  LV UUID                0eTHem-rw8b-PK0J-wibU-f94M-bypL-1IM7AG
  LV Write Access        read/write
  LV Creation host, time rhel.test, 2020-03-13 13:01:41 -0400
  LV Status              available
  # open                 0
  LV Size                100.00 MiB
  Current LE             25
  Mirrored volumes       2
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:8

Wrap up

So we looked at logical volumes as a whole, the three kinds of logical volumes that LVM allows you to create, and how to configure these volumes. LVM allows you to create a storage unit to fit almost any need you may have as an administrator, and that's what makes it such a great utility. I recommend that you give LVM a try the next time you need to accomplish any disk manipulation. In my opinion, there is no better tool for the job!

  • 0 Users Found This Useful
Was this answer helpful?

Related Articles

How to back up and restore file permissions on Linux

Question: I want to back up the file permissions of the local filesystem, so that if I...

Logical Volume Manager (LVM) versus standard partitioning in Linux

Use this guide to integrate the flexibility, scalability, and increased features of LVM into your...