본문 바로가기
IT 지식정리/스토리지

리눅스에서 iscsi 연결설정하기 (iscsi initiator)

by G. Hong 2018. 3. 19.
728x90
반응형

iscsi는 예전에는 scsi케이블을 통해서 연결이 되었던 스토리지 장비들을 네트워크 환경을 통해서 구현이 가능하도록 만들어진 프로토콜입니다.

위키백과: https://ko.wikipedia.org/wiki/ISCSI


iscsi에는 target과 initiator가 있습니다. target은 스토리지 서비스를 제공하는 장비(즉, 데이타 저장공간이 있는 장비)를 뜻하고, initiator는 이러한 스토리지를 이용하는 장비입니다.

쉽게 예를 들어 노트북에 usb 외장하드를 연결하여서 사용한면, target은 외장하드, initiator는 노트북인 셈입니다.


iscsi의 물리적인 구성은 아래와 같이 간단한 구조입니다. iSCSI server와 client가 모두 네트워크에 연결이 되어 있으면 됩니다.



그럼 리눅스에서 iscsi 연결을 설정해보도록 하겠습니다.

target설정을 통해서 iscsi서버를 만들수도 있지만, 일반적으로는 SW 또는 HW형태의 제품으로 제공이 되기 때문에 이번에는 initiator 설정만 하도록 하겠습니다.

(target 설정은 다음에 기회가 되면 다루도록 하겠습니다)


iscsi initiator를 사용하기 위해서는 먼저 관련된 패키지 설치가 필요합니다.

yum install iscsi-initiator-utils 커맨드를 통해서 설치가 가능합니다.

OS에 따라서 이름이 조금은 다를 수 있습니다. 아래는 centos에서 iscsi관련 패키지를 설치한 커맨드입니다.

[root@centos ~]# yum install libiscsi.x86_64 iscsi-initiator-utils-devel.x86_64
<<내용생략>>
Installed:
  iscsi-initiator-utils-devel.x86_64 0:6.2.0.874-4.el7                     libiscsi.x86_64 0:1.9.0-7.el7                   

Complete!

패키지를 설치하면 아래의 몇몇 파일들이 설치되게 됩니다.

/etc/iscsi/iscsid.conf: iscsid와 iscsiadm이 읽어들이는 설정파일로 각 항목에 대한 자세한 설명이 포함되어 있습니다.

/sbin/iscsid: open iscsi 데몬입니다.

/sbin/iscsiadm: open iscsi 관리도구입니다. target을 찾아서 login을 하는데 사용됩니다.

/sbin/iscsi-iname: iscsi name을 생성하는 툴입니다.

그 외에도 www.open-iscsi.org에 더 많은 자료들이 있습니다.

아래의 위치에 설정파일들이 저장되어 있습니다.
[root@centos ~]# ls /var/lib/iscsi
ifaces  isns  nodes  send_targets  slp  static

iscsiadm 커맨드를 통해서 iscsi target을 연결 해 보도록 하겠습니다.

iscsi target 10.0.0.21으로 sendtargets discovery 방식을 통해서 target을 등록 해보겠습니다.

[root@centos ~]# iscsiadm -m discovery --type sendtargets -p 10.0.0.21
10.0.0.21:3260,1 iqn.2006-01.com.openfiler:tsn.29e47a3acbad
10.0.2.15:3260,1 iqn.2006-01.com.openfiler:tsn.29e47a3acbad

Discovery 이후에 send_targets 테이블이 업데이트가 되게 됩니다.
[root@centos ~]# ls /var/lib/iscsi/nodes
iqn.2006-01.com.openfiler:tsn.29e47a3acbad

[root@centos ~]# ls /var/lib/iscsi/send_targets
10.0.0.21,3260

그리고 아래와 같이 discoverydb 옵션을 통해서도 업데이트 된 send_targets 테이블을 확인 할 수 있습니다.

[root@centos ~]# iscsiadm -m discoverydb -t st -p 10.0.0.21
# BEGIN RECORD 6.2.0.874-2
discovery.startup = manual
discovery.type = sendtargets
discovery.sendtargets.address = 10.0.0.21
discovery.sendtargets.port = 3260
discovery.sendtargets.auth.authmethod = None
discovery.sendtargets.auth.username = <empty>
discovery.sendtargets.auth.password = <empty>
discovery.sendtargets.auth.username_in = <empty>
discovery.sendtargets.auth.password_in = <empty>
discovery.sendtargets.timeo.login_timeout = 15
discovery.sendtargets.use_discoveryd = No
discovery.sendtargets.discoveryd_poll_inval = 30
discovery.sendtargets.reopen_max = 5
discovery.sendtargets.timeo.auth_timeout = 45
discovery.sendtargets.timeo.active_timeout = 30
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
# END RECORD


