CentOS 7 Creating/Managing a Logical Volume (Part 1)

Domain name: example.com     Realm name: EXAMPLE.COM

Workgroup: EXAMPLE     Server IP address: xx.xx.xx.xx

Server name: linuxsvr01     Client name: linuxclnt01

Root password: ?Pa55w0rd!

To show how it works I am using the following hard drives, 1 x 500GB + 4 x 1TB. This of course can be done with any number from 2 upwards. The eventual usage of the logical volume(s) will be for iSCSI targets.

To create logical volumes (virtual disks) we will use Logical Volume Manager (LVM2) which has three basic stages:
physical volume
pv = a block device such as a partition or whole disk
volume group
vg = a pool of physical volumes from which logical volumes can be created
physical volume
lv = a division (partition) of a volume group

We need to know which physical hard drives are available to create a storage pool and subsequent logical volumes by issuing the following command

# lvmdiskscan
  /dev/centos/root	[      50.00 GiB]
  /dev/sda1		[     500.00 MiB]
  /dev/centos/swap	[       7.88 GiB]
  /dev/sda2		[     465.27 GiB] LVM physical volume
  /dev/centos/home	[       1.31 TiB]
  /dev/sdb		[     931.51 GiB] LVM physical volume
  /dev/sdc		[     931.51 GiB]
  /dev/sdd		[     931.51 GiB]
  /dev/sde		[     931.51 GiB]
  6 disks
  1 partition
  1 LVM physical volume whole disks
  1 LVM physical volume

The printout tells me that there are 6 disks, however there are only 5 whole hard drives, this is because /dev/sda is split into 2 partitions (/dev/sda1 and dev/sda2), the other 4 hard drives are /dev/sdb, /dev/sdc, /dev/sdd and /dev/sde.

/dev/sda2 is a logical volume created during installation which has 3 partitions /root (50GB), /swap (7.88GB) and /home (407.39GB), /home has been extended by adding /dev/sdb (931.51GB) as you can see above

There are 3 disks available /dev/sdc, /dev/sdd and /dev/sde.

We can now begin the process of creating a logical volume, firstly we must initialize the disks by creating physical volumes (pv) with the following command

# pvcreate /dev/sdc /dev/sdd /dev/sde

just 1 command to create (initialise) 3 physical volumes (no multiple mouse actions), now we can use the following to list the new LVM2 volumes

# pvscan
  PV /dev/sda2   VG centos              lvm2 [465.27 GiB / 0    free]
  PV /dev/sdb    VG centos              lvm2 [931.51 GiB / 0    free]
  PV /dev/sdc                           lvm2 [931.51 GiB]
  PV /dev/sdd                           lvm2 [931.51 GiB]
  PV /dev/sde                           lvm2 [931.51 GiB]
  Total: 5 [4.09 TiB] / in use: 2 [1.36 TiB] / in no VG: 3 [2.73 TiB]

As we can see there are 3 physical disks that are in no Volume Group, so let's add them to a volume group called volume01 (or any naming convention you wish)

# vgcreate volume01 /dev/sdb /dev/sdc /dev/sdd
--- Volume group ---
  VG Name               volume01
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               2.73 TiB
  PE Size               4.00 MiB
  Total PE              715401
  Alloc PE / Size       0 / 0
  Free  PE / Size       715401 / 2.73 TiB
  VG UUID               HvBtrf-5iMG-e1LZ-B6BK-gKqu-faki-UNTpHF

The volume group or storage pool has been created. Now we can create our logical volume (virtual disk), the following command will create a logical volume named (-n) iscsi01 using 100% of the FREE physical extents on volume01 (-l = use extents to size volume).

# lvcreate -l +100%FREE -n iscsi01 volume01
WARNING: xfs signature detected on /dev/volume01/iscsi01 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/volume01/iscsi01.
Logical volume "iscsi01" created.

The last command created a logical volume that spanned all available space on all 3 physical volumes in the volume group.

But perhaps we might want to create 2 logical volumes of 1.2TB and 800GB. To achieve this we will reuse the volume group volume01, we can remove the logical volume with the following command (as this a new creation there is no data on the the volume so it can be removed without problem).

# lvremove /dev/volume01/iscsi01

Now we can create the two logical volumes

# lvcreate -L 1200G -n iscsi01 volume01
# lvcreate -L 800G -n iscsi02 volume01

Use a capital -L when creating size in MB, GB etc...

Use a lowercase -l when creating extents (number or percentage).

If you use vgdisplay the printout will show that there is 794GB free, this could be used to create another logical volume or left available if either iscsi01 or iscsi02 needed to be extended. In fact let us extend iscsi01 by 200GB as follows

# lvextend -L 1400G /dev/volume01/iscsi01

Use lvs or lvscan or lvdisplay to check the new size of iscsi01.

There is a good Cheat Sheet here of the common commands and attributes of Logical Volume Manager.

And of course if you want know everything about LVM you can download a PDF that I found on Red Hat