How to expand an iSCSI lun with targetcli on CentOS7?

7,005

The creation of an iSCS target LUN links the previously-defined storage objects with the target and defines which number the device will use.

Therefore, if you want the LUN (lun0) to be expanded, then the underlying storage object (disk01) needs to be expanded.

One method to do this is to create a logical volume from the two disks as follows (although this will require an outage):

Delete the unused storage object disk02 and create a logical volume from it:

/backstores/block> delete disk02
Deleted storage object disk02.
/backstores/block> ls
o- block ...................................................................................................... [Storage Objects: 1]
  o- disk01 .............................................................................. [/dev/sdb4 (392.2GiB) write-thru activated]
/backstores/block>

Create a logical volume (iscsi_lv01) using the entire device:

$ pvcreate /dev/sda
  Physical volume "/dev/sda" successfully created
$ vgcreate iscsi_disk01 /dev/sda
  Volume group "iscsi_disk01" successfully created
$ lvcreate iscsi_disk01 -l 100%FREE -n iscsi_lv01
  Logical volume "iscsi_lv01" created

Note:
Clearly if the existing device was formatted and contained data then this new volume will have to be formatted and the data copied onto it.

Create a new storage object using the new volume:

$ targetcli
/backstores/block> create iscsi_lv01 /dev/iscsi_disk01/iscsi_lv01
Created block storage object iscsi_lv01 using /dev/iscsi_disk01/iscsi_lv01.
/backstores/block> ls
o- block ...................................................................................................... [Storage Objects: 2]
  o- disk01 .............................................................................. [/dev/sdb4 (392.2GiB) write-thru activated]
  o- iscsi_lv01 .................................................... [/dev/iscsi_disk01/iscsi_lv01 (476.9GiB) write-thru deactivated]
/backstores/block>

Recreate lun0 using the new volume

/> cd iscsi/iqn.2014-08.com.exmaple:nuc/tpg1/luns/
/iscsi/iqn.20...nuc/tpg1/luns> delete lun0
Deleted LUN 0.
/iscsi/iqn.20...nuc/tpg1/luns> create /backstores/block/iscsi_lv01
Created LUN 0.
/iscsi/iqn.20...nuc/tpg1/luns> ls
o- luns .................................................................................................................. [LUNs: 1]
  o- lun0 ........................................................................ [block/iscsi_lv01 (/dev/iscsi_disk01/iscsi_lv01)]
/iscsi/iqn.20...nuc/tpg1/luns>

Delete the existing storage object disk01 to then be added to the volume group:

/> cd backstores/block/
/backstores/block> delete disk01
Deleted storage object disk01.
/backstores/block> cd /
/> ls
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- block .................................................................................................. [Storage Objects: 1]
  | | o- iscsi_lv01 .................................................. [/dev/iscsi_disk01/iscsi_lv01 (476.9GiB) write-thru activated]
  | o- fileio ................................................................................................. [Storage Objects: 0]
  | o- pscsi .................................................................................................. [Storage Objects: 0]
  | o- ramdisk ................................................................................................ [Storage Objects: 0]
  o- iscsi ............................................................................................................ [Targets: 1]
  | o- iqn.2014-08.com.exmaple:nuc ....................................................................................... [TPGs: 1]
  |   o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
  |     o- acls .......................................................................................................... [ACLs: 0]
  |     o- luns .......................................................................................................... [LUNs: 1]
  |     | o- lun0 ................................................................ [block/iscsi_lv01 (/dev/iscsi_disk01/iscsi_lv01)]
  |     o- portals .................................................................................................... [Portals: 1]
  |       o- 0.0.0.0:3260 ..................................................................................................... [OK]
  o- loopback ......................................................................................................... [Targets: 0]

Save the new configuration in case auto_save_on_exit is not set to true:

/> 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

Extend the existing logical volume with the original device disk01:

$ pvcreate /dev/sdb4
  Physical volume "/dev/sdb4" successfully created
$ vgextend iscsi_disk01 /dev/sdb4
  Volume group "iscsi_disk01" successfully extended
$ lvextend -l 100%VG /dev/iscsi_disk01/iscsi_lv01
  Extending logical volume iscsi_lv01 to 869.1GiB
  Logical volume iscsi_lv01 successfully resized
$

Note:
There will also be the additional step of resizing the filesystem once disk01 has been added if the volume required formatting.

Notice the new sized storage object:

/> ls
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- block .................................................................................................. [Storage Objects: 1]
  | | o- iscsi_lv01 .................................................. [/dev/iscsi_disk01/iscsi_lv01 (869.1GiB) write-thru activated]

Unfortunately this method requires down time while the lun is resized, however, following this method will ensure it is kept to a minimum.

References

Targetcli Wiki
iSCSI target guide using tgtadm

Share:
7,005

Related videos on Youtube

ams
Author by

ams

I love software development.

Updated on September 18, 2022

Comments

  • ams
    ams over 1 year

    I have a CentOS 7 machine with iSCSI configured. see ls output from targetcli below. I want to add disk02 to lun0 so that to the iSCSI client can see a total 869.16GB instead of 392.2GB

    Question: Is it possible to have lun0 use the combined capacity of disk0 and disk1 and if so how to do that with targetcli on CentOS7.

    /> ls
    o- / ....................................................................................................... [...]
      o- backstores ............................................................................................ [...]
      | o- block ................................................................................ [Storage Objects: 2]
      | | o- disk01 ...................................................... [/dev/sdb4 (392.2GiB) write-thru activated]
      | | o- disk02 ..................................................... [/dev/sda (476.9GiB) write-thru deactivated]
      | o- fileio ............................................................................... [Storage Objects: 0]
      | o- pscsi ................................................................................ [Storage Objects: 0]
      | o- ramdisk .............................................................................. [Storage Objects: 0]
      o- iscsi .......................................................................................... [Targets: 1]
      | o- iqn.2014-08.com.exmaple:nuc .................................................................... [TPGs: 1]
      |   o- tpg1 ................................................................................ [gen-acls, no-auth]
      |     o- acls ........................................................................................ [ACLs: 0]
      |     o- luns ........................................................................................ [LUNs: 1]
      |     | o- lun0 ..................................................................... [block/disk01 (/dev/sdb4)]
      |     o- portals .................................................................................. [Portals: 1]
      |       o- 0.0.0.0:3260 ................................................................................... [OK]
      o- loopback ....................................................................................... [Targets: 0]
    />