terug

iSCSI Target software

Deze pagina beschrijft de installatie van iSCSI target software. Ik ben nu bekend met twee varianten: IET en LIO. Lange tijd leek IET de standaard te worden, maar nu lijkt LIO de standaard te worden.

Ik beschrijf het ophalen van de software, het installeren en simpel configureren ervan.

iSCSI server software - IET - iSCSI Enterprise Target

De laatste stable versie daarvan is van 15-7-2010, er wordt nog actief op ontwikkeld, maar de populariteit lijkt af te nemen. Download, compileer, configureer en start de ontwikkelversie met de volgende statements:

cd /usr/local/src
svn co https://iscsitarget.svn.sourceforge.net/svnroot/iscsitarget/trunk iscsitarget
cd iscsitarget
make usr
make kernel

(als root)
make install
cp etc/ietd.conf /etc/ietd.conf
vi /etc/ietd.conf
cp etc/initd/initd /etc/rc.d/iscsi-target
chmod 755 /etc/rc.d/iscsi-target

[ modprobe iscsi-target ]

# Start IET
/etc/rc.d/iscsi-target start

Het nadeel van IET is dat de kernel module geen onderdeel is van de standaard Linux kernel en dat bij elke kernel upgrade de IET software opnieuw moet worden gecompileerd tegen de nieuwe kernel. Het is een extra stap (en extra reboot als je niet oplet) bij een kernel upgrade en het risico bestaat dat de IET software niet meer werkt tegen de nieuwe kernel. Kortom, extra moeite.

iSCSI server software - LIO - Linux-iSCSI.org

LIO is ontwikkeld door Rising Tide Systems (RTS) als opvolger van STGT. Begin 2011 is de software opgenomen in de kernel (versie 2.6.38). Het aansturen ervan kan onder andere door de tool "targetcli". Er is een publieke open source versie van targetcli (aGPL), en net als bijvoorbeeld mySQL levert RTS een enterprise versie tegen betaling.
Voor dit project is de publieke versie voldoende.

iSCSI server - LIO

In de kernel van de iSCSI initiator (de server kant) moeten deze opties aanstaan (FILEIO en Virtual zijn in de praktijk niet nodig, maar worden hier geselecteerd voor de demo verderop)
  Device Drivers
	[M]  Generic Target Core Mod (TCM) and ConfigFS Infrastructure
		[M]  TCM/IBLOCK Subsystem Plugin for Linux/BLOCK
		[M]  TCM/FILEIO Subsystem Plugin for Linux/VFS
		[M]  TCM/Virtual SAS target and Linux/SCSI LDD fabric loopback module
		[M]  Linux-iSCSI.org iSCSI Target Mode Stack
Dit creeert de kernel modules target_core_iblock.ko, target_core_file.ko, iscsi_target_mod.ko, tcm_loop.ko en target_core_mod.ko De modules wordt geladen zodra de functionaliteit wordt geladen en/of door dat expliciet aan te geven met modprobe.

De kernel kan worden aangestuurd met targetcli, een python script dat te downloaden is van de git-repository van RTS of van deze server (alle versies zijn van 10-6-2012). Targetcli gebruikt rtslib, lio-utils en configshell (ook van RTS).
targetcli bron targetcli.tar.gz
rtslib bron rtslib.tar.gz
configshell bron configshell.tar.gz
lio-utils bron lio-utils.tar.gz

De Python installatie op mijn computer, Slackware 13.37, is vrij karig en mist packages die in andere distributies standaard meegeleverd worden (of ik doe iets verkeerd). Deze missende modules zijn ipaddr, netifaces, simpleparse, setuptools en configobj. Deze packages zouden moeten voorkomen op /usr/lib/python2.7/site-packages (zoek op .egg of egg-info). Komen ze niet voor, download dan de packages en installeer ze.
ipaddr bron ipaddr-2.1.10.tar.gz
netiface bron netifaces-0.8.tar.gz
setuptools bron setuptools-0.6c11.tar.gz
configobj bron configobj-4.7.2.tar.gz
epydoc bron epydoc-3.0.1.tar.gz
simpleparse bron SimpleParse-2.1.1a2.tar.gz

Een python package installeren gebeurt door het bijbehorende setup.py script uit te voeren als root. Bijvoorbeeld:
  tar xzf voorbeeld-1.0.0.tar.gz
  cd voorbeeld-1.0.0
  su - 
  python setup.py install
Doe dit voor alle packages in deze volgorde:
    ipaddr,
    setuptools,
    netifaces,
    simpleparse,
    epydoc,
    configobj
en van RTS:
    rtslib,
    configshell

Installeer nu het lio-utils package. Hier zitten wat haken en ogen aan.

lio-utils/get-py-modules-path.py

Unpack the lio-utils package and correct the file get-py-modules-path.py. This particular script corrects a bug in Ubuntu and SLES, while creating a bug for us, Slackware users.
tar xzf lio-utils.tar.gz
cd lio-utils
vi get-py-modules-path.py
Use vi to replace this text:
# Fix up get_python_lib() path for Python v2.6 on Ubuntu 9.10 and SLES 11
if re.search('python2.6', str):
      print str.replace('/usr','/usr/local')
else:
      print str;
with this text:
print str;

/usr/sbin scripts

Install the lio and tcm scripts in /usr/sbin:
su -
cd lio-utils/tcm-py
python setup.py install
./install.sh

cd ../..

cd lio-utils/lio-py
python setup.py install 
./install.sh

tools

Compileer en installeer de lio-utils tools (iscsi-name)
cd lio-utils/tools
make
su -
make install

/etc/rc.d/rc.target

Het lio-utils/scripts/rc.target script is bedoeld om de nodige daemons te starten en stoppen. Copieer het bestand naar /etc/rc.d:
su -
cp lio-utils/scripts/rc.target /etc/rc.d/rc.target
chmod 750 /etc/rc.d/rc.target
chown root:root /etc/rc.d/rc.target
Zorg dat het script bij het booten wordt aangeroepen door het aan te roepen in /etc/rc.d/rc.local. Voeg dit toe aan dat bestand:
# Start LIO target
if [ -x /etc/rc.d/rc.target ] ; then
  /etc/rc.d/rc.target start
fi

/etc/target

Make sure the (empty for now) configuration files are available in the correct location:
su -
mkdir -p /etc/target
cp lio-utils/conf/lio_start.default /etc/target/lio_start.sh
cp lio-utils/conf/tcm_start.default /etc/target/tcm_start.sh

/var/target/fabric

