Przejdź do głównej zawartości

Linux RHCE - iSCSI - udostępnianie zasobów dyskowych

Protokół iSCSI jest typowym protokołem działającym jako klient - serwer. Narzędzie to pozwala na wystawienie zasobu dyskowego ( target ) dla klienta , który jest nazywany inicjatorem. iSCI określa serwer udostępniający dyski wirtualne za pośrednictwem sieci mianem "celu" iSCSI. Klient montujący te dyski nazywany jest inicjatorem, co nabiera sensu mając na uwadze, że polecenia iSCSI wychodzą od klienta, a serwer na nie odpowiada. W relacji iSCSI za implementacje celu i inicjatora odpowiadają odrębne składniki programowe. Wszystkie nowoczesne systemy operacyjne zawierają inicjator (choć czasem jest to składnik opcjonalny) oraz większość systemów posiada już wbudowaną implementacje celu. Specyfikację standardu iSCSI określa dokument RFC 3720


Istniały co najmniej cztery różne implementacje inicjatora iSCSI dla środowisk Linux. Kilka wyginęło śmiercią naturalną, a inne zostały połączone. Jedynym jaki przetrwał do tej pory wydaję się być Open-iSCSI, standardowy inicjator dostępny dla wszystkich dystrybucji Linux. By móc z niego skorzystać instalujemy pakiet open-iscsi w przypadku Ubuntu lub iscsi-initiator-utils w systemie RedHat. 


KONFIGURACJA UDOSTĘPNIANEGO ZASOBU DYSKOWEGO (TARGET)

Krok 1 - Instalacja wymaganych pakietów.

 # yum install -y scsi-target-utils.i686

Krok 2 - Sprawdzenie czy pakiet zainstalował się i jest dostępny w systemie

# rpm -qa | grep scsi
scsi-target-utils-1.0.14-4.el6.i686


Krok 3 - Ustawienie uruchamiania usługi w raz z starte/restartem systemu 

# chkconfig tgtd on

Krok 4 - Sprawdzenie ustawień uruchamiania 

# chkconfig tgtd --list
tgtd    0:off   1:off   2:on    3:on    4:on    5:on    6:off

Do konfiguracji udostępniania wykorzystywane jest narzędzie tgtadm wraz z dostępnymi przełącznikami. 
Lista przełączników znajduje się w podręczniku systemowym i można z niej skorzystać wydając polecenie: 

man tgtadm

KONFIGURACJA Udostępnionego zasobu 

Krok 1 - Stworzenie targetu 

# tgtadm --lld iscsi --op new --mode target --tid 1 --targetname nowy_target

Krok 2 - Sprawdzenie czy nowy target został utworzony 

# tgtadm  --lld iscsi  --op show --mode target
Target 1: nowy_target
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
    Account information:
    ACL information:

Jak widać powyżej nowy target został utworzony zawiera już nowy Logical Unit - LUN 0, który służy do zarządzania targetem. Widać również nadaną nazwę (nowy_target) i użyty sterownik iscsi. 

Krok 3 - Utworzenie nowego własnego Logical Unit (LUN)

# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 --backing-store /dev/sdb2

Krok 4 - Sprawdzenie utworzenia nowego LUN'a 

# tgtadm  --lld iscsi  --op show --mode target
Target 1: nowy_target
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 2155 MB, Block size: 512
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb2
            Backing store flags:
    Account information:
    ACL information:

PODSTAWOWE USTAWIENIA BEZPIECZEŃSTWA

Podczas sprawdzania i wyświetlania informacji o utworzonym targecie i LUN w ostatniej linii znajduję się zapis :  ACL information który określa prawa dostępu do utworzonego LUN'a. 

Krok 1 - Ograniczenie udostępniania zasobu dla wybranego hosta 

# tgtadm --lld iscsi --op bind --mode target --tid 1 --initiator-address 192.168.56.101

Krok 2 - Sprawdzenie wprowadzonych zmian 

