{"id":1558,"date":"2017-07-26T12:17:40","date_gmt":"2017-07-26T10:17:40","guid":{"rendered":"http:\/\/miroslaw.borodziuk.eu\/?p=1558"},"modified":"2017-07-26T20:10:36","modified_gmt":"2017-07-26T18:10:36","slug":"iscsi","status":"publish","type":"post","link":"http:\/\/miro.borodziuk.eu\/index.php\/2017\/07\/26\/iscsi\/","title":{"rendered":"iSCSI"},"content":{"rendered":"<p><i>Internet Small Computer System Interface <\/i>(iSCSI) to protok\u00f3\u0142 sieciowy u\u017cywany do wsp\u00f3\u0142dzielenia zasob\u00f3w dyskowych przez sie\u0107 IP przy wykorzystaniu komend SCSI. Klienci widz\u0105 zas\u00f3b dyskowy tak jak lokalnie pod\u0142\u0105czony dysk i mog\u0105 u\u017cywa\u0107 zwyk\u0142ych narz\u0119dzi do partycjonowania, formatowania i montowania dysku. iSCSI Storage Area Network (SAN) to tania alternatywa wobec kosztownego rozwi\u0105zania Fibre Channel SAN. W przeciwie\u0144stwie do Fibre Channel nie wymaga specjalnie dedykowanego okablowania, prze\u0142\u0105cznik\u00f3w ani kontroler\u00f3w, u\u017cywa istniej\u0105cej infastruktury IP do wsp\u00f3\u0142dzielenia zasob\u00f3w dyskowych.<\/p>\n<p><!--more--><\/p>\n<p>Protok\u00f3\u0142 komunikuje si\u0119 przez port 3260 TCP. W przeciwie\u0144stwie do NFS i CIFS zasoby dyskowe udost\u0119pniane s\u0105 przez iSCSI jako urz\u0105dzenie blokowe bez systemu plik\u00f3w. Klient dopiero dzieli na partycje zas\u00f3b i formatuje na jaki system plik\u00f3w mu pasuje.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1563 aligncenter\" src=\"http:\/\/miroslaw.borodziuk.eu\/wp-content\/uploads\/iscsi2.jpg\" alt=\"\" width=\"282\" height=\"62\" \/><\/p>\n<p><span style=\"color: #3366ff;\">Terminologia iSCSI SAN.<\/span><\/p>\n<p><span style=\"color: #008000;\"><em>IQN<\/em> <\/span>&#8211; unikalna nazwa s\u0142u\u017c\u0105c\u0105 do identyfikowania target\u00f3w i intiator\u00f3w.<\/p>\n<p><span style=\"color: #008000;\"><em>Target<\/em><\/span> &#8211; us\u0142uga na serwerze iSCSI, kt\u00f3ra udost\u0119pnia zas\u00f3b dyskowy.<\/p>\n<p><span style=\"color: #008000;\"><em>Initiato<\/em>r<\/span> &#8211; klient iSCSI identyfikowany przez IQN, kt\u00f3ry pod\u0142\u0105cza si\u0119 do targetu.<\/p>\n<p><em><span style=\"color: #008000;\">Backstore<\/span><\/em>\u00a0 &#8211; (backend storage) urz\u0105dzenie dyskowe udost\u0119pniane przez target, mo\u017ce to by\u0107 ca\u0142y dysk fizyczny, partycja, lvm lub macierz raid.<\/p>\n<p><em><span style=\"color: #008000;\">ACL<\/span> <\/em>&#8211; lista kontroli dost\u0119pu (access control list), kt\u00f3ra kontroluje dost\u0119p do LUN targetu.<\/p>\n<p><em><span style=\"color: #008000;\">LUN<\/span> <\/em>&#8211; logiczny numer jednostki (logical unit number), reprezentuje pojedynczy mo\u017cliwy do zaadresowania logiczny dysk udost\u0119pniony przez target. Z perspektywy klienta LUN to zwyk\u0142y dysk pod\u0142\u0105czony do klienta.<\/p>\n<p><em><span style=\"color: #008000;\">Portal<\/span> <\/em>&#8211; kombinacja adresu IP i portu, na kt\u00f3rych target nas\u0142uchuje a do kt\u00f3rych inicjator nawi\u0105zuje po\u0142\u0105czenie.<\/p>\n<p><span style=\"color: #008000;\"><em>TPG<\/em><\/span> &#8211; (target portal group) kolekcja adres\u00f3w IP i port\u00f3w, na kt\u00f3rych nas\u0142uchuje target.<\/p>\n<p><em><span style=\"color: #008000;\">Discovery<\/span><\/em> &#8211; proces, w kt\u00f3rym inicjator odnajduje target ze skonfigurowanym portalem.<\/p>\n<p><em><span style=\"color: #008000;\">Login<\/span><\/em> &#8211; autentykacja, kt\u00f3ra przyznaje inicjatorowi dost\u0119p do LUN targetu.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Zarz\u0105dzanie serwerem iSCSI Target.<\/span><\/p>\n<p>Do cel\u00f3w zarz\u0105dzania targetem s\u0142u\u017cy komenda <em>targetcli<\/em>, pozwala ona wy\u015bwietla\u0107, tworzy\u0107 modyfikowa\u0107 i kasowa\u0107 LUNy na targecie.<\/p>\n<pre class=\"lang:sh decode:true \"># targetcli\r\ntargetcli shell version 2.1.fb34\r\nCopyright 2011-2013 by Datera, Inc and others.\r\nFor help on commands, type 'help'.\r\n\/&gt;\r\nRun help at the tool\u2019s prompt to view available subcommands:\r\n\r\n\/&gt; help\r\n\u2026\u2026 . .\r\nAVAILABLE COMMANDS\r\n=====================\r\nThe following commands are available in the current path:\r\n- bookmarks action [bookmark]\r\n- cd [path]\r\n- clearconfig [confirm]\r\n- exit\r\n- get [group] [parameter\u2026]\r\n- help [topic]\r\n- ls [path] [depth]\r\n- pwd\r\n- refresh\r\n- restoreconfig [savefile] [clear_existing]\r\n- saveconfig [savefile]\r\n- sessions [action] [sid]\r\n- set [group] [parameter=value\u2026]\r\n- status\r\n- version<\/pre>\n<table style=\"width: 580px;\">\n<tbody>\n<tr>\n<td style=\"width: 155.5px;\"><em><span style=\"color: #808080;\">Komenda<\/span><\/em><\/td>\n<td style=\"width: 408.5px;\"><em><span style=\"color: #808080;\">Opis<\/span><\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 155.5px;\"><span style=\"color: #008000;\"><code>ls<\/code><\/span><\/td>\n<td style=\"width: 408.5px;\">Wy\u015bwietla widok z aktualnego po\u0142o\u017cenia w drzewie.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 155.5px;\"><span style=\"color: #008000;\"><code>pwd<\/code><\/span><\/td>\n<td style=\"width: 408.5px;\">Wy\u015bwietla aktualne po\u0142o\u017cenie w drzewie.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 155.5px;\"><span style=\"color: #008000;\"><code>cd<\/code><\/span><\/td>\n<td style=\"width: 408.5px;\">Nawigowanie po drzewie.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 155.5px;\"><span style=\"color: #008000;\"><code>get \/ set<\/code><\/span><\/td>\n<td style=\"width: 408.5px;\">Pobranie \/ ustawienie atrybut\u00f3w konfiguracji.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 155.5px;\"><span style=\"color: #008000;\"><code>sessions<\/code><\/span><\/td>\n<td style=\"width: 408.5px;\">Dok\u0142adne informacje o aktualnie otwartej sesji.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 155.5px;\"><span style=\"color: #008000;\"><code>saveconfig<\/code><\/span><\/td>\n<td style=\"width: 408.5px;\">Zapisanie konfiguracji.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 155.5px;\"><span style=\"color: #008000;\"><code>exit<\/code><\/span><\/td>\n<td style=\"width: 408.5px;\">Wyj\u015bcie z interfejsu targetcli.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Wi\u0119cej informacji: <code><span style=\"color: #ff0000;\"># man targetcli<\/span><\/code>.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Zarz\u0105dzanie iSCSI Initiator.<\/span><\/p>\n<p>Podstawowym narz\u0119dziem do wyszukiwania (<em>discover<\/em>) target\u00f3w iSCSI, logowania si\u0119 na nie, zarz\u0105dzania baz\u0105 discovery iSCSI jest komenda <em>iscsiadm<\/em>. Komenda wsp\u00f3\u0142pracuje z demonem <em>iscsid<\/em> i czyta konfiguracj\u0119 z pliku <i>\/etc\/iscsi\/iscsid.conf. <\/i><\/p>\n<p>Komenda ma cztery tryby dzia\u0142ania:<\/p>\n<ul>\n<li><em><span style=\"color: #008000;\">Discovery<\/span> <\/em>&#8211; przepytuje okre\u015blony portal o dost\u0119pne targety w oparciu o konfiguracj\u0119 zdefiniowan\u0105 w pliku: <i>\/etc\/iscsi\/iscsid.conf.<\/i><\/li>\n<li><span style=\"color: #008000;\"><em>Node<\/em><\/span> &#8211; zestawia sesje z targetem i tworzy koresponduj\u0105ce urz\u0105dzenie dla ka\u017cdego odnalezionego na targecie LUN.<\/li>\n<li><em><span style=\"color: #008000;\">Session<\/span> <\/em>&#8211; wy\u015bwietla aktualne informacje o sesji.<\/li>\n<li><em><span style=\"color: #008000;\">Iface<\/span> <\/em>&#8211; definiuje portal sieciowy.<\/li>\n<\/ul>\n<p>Wi\u0119cej informacji:\u00a0 <code><span style=\"color: #ff0000;\"># man iscsiadm<\/span><\/code>.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Pliki konfiguracyjne.<\/span><\/p>\n<p><code> \/etc\/iscsi\/iscsid.conf<\/code><i> &#8211; <\/i>plik konfiguracyjny inicjatora iSCSI, kt\u00f3ry okre\u015bla jak sterowa\u0107 iniccjatorem przez komend\u0119 <em>iscsiadm<\/em>. Przyk\u0142adowa zawarto\u015b\u0107 poni\u017cej.<\/p>\n<pre class=\"lang:sh decode:true\">iscsid.startup = \/bin\/systemctl start iscsid.socket iscsiuio.socket\r\nnode.startup = automatic\r\nnode.leading_login = No\r\nnode.session.timeo.replacement_timeout = 120\r\nnode.conn[0].timeo.login_timeout = 15\r\nnode.conn[0].timeo.logout_timeout = 15\r\nnode.conn[0].timeo.noop_out_interval = 5\r\nnode.conn[0].timeo.noop_out_timeout = 5\r\nnode.session.err_timeo.abort_timeout = 15\r\nnode.session.err_timeo.lu_reset_timeout = 30\r\nnode.session.err_timeo.tgt_reset_timeout = 30\r\nnode.session.initial_login_retry_max = 8\r\nnode.session.cmds_max = 128\r\nnode.session.queue_depth = 32\r\nnode.session.xmit_thread_priority = -20\r\nnode.session.iscsi.InitialR2T = No\r\nnode.session.iscsi.ImmediateData = Yes\r\nnode.session.iscsi.FirstBurstLength = 262144\r\nnode.session.iscsi.MaxBurstLength = 16776192\r\nnode.conn[0].iscsi.MaxRecvDataSegmentLength = 262144\r\nnode.conn[0].iscsi.MaxXmitDataSegmentLength = 0\r\ndiscovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768\r\nnode.conn[0].iscsi.HeaderDigest = None\r\nnode.session.nr_sessions = 1\r\nnode.session.iscsi.FastAbort = Yes<\/pre>\n<p><code>\/etc\/iscsi\/initiatorname.iscsi<\/code> &#8211; plik jest czytany przez demona iscsid podczas startu i jest u\u017cywany do okre\u015blenia nazw w\u0119z\u0142\u00f3w i ich alias\u00f3w. Przyk\u0142adowa zawarto\u015b\u0107 pliku znajduje si\u0119 poni\u017cej.<\/p>\n<pre class=\"lang:sh decode:true \">InitiatorName=iqn.2014-09.net.example.server5:mdblun01\r\nInitiatorAlias=\u201dLUN01 for MariaDB Database Files\u201d<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0106wiczenie 1. Konfiguracja iSCSI Target LUN w oparciu o dysk i pod\u0142\u0105czenie na inicjatorze.<\/p>\n<p><span style=\"color: #808080;\">Strona Target.<\/span><\/p>\n<p>1. Instalacja targetcli:<\/p>\n<pre class=\"lang:sh decode:true \">[target]# yum \u2013y install targetcli<\/pre>\n<p>2. Uruchomienie pow\u0142oki targetcli i wy\u015bwietlenie drzewa. Po drzewie targetcli mo\u017cna<\/p>\n<pre class=\"lang:sh decode:true \">\/&gt; ls\r\no- \/ .................................................. [...]\r\n o- backstores ....................................... [...]\r\n | o- block ........................... [Storage Objects: 0]\r\n | o- fileio .......................... [Storage Objects: 0]\r\n | o- pscsi ........................... [Storage Objects: 0]\r\n | o- ramdisk ......................... [Storage Objects: 0]\r\n o- iscsi ..................................... [Targets: 0]\r\n o- loopback .................................. [Targets: 0]\r\n\/&gt;<\/pre>\n<p>3. wej\u015bcie do<code> \/backstores\/block<\/code> aby utworzy\u0107 <em>backstore<\/em> o nazwie <em>iscsidisk1<\/em> wykorzystuj\u0105c dysk<em> \/dev\/vdb<\/em>.<\/p>\n<pre class=\"lang:sh decode:true\">\/&gt; cd \/backstores\/block\r\n\/backstores\/block&gt; create block1 \/dev\/vdb\r\n\r\nCreated block storage object block1 using \/dev\/vdb.<\/pre>\n<p>3. Utworzenie targetu iSCSI z adresem <em>iqn.2015-01.com.example:iscsidisk1<\/em> na backstore <em>iscsidisk1 <\/em>w domy\u015blnym TPG:<\/p>\n<pre class=\"lang:sh decode:true\">\/backstores\/block&gt; cd \/iscsi\r\n\/iscsi&gt; create iqn.2015-01.com.example:iscsidisk1\r\n\r\nCreated target iqn.2015-01.com.example:iscsidisk1.\r\nCreated TPG 1.<\/pre>\n<p>Nazewnictwo IQN jest bardzo restrykcyjne, je\u017celi np. numer miesi\u0105ca wpiszesz jako pojedyncz\u0105 cyfr\u0119 otrzymasz komunikat \u201cWWN not valid\u201d.<\/p>\n<p>4. Wy\u0142\u0105czenie autentykacji dzi\u0119ki czemu ka\u017cdy inicjator b\u0119dzie m\u00f3g\u0142 pod\u0142\u0105czy\u0107 si\u0119 do LUN.<\/p>\n<pre class=\"lang:sh decode:true\">\/iscsi\/iqn.20\u2026sidisk1\/tpg1&gt; set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1\r\n\r\nParameter demo_mode_write_protect is now '0'.\r\nParameter authentication is now '0'.\r\nParameter generate_node_acls is now '1'.<\/pre>\n<p>Wy\u0142\u0105czenie <code>demo_mode_write_protect=0<\/code> zezwala na zapis do LUN.<br \/>\nAtrybut <code>generate_node_acls=1<\/code> w\u0142\u0105cza autentykacje TPG, kt\u00f3ra wy\u0142\u0105cza wszelkie zdefiniowane przez u\u017cytkownik\u00f3w ACLki.<\/p>\n<p>5.\u00a0 Utworzenie LUN o nazwie lun0 i wyeksportowanie:<\/p>\n<pre class=\"lang:sh decode:true \">\/iscsi\/iqn.20\u2026sidisk1\/tpg1&gt; luns\/ create \/backstores\/block\/block1\r\n\r\nCreated LUN 0<\/pre>\n<p>6. Utworzenie portalu z adresem IP 192.168.0.120 i domy\u015blnym portem:<\/p>\n<pre class=\"lang:sh decode:true\">\/iscsi&gt; cd iqn.2015-01.com.example:iscsidisk1\/tpg1\r\n\/iscsi\/iqn.20\u2026sidisk1\/tpg1&gt; portals\/ create 192.168.0.120\r\n\r\nUsing default IP port 3260\r\nCreated network portal 192.168.0.120:3260.<\/pre>\n<p>Przy tworzeniu portalu nazwa hosta musi by\u0107 wpisany adres IP, nie mo\u017cna tutaj wpisa\u0107 nazwy domenowej hosta, bo nie b\u0119dzie to dzia\u0142a\u0107.<\/p>\n<p>7. Wyj\u015bcie z pow\u0142oki <em>targetcli<\/em>. Domy\u015blnie w\u0142\u0105czona jest dyrektywa <code>auto_save_on_exit<\/code> a wi\u0119c konfiguracja zostanie zapisana automatycznie.<\/p>\n<pre class=\"lang:sh decode:true\">\/&gt; exit\r\n\r\nGlobal pref auto_save_on_exit=true\r\nLast 10 configs saved in \/etc\/target\/backup.\r\nConfiguration saved to \/etc\/target\/saveconfig.json<\/pre>\n<p>Konfiguracja zapisana zosta\u0142a w pliku <code>\/etc\/target\/saveconfig.json<\/code> jak wskaza\u0142a pow\u0142oka <em>targetcli<\/em> po wyj\u015bciu.<\/p>\n<p>8. Odblokowanie na firewallu us\u0142ugi <em>iscsi-target (<\/em>port 3260\/tcp):<\/p>\n<pre class=\"lang:sh decode:true \">[target]# firewall-cmd --permanent --add-service iscsi-itarget\r\n[target]# firewall-cmd --reload<\/pre>\n<p>9. Je\u017celi w systemie nie ma zdefiniowej us\u0142ugi firewalld iscsi-target to trzeba tak\u0105 zdefiniowa\u0107:<\/p>\n<pre class=\"lang:sh decode:true\">[target]# vi \/etc\/firewalld\/services\/iscsi-target.xml\r\n\r\n&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;service&gt;\r\n&lt;short&gt;iSCSI&lt;\/short&gt;\r\n&lt;description&gt;This is to permit the iSCSI traffic to pass through the firewall&lt;\/description&gt;\r\n&lt;port protocol=\"tcp\" port=\"3260\"\/&gt;\r\n&lt;\/service&gt;<\/pre>\n<p>10. Autostart, uruchomienie i status us\u0142ugi target.<\/p>\n<pre class=\"lang:sh decode:true \">[target]# systemctl enable target\r\n[target]# systemctl start target\r\n[target]# systemctl status target<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #808080;\">Strona initiator.<\/span><\/p>\n<p>11. Instalacja iscsi-initiator-utils:<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# yum install iscsi-initiator-utils -y<\/pre>\n<p>12. Edycja pliku konfiguracyjnego:<\/p>\n<pre class=\"lang:sh decode:true\">[initiator]# vim \/etc\/iscsi\/initiatorname.iscsi\r\n\r\nInitiatorName=iqn.2015-01.com.example:scsidisk1<\/pre>\n<p>13. W\u0142\u0105czenie, autostart i status demona <em>iscsid<\/em>:<\/p>\n<pre class=\"lang:sh decode:true\">[initiator]# systemctl start iscsid\r\n[initiator]# systemctl enable iscsid\r\n[initiator]# systemctl status iscsid<\/pre>\n<p>14. Poniewa\u017c sk\u0142adnia komendy <em>iscsiadm<\/em> jest dosy\u0107 zawi\u0142a najlepiej skopiowa\u0107 ca\u0142e poni\u017csze polecenie z man i tylko wstawi\u0107 swoje parametry:<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# man iscsiadm\r\n[initiator]# iscsiadm \u2013-mode discoverydb \u2013-type sendtargets \u2013-portal 192.168.0.120 \u2013discover\r\n\r\n192.168.0.120:3260,1 iqn.2015-01.com.example:iscsidisk1<\/pre>\n<p>I zn\u00f3w kopiowanie z man komendy login:<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# man iscsiadm\r\n[initiator]# iscsiadm \u2013-mode node \u2013-targetname iqn.2015-01.com.example:scsidisk1 \u2013-portal 192.168.0.120:3260 \u2013login<\/pre>\n<p>15. Dodatkowe informacje :<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# iscsiadm -m session -P 3<\/pre>\n<p>16. Wy\u015bwietlenie dost\u0119pnych urz\u0105dze\u0144 SCSI w systemie:<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# lsscsi<\/pre>\n<p>17. Utworzenie partycji z <em>ext4<\/em> na pod\u0142\u0105czonym zasobie dyskowym i podmontowanie nowej partycji w oparciu o jej UUID:<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# fdisk \/dev\/sdb\r\nCreating a 2024MB partition\r\n[initiator]# partprobe -s\r\n[initiator]# mkfs.ext4 \/dev\/sdb1\r\n[initiator]# mkdir \/mnt\/iscsi\r\n[initiator]# blkid | grep sdb1\r\n[initiator]# vim \/etc\/fstab\r\nUUID=XYZ \/mnt\/iscsi ext4 _netdev 0 0\r\n[initiator]# mount -a<\/pre>\n<p>18. Dodatkowe informacje:<\/p>\n<pre class=\"lang:sh decode:true\">[initiator]# watch -d \u2018iscsiadm -m session -P 3 | grep Attached\u2019\r\n\r\nAttached scsi disk sdb : state: running<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0106wiczenie 2. Konfiguracja iSCSI Target LUN w oparciu plik i pod\u0142\u0105czenie na inicjatorze.<\/p>\n<p><span style=\"color: #808080;\">Strona Target.<\/span><\/p>\n<p>1. Instalacja targetcli:<\/p>\n<pre class=\"lang:sh decode:true \">[target]# yum \u2013y install targetcli<\/pre>\n<p>2. Uruchomienie pow\u0142oki targetcli i wy\u015bwietlenie drzewa.<\/p>\n<pre class=\"lang:sh decode:true \">\/&gt; ls\r\no- \/ .................................................. [...]\r\no- backstores ....................................... [...]\r\n| o- block ........................... [Storage Objects: 0]\r\n| o- fileio .......................... [Storage Objects: 0]\r\n| o- pscsi ........................... [Storage Objects: 0]\r\n| o- ramdisk ......................... [Storage Objects: 0]\r\no- iscsi ..................................... [Targets: 0]\r\no- loopback .................................. [Targets: 0]\r\n\/&gt;<\/pre>\n<p>3. Wej\u015bcie do <code>\/backstores\/fileio<\/code> aby utworzy\u0107 plik IO o nazwie <em>file1<\/em> w katalogu <code>\/usr<\/code>:<\/p>\n<pre class=\"lang:sh decode:true \">\/&gt; cd \/backstores\/fileio\r\n\/backstores\/fileio&gt; create file1 \/usr\/file1.img 50M\r\n\r\nCreated fileio file1 with size 52428800<\/pre>\n<p>3. Utworzenie targetu iSCSI z adresem <em>iqn.2015-01.com.example:iscsifile1<\/em> na backstore <em>file1<\/em> w domy\u015blnym TPG:<\/p>\n<pre class=\"lang:sh decode:true\">\/backstores\/fileio&gt; cd \/iscsi\r\n\/iscsi&gt; create iqn.2015-01.com.example:iscsifile1\r\n\r\nCreated target iqn.2015-01.com.example:iscsifile1.\r\nCreated TPG 1.<\/pre>\n<p>4.Tworzymy ACL poniewa\u017c chcemy ograniczy\u0107 dost\u0119p do targetu.<\/p>\n<p>\/iscsi&gt; cd iqn.2015-01.com.example:iscsifile1\/tpg1<br \/>\n\/iscsi\/iqn.20\u2026sidisk1\/tpg1&gt; acls\/ create iqn.2015-01.com.example:iscsifile1<\/p>\n<p>5. Utworzenie LUN o nazwie lun0 i wyeksportowanie:<\/p>\n<pre class=\"lang:sh decode:true \">\/iscsi\/iqn.20\u2026sidisk1\/tpg1&gt; luns\/ create \/backstores\/fileio\/file1\r\n\r\nCreated LUN 0<\/pre>\n<p>6. Zezwalamy na dost\u0119p do targetu tylko dla host\u00f3w z podsieci 192.168.0.0\/24.<\/p>\n<pre class=\"lang:sh decode:true\">\/iscsi\/iqn.20\u2026sidisk1\/tpg1&gt; portals\/ delete 0.0.0.0 3260\r\n\/iscsi\/iqn.20\u2026sidisk1\/tpg1&gt; portals\/ create 0.0.0.0.255 3260<\/pre>\n<p>0.0.0.0.255 to maska wildcard, tutaj jest to odpowiednik maski podsieci 255.255.255.0 czyli 24 bitowej.<\/p>\n<p>7. Wyj\u015bcie z pow\u0142oki <em>targetcli<\/em>.<\/p>\n<pre class=\"lang:sh decode:true\">\/&gt; exit\r\n\r\nGlobal pref auto_save_on_exit=true\r\nLast 10 configs saved in \/etc\/target\/backup.\r\nConfiguration saved to \/etc\/target\/saveconfig.json<\/pre>\n<p>8. Odblokowanie na firewallu us\u0142ugi iscsi-target (port 3260\/tcp):<\/p>\n<pre class=\"lang:sh decode:true\">[target]# firewall-cmd --permanent --add-service iscsi-itarget\r\n[target]# firewall-cmd --reload<\/pre>\n<p>9. Autostart, uruchomienie i status us\u0142ugi target.<\/p>\n<pre class=\"lang:sh decode:true \">[target]# systemctl enable target\r\n[target]# systemctl start target\r\n[target]# systemctl status target<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #808080;\">Strona initiator.<\/span><\/p>\n<p>10. Instalacja iscsi-initiator-utils:<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# yum install iscsi-initiator-utils -y<\/pre>\n<p>11. Edycja pliku konfiguracyjnego:<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# vim \/etc\/iscsi\/initiatorname.iscsi\r\n\r\nInitiatorName=iqn.2015-01.com.example:iscsifile1<\/pre>\n<p>12. W\u0142\u0105czenie, autostart i status demona iscsid:<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# systemctl start iscsid\r\n[initiator]# systemctl enable iscsid\r\n[initiator]# systemctl status iscsid<\/pre>\n<p>13. Poniewa\u017c sk\u0142adnia komendy <em>iscsiadm<\/em> jest dosy\u0107 zawi\u0142a najlepiej skopiowa\u0107 ca\u0142e poni\u017csze polecenie z man i tylko wstawi\u0107 swoje parametry:<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# iscsiadm -m discoverydb \u2013t st \u2013p 192.168.0.120\r\n192.168.0.120:3260,1 iqn.2015-01.com.example:iscsidisk1\r\n192.168.0.120:3260,1 iqn.2015-01.com.example:iscsifile1<\/pre>\n<p>lub (opcje w wersji pe\u0142nej)<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# iscsiadm \u2013-mode discoverydb \u2013-type sendtargets \u2013-portal 192.168.0.120 \u2013discover<\/pre>\n<p>Teraz login:<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# iscsiadm \u2013m node \u2013T iqn.2015-01.com.example:scsidisk1 \u2013p 192.168.0.120:3260 \u2013l<\/pre>\n<p>lub (opcje w wersji pe\u0142nej)<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# iscsiadm \u2013-mode node \u2013-targetname iqn.2015-01.com.example:scsidisk1 \u2013-portal 192.168.0.120:3260 \u2013login<\/pre>\n<p>14. Dodatkowe informacje :<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# iscsiadm -m session -P 3<\/pre>\n<p>15. Wy\u015bwietlenie dost\u0119pnych urz\u0105dze\u0144 SCSI w systemie:<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# lsscsi<\/pre>\n<p>16. Utworzenie partycji z ext4 na pod\u0142\u0105czonym zasobie dyskowym i podmontowanie nowej partycji w oparciu o jej UUID:<\/p>\n<pre class=\"lang:sh decode:true \">[initiator]# fdisk \/dev\/sdb\r\nCreating a 2024MB partition\r\n[initiator]# partprobe -s\r\n[initiator]# mkfs.ext4 \/dev\/sdb1\r\n[initiator]# mkdir \/mnt\/iscsi\r\n[initiator]# blkid | grep sdb1\r\n[initiator]# vim \/etc\/fstab\r\nUUID=XYZ \/mnt\/iscsi ext4 _netdev 0 0\r\n[initiator]# mount -a<\/pre>\n<p>17. Dodatkowe informacje:<\/p>\n<pre class=\"lang:sh decode:true\">[initiator]# watch -d \u2018iscsiadm -m session -P 3 | grep Attached\u2019\r\n\r\nAttached scsi disk sdb : state: running<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Internet Small Computer System Interface (iSCSI) to protok\u00f3\u0142 sieciowy u\u017cywany do wsp\u00f3\u0142dzielenia zasob\u00f3w dyskowych przez sie\u0107 IP przy wykorzystaniu komend SCSI. Klienci widz\u0105 zas\u00f3b dyskowy tak jak lokalnie pod\u0142\u0105czony dysk i mog\u0105 u\u017cywa\u0107 zwyk\u0142ych narz\u0119dzi do partycjonowania, formatowania i montowania dysku. iSCSI Storage Area Network (SAN) to tania alternatywa wobec kosztownego rozwi\u0105zania Fibre Channel SAN. &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/miro.borodziuk.eu\/index.php\/2017\/07\/26\/iscsi\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;iSCSI&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1559,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[48],"tags":[],"_links":{"self":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/1558"}],"collection":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1558"}],"version-history":[{"count":31,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/1558\/revisions"}],"predecessor-version":[{"id":1591,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/1558\/revisions\/1591"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media\/1559"}],"wp:attachment":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/categories?post=1558"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/tags?post=1558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}