Úgy adódott, hogy saját környezet tervezek, és mivel shared storagera van szükség (és nem fájlszinten) ill. nincs komolyabb összeg SAN-ra és fiberoptic-ra, kézenfekvő volt, hogy iSCSI-t fogok használni. Sokáig gondolkoztam a platformon is, adta volna magát a BSD alapú FreeNAS, de performanciában nem olvastam róla meggyőzőt. Lehetett volna Solaris is az OS és persze még több más is, de az Ubuntu mellett döntöttem végül.

A lehetőségek:

Nos, itt lehetett válogatni. A leginkább ismert implementációk nagyrésze belekerült az Ubuntu repositorykba:

root@ubuntu-iscsi:~# apt-cache search iscsi
open-iscsi - High performance, transport independent iSCSI implementation
open-iscsi-utils - transitional dummy package
tgt - Linux SCSI target user-space tools
iscsitarget - iSCSI Enterprise Target userland tools
iscsitarget-dkms - iSCSI Enterprise Target kernel module source - dkms version
istgt - iSCSI userspace target daemon for Unix-like operating systems
lio-utils - configuration tool for LIO core target

Néhányat ezek közül hamar kilőttem; nem tetszett a konfigja, nem tudta pont azt és pont úgy, ahogy szerettem volna, nem volt elég bőséges a diagnosztikája. Közben persze szorgosan nézegettem a fórumokat, kinek mi jött be leginkább, tesztek, benchmarkok, stb. Mindenképp olyat kerestem, ami kernelben ill. ahhoz “nagyon közel” fut (performancia). Így esett a választásom az SCST-re; amely azonban – nehogy szerencsém legyen – nincs benne a repoban. A saját oldalán azonban egy nagyon jó összehasonlító táblázatot találtam, amit végignézva az újabb fejlesztésű LIO-ra és az SCST-re szűkítettem a kört : http://scst.sourceforge.net/comparison.html

A LIO-t ki is próbáltam, szimpatikus, hogy saját shell-je van. Az is tetszett, hogy nem “csak” iSCSI-t támogat, hanem sok mást is, valós fibre-channel-t, stb. A konfigja mégis kicsit faramucinak tűnt, és – bár lehet, hogy nem adtam elég időt rá – de nem találtam olyan bőbeszédű diagnosztikát benne. Így maradt az SCST.

SCST – Generic SCSI Target Subsystem for Linux

Mit is tud? Lássuk a főbb feature-jeit:

    – lekezel “bármit” ami SCSI (iSCSI, Fibre Channel, FCoE, SAS, InfiniBand (SRP), Wide (parallel) SCSI, stb.)
    – kernelben fut, tehát a performancia várhatóan jobb és kisebb overheaddel
    – támogatja több SCSI eszköz típus kiajánlását (disk, cdrom, tape, stb.)
    – FILEIO, BLOCKIO módok (fájlok, blockeszközök kiajánlása)
    – NULLIO mód (performancia mérése, tesztek valós adatátvitel nélkül)
    – VMWARE és Microsoft storage certification-nek megfelelt (ez tetszett, nekem is VMWARE környezetbe fog kelleni)

Ezeket meggyőzőnek találtam, így következett a teszt install.

Telepítés:

Mint említettem, repoban nem találtam, az oldalon levő leírást követve először is check-outoltam az svn trunk-ből:

# svn checkout svn://svn.code.sf.net/p/scst/svn/trunk scst-trunk

A parancs kiadása után szépen letölti nekünk a trunk-ágat.

Ezután nincs más dolgunk, mint lefordítani, ami nagyon egyszerű volt:

# make scst scst_install iscsi iscsi_install scstadm scstadm_install

Kevés idő, 2-3 perc, majd hasonlóképp ér véget a fordítás:

2

És kész is vagyunk. Ha nem történt volna meg az installkor, akkor az újraindulás utáni automatikus indulást beállíthatjuk, Ubuntu-n ez:

# update-rc.d scst defaults

A konfiguráció:

A SCST kettő konfigurációs fájlt használ:

– /etc/iscsi/initiatorname.iscsi (ez statikus, egyszer kell beállítani, egy egyedi initiatorname mindössze)

3

– /etc/scst.conf (ez a fő konfigurációs fájl; ezt megírhatjuk, de le is generálhatjuk)

A konfighoz én az userspaceben levő ‘scstadmin’ parancsot használtam, mellyel pár egyszerű lépés után kész is lett a iSCSI target. Lássuk ezeket!

1., Hozzuk létre targetet

# scstadmin -add_target iqn.2015-04.test.storage:tgt1 -driver iscsi

2., Hozzuk létre az iscsi virtualis eszközünket, hozzárendelve egy – jelen esetben – meglevő RAID metaeszközt

# scstadmin -open_dev my_own_vdisk01 -handler vdisk_fileio -attributes filename=/dev/md127,nv_cache=1

3., Hozzuk létre a LUN-t a targethez (felhasználva az előbb elkészített virtualis eszközt)

# scstadmin -add_lun 0 -driver iscsi -target iqn.2015-04.test.storage:tgt1 -device my_own_vdisk01

4., Engedélyezzük a targetet

# scstadmin -enable_target iqn.2015-04.test.storage:tgt1 -driver iscsi

5., Engedélyezzük az iscsi drivert

# scstadmin -set_drv_attr iscsi -attributes enabled=1

(itt rákérdez, hogy biztosan akarjuk-e, szóval “y” )

5., Végül írassuk ki a konfigot

# scstadmin -write_config /etc/scst.conf

Hogy néz ki ezután a konfigunk?

4

Látható, hogy nagyon egyszerű és áttekinthető a konfig is. Természetesen, ez jóval tovább finomítható, létrehozhatók ACL-ek, hogy kit és honnan engedjen hozzáférni a targetünkhöz; ám ez már egy működő iSCSI target, amely – akár Windows alól is – felcsatolható az initiator oldalon. Próbáljuk ki ezt is!

Windows 8.1-en ez a következőképpen néz ki:

5

Ezt elindítva a következő menüt látjuk:

6

Ha beírjuk a targetünk IP címét, valami ilyesmit fogunk látni:

7

Menjünk a Kötetek és eszközök fülre, majd nyomjuk meg az ‘Automatikus beállítás”-t:

9

Látjuk, hogy meg is jelent az eszközünk, egyelőre még elég furcsa névvel, de ez természetes, hiszen a rendszer még natív eszköznévvel látja, meghajtóként nem. A Lemezkezelőben pedig megjelent a kiajánlott LUN:

10

Ez most már tetszés szerint partícionálható, formázható – tehát: használatba vehető.

Mit láthatunk eközben a targeten, ha megnézzük a csatlakozást?

11

Illetve a diagnosztika a sessionről:

12

A paraméterek természetesen változtathatók.

Összegzés:

Az SCST nem mostani kezdeményezés, de a mai napig fejlesztik. Az, hogy kernelben fut, jobb performanciát eredményez. Olyan megoldást kerestem, ami adott esetben jól követhető, ha kell, debugolható, és a bőséges és beszédes kimeneteket, logokat tekintve ezt meg is kaptam. Természetesen tudunk – több hálózati kapcsolat esetén – LUN-okat több úton, multipath módon is kiajánlani, persze, ezt a kliensnek is támogatnia kell. Szerettem volna pár számszerű adattal is szolgálni, azonban ez  az itthoni, gyorsnak nem mondható tesztkörnyezet miatt nem lenne releváns (azért 80-85 Megabájt / másodpercet így is sikerült kihozni egy sima gigabit etherneten keresztül, mind további tweak nélkül és a jumbo framek sem voltak bekapcsolva). Stabil és következetes megoldásnak találtam. Használni is fogom.