# tgtadm  --lld iscsi  --op show --mode target
Target 1: nowy_target
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 2155 MB, Block size: 512
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb2
            Backing store flags:
    Account information:
    ACL information:
        192.168.56.101

KONFIGURACJA ZAPORY SYSTEMOWEJ - IPTABLES 

Krok 1 - Sprawdzenie na jakim porcie działa usługa tgtd 

# netstat -taupen | grep tgtd

tcp        0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      0          15896      2048/tgtd
tcp        0      0 :::3260                     :::*                        LISTEN      0          15897      2048/tgtd

Krok 2 - Dodanie odpowiednich zasad do zapory systemowej iptables 

# iptables -I INPUT 16  -p tcp -m tcp --dport 3260 -j ACCEPT

Po wykonaniu powyższych kroków mamy już udostępniony wybrany zasób. W naszym przypadku był to /dev/sdb2.

ZAPISANIE KONFIGURACJI 

Jeżeli wszystkie powyższe kroki zostały wykonane poprawnie, przydało by się by umożliwić udostępnianie po ponownym uruchomieniu systemu. Konfiguracja targetów znajduje się w pliku : 

/etc/tgt/targets.conf

W pliku tym zapisujemy informacje o utworzonym targecie. 

Krok 1 - Wygenerowanie aktualnych informacji o skonfigurowanym targecie.

# tgt-admin --dump
default-driver iscsi

<target nowy_target>
        backing-store /dev/sdb2
        initiator-address 192.168.56.101
</target>

Informacje te muszą znaleźć się w /etc/tgt/targets.conf  można więc odrazu zrobić przekierowanie 

# tgt-admin --dump > /etc/tgt/targets.conf


KONFIGURACJA INICJATORA - KLIENTA 

Krok 1 - Instalacja wymaganych pakietów

# yum install -y iscsi-initiator-utils.i686

Krok 2 - Sprawdzenie instalacji pakietu 

# rpm -qa | grep scsi
iscsi-initiator-utils-6.2.0.872-34.el6.i686

Krok 3 - Ustawienie uruchamiania usługi wraz ze startem systemu 

UWAGA 
Usługi zostaną uruchomione pod warunkiem , że wcześniej będzie ustawiony target jaki ma zostać zamontowany. 

Po instalacji usługi są skonfigurowane by były uruchamiane wraz z systemem

# chkconfig --list | grep scsi
iscsi           0:off   1:off   2:off   3:on    4:on    5:on    6:off
iscsid          0:off   1:off   2:off   3:on    4:on    5:on    6:off

ODKRYWANIE UDOSTĘPNIONEGO TARGETU 

Krok 1 - Odkrycie udostępnionego zasobu 

Jak poprzednio i tym razem przyda się podręcznik systemowy w którym znajdziemy wszystkie potrzebne polecenia: 

# man iscsiadm
polecenia znajdują się w sekcji EXAMPLES

Odkrywamy nowy zasób 

# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.56.102 --discover
192.168.56.102:3260,1 nowy_target

Krok 2 - Zalogowanie do nowego zasobu podając nazwę targetu i adres hosta

#  iscsiadm --mode node --targetname nowy_target --portal 192.168.56.102:3260 --login
Logging in to [iface: default, target: nowy_target, portal: 192.168.56.102,3260] (multiple)
Login to [iface: default, target: nowy_target, portal: 192.168.56.102,3260] successful.

Krok 3 - Sprawdzenie podłączenia nowego zasobu 

# cat /proc/partitions
major minor  #blocks  name

   8        0   20971520 sda
   8        1     512000 sda1
   8        2   20458496 sda2
 253        0   18391040 dm-0
 253        1    2064384 dm-1
   8       16    2104515 sdb

Jeżeli chcemy odłączyć zasób wykonujemy polecenie:


# iscsiadm --mode node --targetname nowy_target --portal 192.168.56.102:3260 --logout
Logging out of session [sid: 1, target: nowy_target, portal: 192.168.56.102,3260]
Logout of [sid: 1, target: nowy_target, portal: 192.168.56.2,3260] successful.




Komentarze

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości