How to create and setup LUNs using LVM

To create and setup LUNs using LVM on RHEL/CentOS/Fedora

LUN is a Logical Unit Number that shared from the iSCSI Storage Server. The iSCSI target server physical drive shares its drive to initiate over TCP/IP network. It form a large storage as SAN (Storage Area Network) with a collection of drives. LUNs are defined in LVM as per space availability in real environment. Creating LUNs using LVM is explained in this article.

Importance of LUN

  • It is used for storage purpose.
  • It is used to install Operating systems and also in Clusters, Virtual servers, SAN etc.


To Create LUNs using LVM in iSCSI Target Server

Using ' fdisk -l' command, find out the list of drives in every partitions on the system.

[root@linuxhelp ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000b5211
    Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048     5122047     2048000   82  Linux swap / Solaris
/dev/sda3         5122048    41943039    18410496   83  Linux
Disk /dev/sdb: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 byt


Creation of LVM Drive for LUNs

Use /dev/sdb drive for creating a LVM.
Now Partition the drive using the following fdisk command,

[root@linuxhelp ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xb4237527.
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-83886079, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-83886079, default 83886079): +15G
Partition 1 of type Linux and of size 15 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition ' Linux'  to ' Linux LVM' 
Command (m for help): p
Disk /dev/sdb: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xb4237527
      Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    31459327    15728640   8e  Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.


Creation of Logical Volume for LUNs

Create Physical volume using ‘ pvcreate’ command.

[root@linuxhelp ~]# pvcreate /dev/sdb1
  Physical volume " /dev/sdb1"  successfully created

Next create a Volume group with name of iSCSI.

[root@linuxhelp ~]# vgcreate vg1 /dev/sdb1
  Volume group " vg1"  successfully created

Define 6 Logical Volumes for 6 LUNs in our iSCSI Target server.

[root@linuxhelp ~]# lvcreate -L 2G -n lv1 vg1
  Logical volume " lv1"  created
[root@linuxhelp ~]# lvcreate -L 2G -n lv2 vg1
  Logical volume " lv2"  created
[root@linuxhelp ~]# lvcreate -L 2G -n lv3 vg1
  Logical volume " lv3"  created
[root@linuxhelp ~]# lvcreate -L 2G -n lv4 vg1
  Logical volume " lv4"  created
[root@linuxhelp ~]# lvcreate -L 2G -n lv5 vg1
  Logical volume " lv5"  created
[root@linuxhelp ~]# lvcreate -L 2G -n lv6 vg1
  Logical volume " lv6"  created

Confirm it by listing the Physical volume, Volume group and logical volumes.

[root@linuxhelp ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sdb1  vg1  lvm2 a--  15.00g 3.00g
[root@linuxhelp ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg1    1   6   0 wz--n- 15.00g 3.00g
[root@linuxhelp ~]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  lv1  vg1  -wi-a----- 2.00g                                             
  lv2  vg1  -wi-a----- 2.00g                                             
  lv3  vg1  -wi-a----- 2.00g                                             
  lv4  vg1  -wi-a----- 2.00g                                             
  lv5  vg1  -wi-a----- 2.00g                                             
  lv6  vg1  -wi-a----- 2.00g


To Define LUNs in Target Server

Run the following command to create the LUNs in the target server.

[root@linuxhelp ~]# targetcli
targetcli shell version 2.1.fb41
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type ' help' .
/>  /backstores/block create iscsi_block1 /dev/vg1/lv1
Created block storage object iscsi_block1 using /dev/vg1/lv1.
/>  /backstores/block create iscsi_block2 /dev/vg1/lv2
Created block storage object iscsi_block2 using /dev/vg1/lv2.
/>  /backstores/block create iscsi_block3 /dev/vg1/lv3
Created block storage object iscsi_block3 using /dev/vg1/lv3.
/>  /backstores/block create iscsi_block4 /dev/vg1/lv4
Created block storage object iscsi_block4 using /dev/vg1/lv4.
/>  /backstores/block create iscsi_block5 /dev/vg1/lv5
Created block storage object iscsi_block5 using /dev/vg1/lv5.
/>  /backstores/block create iscsi_block6 /dev/vg1/lv6
Created block storage object iscsi_block6 using /dev/vg1/lv6.
/>  /iscsi create iqn.2015-06.com.linuxhelp.server
Created target iqn.2015-06.com.linuxhelp.server.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/>  /iscsi/iqn.2015-06.com.linuxhelp.server/tpg1/acls create iqn.2015-06.com.linuxhelp.client
Created Node ACL for iqn.2015-06.com.linuxhelp.client
/>  /iscsi/iqn.2015-06.com.linuxhelp.server/tpg1/luns create /backstores/block/iscsi_block1
Created LUN 0.
Created LUN 0-> 0 mapping in node ACL iqn.2015-06.com.linuxhelp.client
/>  /iscsi/iqn.2015-06.com.linuxhelp.server/tpg1/luns create /backstores/block/iscsi_block2
Created LUN 1.
Created LUN 1-> 1 mapping in node ACL iqn.2015-06.com.linuxhelp.client
/>  /iscsi/iqn.2015-06.com.linuxhelp.server/tpg1/luns create /backstores/block/iscsi_block3
Created LUN 2.
Created LUN 2-> 2 mapping in node ACL iqn.2015-06.com.linuxhelp.client
/>  /iscsi/iqn.2015-06.com.linuxhelp.server/tpg1/luns create /backstores/block/iscsi_block4
Created LUN 3.
Created LUN 3-> 3 mapping in node ACL iqn.2015-06.com.linuxhelp.client
/>  /iscsi/iqn.2015-06.com.linuxhelp.server/tpg1/luns create /backstores/block/iscsi_block5
Created LUN 4.
Created LUN 4-> 4 mapping in node ACL iqn.2015-06.com.linuxhelp.client
/>  /iscsi/iqn.2015-06.com.linuxhelp.server/tpg1/luns create /backstores/block/iscsi_block6
Created LUN 5.
Created LUN 5-> 5 mapping in node ACL iqn.2015-06.com.linuxhelp.client
/>  ls
o- / ................................................................................... [...]
  o- backstores ........................................................................ [...]
  | o- block ............................................................ [Storage Objects: 6]
  | | o- iscsi_block1 ........................... [/dev/vg1/lv1 (2.0GiB) write-thru activated]
  | | o- iscsi_block2 ........................... [/dev/vg1/lv2 (2.0GiB) write-thru activated]
  | | o- iscsi_block3 ........................... [/dev/vg1/lv3 (2.0GiB) write-thru activated]
  | | o- iscsi_block4 ........................... [/dev/vg1/lv4 (2.0GiB) write-thru activated]
  | | o- iscsi_block5 ........................... [/dev/vg1/lv5 (2.0GiB) write-thru activated]
  | | o- iscsi_block6 ........................... [/dev/vg1/lv6 (2.0GiB) write-thru activated]
  | o- fileio ........................................................... [Storage Objects: 0]
  | o- pscsi ............................................................ [Storage Objects: 0]
  | o- ramdisk .......................................................... [Storage Objects: 0]
  o- iscsi ...................................................................... [Targets: 1]
  | o- iqn.2015-06.com.linuxhelp.server ............................................ [TPGs: 1]
  |   o- tpg1 ......................................................... [no-gen-acls, no-auth]
  |     o- acls .................................................................... [ACLs: 1]
  |     | o- iqn.2015-06.com.linuxhelp.client ............................... [Mapped LUNs: 6]
  |     |   o- mapped_lun0 .................................... [lun0 block/iscsi_block1 (rw)]
  |     |   o- mapped_lun1 .................................... [lun1 block/iscsi_block2 (rw)]
  |     |   o- mapped_lun2 .................................... [lun2 block/iscsi_block3 (rw)]
  |     |   o- mapped_lun3 .................................... [lun3 block/iscsi_block4 (rw)]
  |     |   o- mapped_lun4 .................................... [lun4 block/iscsi_block5 (rw)]
  |     |   o- mapped_lun5 .................................... [lun5 block/iscsi_block6 (rw)]
  |     o- luns .................................................................... [LUNs: 6]
  |     | o- lun0 ........................................ [block/iscsi_block1 (/dev/vg1/lv1)]
  |     | o- lun1 ........................................ [block/iscsi_block2 (/dev/vg1/lv2)]
  |     | o- lun2 ........................................ [block/iscsi_block3 (/dev/vg1/lv3)]
  |     | o- lun3 ........................................ [block/iscsi_block4 (/dev/vg1/lv4)]
  |     | o- lun4 ........................................ [block/iscsi_block5 (/dev/vg1/lv5)]
  |     | o- lun5 ........................................ [block/iscsi_block6 (/dev/vg1/lv6)]
  |     o- portals .............................................................. [Portals: 1]
  |       o- 0.0.0.0:3260 ............................................................... [OK]
  o- loopback ................................................................... [Targets: 0]
/>  saveconfig
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json
/>  exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json

Now restart the target services to see the changes.

[root@linuxhelp ~]# systemctl restart target
[root@linuxhelp ~]# targetcli
targetcli shell version 2.1.fb41
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type ' help' .

/>  ls
o- / ................................................................................... [...]
  o- backstores ........................................................................ [...]
  | o- block ............................................................ [Storage Objects: 6]
  | | o- iscsi_block1 ........................... [/dev/vg1/lv1 (2.0GiB) write-thru activated]
  | | o- iscsi_block2 ........................... [/dev/vg1/lv2 (2.0GiB) write-thru activated]
  | | o- iscsi_block3 ........................... [/dev/vg1/lv3 (2.0GiB) write-thru activated]
  | | o- iscsi_block4 ........................... [/dev/vg1/lv4 (2.0GiB) write-thru activated]
  | | o- iscsi_block5 ........................... [/dev/vg1/lv5 (2.0GiB) write-thru activated]
  | | o- iscsi_block6 ........................... [/dev/vg1/lv6 (2.0GiB) write-thru activated]
  | o- fileio ........................................................... [Storage Objects: 0]
  | o- pscsi ............................................................ [Storage Objects: 0]
  | o- ramdisk .......................................................... [Storage Objects: 0]
  o- iscsi ...................................................................... [Targets: 1]
  | o- iqn.2015-06.com.linuxhelp.server ............................................ [TPGs: 1]
  |   o- tpg1 ......................................................... [no-gen-acls, no-auth]
  |     o- acls .................................................................... [ACLs: 1]
  |     | o- iqn.2015-06.com.linuxhelp.client ............................... [Mapped LUNs: 6]
  |     |   o- mapped_lun0 .................................... [lun0 block/iscsi_block1 (rw)]
  |     |   o- mapped_lun1 .................................... [lun1 block/iscsi_block2 (rw)]
  |     |   o- mapped_lun2 .................................... [lun2 block/iscsi_block3 (rw)]
  |     |   o- mapped_lun3 .................................... [lun3 block/iscsi_block4 (rw)]
  |     |   o- mapped_lun4 .................................... [lun4 block/iscsi_block5 (rw)]
  |     |   o- mapped_lun5 .................................... [lun5 block/iscsi_block6 (rw)]
  |     o- luns .................................................................... [LUNs: 6]
  |     | o- lun0 ........................................ [block/iscsi_block1 (/dev/vg1/lv1)]
  |     | o- lun1 ........................................ [block/iscsi_block2 (/dev/vg1/lv2)]
  |     | o- lun2 ........................................ [block/iscsi_block3 (/dev/vg1/lv3)]
  |     | o- lun3 ........................................ [block/iscsi_block4 (/dev/vg1/lv4)]
  |     | o- lun4 ........................................ [block/iscsi_block5 (/dev/vg1/lv5)]
  |     | o- lun5 ........................................ [block/iscsi_block6 (/dev/vg1/lv6)]
  |     o- portals .............................................................. [Portals: 1]
  |       o- 0.0.0.0:3260 ............................................................... [OK]
  o- loopback ................................................................... [Targets: 0]
/>  exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json

FAQ
Q
How to mirror LVM partition?
A
By using this "lvconvert" command you can mirror the LVM partition.
Q
What is LUNS? I need to know exact functionality of that?
A
LUN is a Logical Unit Number that shared from the iSCSI Storage Server.
Q
Service is not getting started it shows certain errors?
A
please post your errors or else if you wanna troubleshoot please go through /var/log/messages
Q
Will this work on Centos 7 ?
A
Yes it will work on RHEL/Centos/Oracle linux
Q
Crisp explanation
A
Thank you !!