initiator에서 target을 발견하였으니, 이번에는 LUN 로그인을 하도록 하겠습니다.

아래 커맨드 결과를 보시면 로그인 전에는 연결된 세션이 존재하지 않습니다.

[root@centos test1]# iscsiadm -m session
iscsiadm: No active sessions

iscsiadm 커맨드를 통해서 발견된 iscsi target으로 로그인을 합니다.
[root@centos test1]# iscsiadm -m node -l
Logging in to [iface: default, target: iqn.2006-01.com.openfiler:tsn.29e47a3acbad, portal: 10.0.2.15,3260] (multiple)

다시 세션을 확인하면 발견된 target과 세션이 연결되어 있습니다.

[root@centos test1]# iscsiadm -m session
tcp: [1] 10.0.0.21:3260,1 iqn.2006-01.com.openfiler:tsn.29e47a3acbad (non-flash)

아래와 같이 -P 옵션을 사용해서 더 자세한 내용을 확인할 수 있습니다. 맨 마지막의 숫자 1과 3은 print level입니다.
[root@centos test1]# iscsiadm -m session -P 1
Target: iqn.2006-01.com.openfiler:tsn.29e47a3acbad (non-flash)
        Current Portal: 10.0.0.21:3260,1
        Persistent Portal: 10.0.0.21:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.1994-05.com.redhat:10d7f2d14e4
                Iface IPaddress: 10.0.0.20
                Iface HWaddress: <empty>
                Iface Netdev: <empty>
                SID: 1
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: LOGGED_IN
                Internal iscsid Session State: NO CHANGE
[root@centos test1]# iscsiadm -m session -P 3
iSCSI Transport Class version 2.0-870
version 6.2.0.874-2
Target: iqn.2006-01.com.openfiler:tsn.29e47a3acbad (non-flash)
        Current Portal: 10.0.0.21:3260,1
        Persistent Portal: 10.0.0.21:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.1994-05.com.redhat:10d7f2d14e4
                Iface IPaddress: 10.0.0.20
                Iface HWaddress: <empty>
                Iface Netdev: <empty>
                SID: 1
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: LOGGED_IN
                Internal iscsid Session State: NO CHANGE
                *********
                Timeouts:
                *********
                Recovery Timeout: 120
                Target Reset Timeout: 30
                LUN Reset Timeout: 30
                Abort Timeout: 15
                *****
                CHAP:
                *****
                username: <empty>
                password: ********
                username_in: <empty>
                password_in: ********
                ************************
                Negotiated iSCSI params:
                ************************
                HeaderDigest: None
                DataDigest: None
                MaxRecvDataSegmentLength: 262144
                MaxXmitDataSegmentLength: 131072
                FirstBurstLength: 262144
                MaxBurstLength: 262144
                ImmediateData: No
                InitialR2T: Yes
                MaxOutstandingR2T: 1
                ************************
                Attached SCSI devices:
                ************************
                Host Number: 3  State: running
                scsi3 Channel 00 Id 0 Lun: 0
                        Attached scsi disk sdb          State: running


이제는 iscsi를 통해서 연결된 디바이스를 확인 할 수 있습니다.

[root@centos test1]# lsscsi

[1:0:0:0]    cd/dvd  VBOX     CD-ROM           1.0   /dev/sr0                                                               
[2:0:0:0]    disk    ATA      VBOX HARDDISK    1.0   /dev/sda                                                               
[3:0:0:0]    disk    OPNFILER VIRTUAL-DISK     0     /dev/sdb 

[root@centos test1]# fdisk -l | grep /dev

Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 sectors
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    16777215     7339008   8e  Linux LVM
Disk /dev/mapper/centos-root: 6652 MB, 6652166144 bytes, 12992512 sectors
Disk /dev/mapper/centos-swap: 859 MB, 859832320 bytes, 1679360 sectors
Disk /dev/sdb: 5268 MB, 5268045824 bytes, 10289152 sectors

이제 인식된 LUN을 포맷 및 마운트를 하도록 하겠습니다.
[root@centos test1]# fdisk /dev/sdb
...생략...
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
...생략...
[root@centos test1]# mkfs -t ext4 /dev/sdb1
...생략...
Allocating group tables: done                           
Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

[root@centos test1]# mkdir /iscsi_lun1
[root@centos test1]# mount /dev/sdb1 -o _netdev /iscsi_lun1
[root@centos test1]# df -h
Filesystem               Size  Used Avail Use% Mounted on
...생략...
/dev/sdb1                4.8G   20M  4.5G   1% /iscsi_lun1

마지막으로 /etc/fstab에 새로운 디바이스가 마운트되도록 추가해 줍니다.
[root@centos test1]# vi /etc/fstab
...생략...
/dev/sdb1               /iscsi_lun1             ext4    _netdev         0 0
[root@centos test1]#


728x90
반응형