Copy the 'fabricspecs' from the rtslib package to /var/target/fabric (if targetcli doesn't show "iscsi", you forgot this):
su -
mkdir -p /var/target/fabric
cp ./rtslib/specs/iscsi.spec /var/target/fabric
cp ./rtslib/specs/loopback.spec /var/target/fabric

Start daemon

Now that everything is in place, start the target daemon:
su - 
  
/etc/rc.d/rc.target start

Loading target_core_mod/ConfigFS core:   [OK]
Calling ConfigFS script /etc/target/tcm_start.sh for target_core_mod:   [OK]
Calling ConfigFS script /etc/target/lio_start.sh for iscsi_target_mod:   [OK]

targetcli

Now, install the targetcli package in the same way as the other packages:
tar xzf targetcli.tar.gz
su-
cd targetcli
python setup.py install

Start targetcli to see the current (empty) configuration. When first started, targetcli will create directories in /sys/kernel/config/target. If they are not already loaded, the appropriate kernel modules are loaded and initialized.
$ su -
$ targetcli
targetcli GIT_VERSION (rtslib GIT_VERSION)
Copyright (c) 2011 by RisingTide Systems LLC.
All rights reserved.
Loaded tcm_loop kernel module.
Created '/sys/kernel/config/target/loopback'.
Loaded iscsi_target_mod kernel module.
Created '/sys/kernel/config/target/iscsi'.
/> ls
o- / ............................................................. [...]
  o- backstores .................................................. [...]
  | o- fileio ....................................... [0 Storage Object]
  | o- iblock ....................................... [0 Storage Object]
  | o- pscsi ........................................ [0 Storage Object]
  | o- rd_dr ........................................ [0 Storage Object]
  | o- rd_mcp ....................................... [0 Storage Object]
  o- iscsi .................................................. [0 Target]
  o- loopback ............................................... [0 Target]
/>  
Targetcli is now correctly installed.

LIO example: present a local file as iSCSI disk

Met LIO kan lokale storage door de server worden aangeboden als iSCSI drives aan clients. De lokale storage kan bestaan uit
  1. een bestand op het lokale filesysteem (FILEIO)
  2. een lokaal volume (disk, diskpartitie of LVM LV)(BLOCKIO)
  3. een echte SCSI drive (pSCSI)
  4. een virtuele disk die alleen in server memory bestaat (rd_mcp / rd_dr)
In de praktijk zal voornamelijk (2) gebruikt worden. Deze methode biedt maximale flexibiliteit tegen bijna-maximale performance.

Als voorbeeld, en omdat m'n laptop geen losse volumes over heeft om mee te oefenen, ga ik een iSCSI target maken dat is gebaseerd op een bestand als backing store (1).
Achtereenvolgens:

  • Creeer een backingstore gebaseerd op een file
  • Creeer een iSCSI target
  • Creeer een target portal group (tpg) voor die target. Een tpg definieert een verzameling geexporteerde SCSI devices, de mapping naar de interne devices en het IP adres en poort waaronder ze toegankelijk zijn.In deze tpg gebruiken we geen authentication.
  • Ken de backingstore toe als LUN in dit SCSI target
  • Definieer de Access control list (ACL) voor deze target. We geven toegang aan initiator "iqn.2012-07.nl.san:1234567890"
  • Map de interne LUNs in deze TPG aan externe LUNs. In dit geval: biedt LUN 2 aan, welke intern bekend is als LUN 0.
todo:  remove authentication
  set parameter AuthMethod=None
  set attribute authentication=0

todo: 
  acls/ create iqn..   maps a LUN? Why? Because there only is 1 LUN within the TPG?
$ su -
$ targetcli
targetcli GIT_VERSION (rtslib GIT_VERSION)
Copyright (c) 2011 by RisingTide Systems LLC.
All rights reserved.
/> /backstores/fileio create disk1 /lio/disk1.img 10M
Generating a wwn serial.
Not using buffered mode.
Created fileio disk1.
/> /iscsi create
Created target iqn.2003-01.org.linux-iscsi.hermiod.i686:sn.b31d38f66410.
Selected TPG Tag 1.
Successfully created TPG 1.
/> cd
  -- ga met pijltjes naar tpgt1 --
/iscsi/iqn.20...tpgt1/> set parameter AuthMethod=None
Parameter AuthMethod is now 'None'.
/iscsi/iqn.20...tpgt1/> set attribute authentication=0
Parameter authentication is now '0'.
/iscsi/iqn.20...tpgt1/> portals/ create
Using default IP port 3260
Automatically selected IP address 10.0.0.142.
Successfully created network portal 10.0.0.142:3260.
/iscsi/iqn.20...8f66410/tpgt1> luns/ create /backstores/fileio0/disk1
Selected LUN 0.
Successfully created LUN 0.
/iscsi/iqn.20...8f66410/tpgt1> acls/ create iqn.2012-07.nl.san:1234567890
Successfully created Node ACL for iqn.2012-07.nl.san:1234567890
Created mapped LUN 0.
/iscsi/iqn.20...8f66410/tpgt1> acls/iqn.2012-07.nl.san:1234567890 create 2 0
Created Mapped LUN 2.
/> ls
o- / ................................................................................. [...]
  o- backstores ...................................................................... [...]
  | o- fileio ........................................................... [1 Storage Object]
  | | o- disk1 .................................................. [/lio/disk1.img activated]
  | o- iblock ........................................................... [0 Storage Object]
  | o- pscsi ............................................................ [0 Storage Object]
  | o- rd_dr ............................................................ [0 Storage Object]
  | o- rd_mcp ........................................................... [0 Storage Object]
  o- iscsi ...................................................................... [1 Target]
  | o- iqn.2003-01.org.linux-iscsi.hermiod.i686:sn.b31d38f66410 .................... [1 TPG]
  |   o- tpgt1 ................................................................... [enabled]
  |     o- acls .................................................................... [1 ACL]
  |     | o- iqn.2012-07.nl.san:1234567890 ................................. [2 Mapped LUNs]
  |     |   o- mapped_lun0 ..................................................... [lun0 (rw)]
  |     |   o- mapped_lun2 ..................................................... [lun0 (rw)]
  |     o- luns .................................................................... [1 LUN]
  |     | o- lun0 .......................................... [fileio/disk1 (/lio/disk1.img)]
  |     o- portals .............................................................. [1 Portal]
  |       o- 10.0.0.142:3260 .......................................................... [OK]
  o- loopback ................................................................... [0 Target]

Er is nu een iSCSI device van 10 MB, toegankelijk op 10.0.0.142:3260 met LUN = 2, dat gemapped is op het bestand /lio/disk1.img.
The same device is also available as LUN 0. Ignore.


Uitgebreidere informatie over het werken met targetcli:
 deluiz.com
 Part 1: http://www.youtube.com/watch?v=BkBGTBadOO8
 Part 2: http://www.youtube.com/watch?v=mKjBsgOlYmE
 Part 3: http://www.youtube.com/watch?v=f6cgZotqUj0

terug   (laatste wijziging: 02-08-2012 20:15)