iSCSI 설정 · 8 min read · Feb 07, 2026

리눅스에서 iSCSI 환경 설정하기

리눅스에서 iSCSI 환경 설정하기

요즘 iSCSI 기술은 스토리지 세계에서 꽤 인기가 있습니다. 이 문서에서는 하나의 Debian Linux 호스트와 하나의 Netapp Filer로 구성된 iSCSI 데모 환경을 보여줍니다. 이 프로토콜의 가장 중요한 기능을 보여주려고 합니다.

1. iSCSI란?

iSCSI는 TCP/IP 위의 네트워크 스토리지 프로토콜입니다. 이 프로토콜은 SCSI 데이터를 TCP 패킷으로 캡슐화합니다. iSCSI를 사용하면 호스트를 간단한 이더넷 연결(테이프 드라이브)을 통해 스토리지 배열에 연결할 수 있습니다. 이 솔루션은 파이버 채널 SAN보다 저렴합니다(파이버 채널 HBA 및 스위치는 비쌉니다). 호스트 관점에서 사용자는 스토리지 배열 LUN을 로컬 디스크처럼 볼 수 있습니다. iSCSI 장치는 NAS 장치(예: NFS)와 혼동해서는 안 됩니다. 가장 중요한 차이점은 NFS 볼륨은 여러 호스트에서 접근할 수 있지만, 하나의 iSCSI 볼륨은 하나의 호스트에서만 접근할 수 있다는 것입니다. 이는 SCSI 프로토콜과 유사합니다: 일반적으로 하나의 호스트만 하나의 SCSI 디스크에 접근할 수 있습니다(차이점은 클러스터 환경입니다). iSCSI 프로토콜은 IETF(Internet Engineering Task Force)에서 RFC3720 문서에 정의되어 있습니다.

일부 비평가들은 iSCSI가 파이버 채널에 비해 성능이 떨어지고 호스트 머신에서 높은 CPU 부하를 유발한다고 말했습니다. 저는 기가비트 이더넷을 사용할 경우 속도가 충분할 수 있다고 생각합니다. 높은 CPU 부하를 극복하기 위해 일부 공급업체는 iSCSI TOE(TCP Offload Engine)를 개발했습니다. 이는 카드에 내장된 네트워크 칩이 TCP 프레임을 생성하고 계산한다는 것을 의미합니다. 리눅스 커널은 이를 직접 지원하지 않으며 카드 공급업체는 OS에 대한 자체 드라이버를 작성합니다.

가장 중요한 iSCSI 용어:

이니시에이터:

이니시에이터는 iSCSI 클라이언트의 이름입니다. iSCSI 클라이언트는 디스크, 테이프 드라이브, DVD/CD 라이터와 같은 iSCSI 장치에 블록 수준으로 접근할 수 있습니다. 하나의 클라이언트는 여러 iSCSI 장치를 사용할 수 있습니다.

타겟:

타겟은 iSCSI 서버의 이름입니다. iSCSI 서버는 클라이언트에게 자신의 장치(디스크, 테이프, DVD/CD 등)를 제공합니다. 하나의 장치는 하나의 클라이언트에서만 접근할 수 있습니다.

디스커버리:

디스커버리는 이니시에이터를 위한 타겟을 보여주는 과정입니다.

디스커버리 방법:

iSCSI 타겟을 찾는 방법을 설명합니다. 현재 사용 가능한 방법은 다음과 같습니다:

  • 인터넷 스토리지 이름 서비스(iSNS) - 잠재적인 타겟은 하나 이상의 iSNS 서버와 상호작용하여 발견됩니다.
  • SendTargets – 잠재적인 타겟은 디스커버리 주소를 사용하여 발견됩니다.
  • SLP - 서비스 위치 프로토콜(RFC 4018)을 통해 타겟을 발견합니다.
  • 정적 – 정적 타겟 주소가 지정됩니다.

iSCSI 명명:

RFC 문서에서는 iSCSI 이름도 다룹니다. iSCSI 이름은 두 부분으로 구성됩니다: 유형 문자열과 고유 이름 문자열.

유형 문자열은 다음과 같을 수 있습니다:

  • iqn. : iSCSI 자격 이름
  • eui. : eui-64 비트 식별자

대부분의 구현은 iqn 형식을 사용합니다. 우리의 이니시에이터 이름을 살펴보겠습니다: iqn.1993-08.org.debian:01.35ef13adb6d

iqn: iSCSI 자격 이름 주소를 사용합니다.
1993-08: iSCSI 이름에 사용되는 도메인 이름을 취득한 월의 연도입니다.
org.debian: 조직 명명 권한을 정의하는 역 DNS 이름입니다.
01.35ef13adb6d: 이 문자열은 명명 권한에 의해 정의됩니다.

우리의 타겟 이름은 유사합니다(iqn.1992-08.com.netapp:sn.84211978). 차이점은 Netapp 필러의 일련 번호를 포함한다는 것입니다. 두 이름 모두 사용자 편집이 가능합니다(이니시에이터, 타겟). 우리는 타겟과 이니시에이터를 위해 두 개의 IP 주소도 필요합니다.

다음 그림은 우리의 데모 환경을 보여줍니다. 하나의 Debian 호스트가 iSCSI 이니시에이터이며, /dev/sdb 장치를 통해 iSCSI 디스크에 접근합니다. Netapp 필러는 Debian Linux 호스트에 /vol/iscsivol/tesztlun0 디스크 또는 LUN을 제공하는 iSCSI 타겟 장치입니다. iSCSI 세션은 로그인 단계와 데이터 교환 단계로 구성됩니다.

iSCSI 명명 및 계층

2. 다른 유닉스 플랫폼에서의 iSCSI 지원

Cisco iSCSI 드라이버는 가장 초기의 소프트웨어 iSCSI 이니시에이터 구현 중 하나입니다. 이 드라이버는 모든 주요 상용 유닉스 시스템과 그 버전을 지원합니다(HPUX:10.20,11,11i, AIX:4.3.3,5.1,5.2, Solaris: 2.6,7,8,9). 가장 초기 릴리스는 2001년으로 거슬러 올라갑니다. 현재 각 유닉스 공급업체는 자체 드라이버를 구현하고 있으며, 우리는 이러한 드라이버를 조사합니다.

Solaris:

Solaris 10(1/06 릴리스부터)는 iSCSI를 지원합니다. 이니시에이터 드라이버는 다음과 같은 작업을 수행할 수 있습니다:

  • 하나의 타겟에 대한 여러 세션 지원: 이 기능은 하나의 클라이언트가 필요에 따라 하나의 타겟에 대해 더 많은 iSCSI 세션을 생성할 수 있게 하며, 성능을 향상시킵니다.
  • 멀티패스: Solaris Mpxio 또는 IPMP 기능을 통해 타겟에 대한 중복 경로를 생성할 수 있습니다.
  • 2TB 디스크 및 CHAP 인증도 지원됩니다. Solaris 드라이버는 세 가지 디스커버리 방법을 사용할 수 있습니다(SLP는 사용할 수 없습니다). iSCSI 디스크는 포맷 프로그램을 통해 접근할 수 있습니다.

HPUX:

HP는 HP11i v1 OS부터 iSCSI를 지원했습니다. 이 드라이버는 SLP(서비스 위치 프로토콜)를 통해 타겟을 발견할 수 있습니다. 이는 iSCSI 이니시에이터와 타겟이 SLP 디렉토리 에이전트에 자신을 등록한다는 것을 의미합니다. 등록 후 iSCSI 이니시에이터는 디렉토리 에이전트에만 쿼리합니다. HPUX 드라이버는 모든 디스커버리 방법을 구현합니다. CHAP 인증도 구현되어 있으며 OS 멀티패스 도구(PVLinks)도 지원됩니다. HPUX 드라이버는 전송 통계도 제공합니다.

AIX:

5.2부터 AIX는 iSCSI를 지원합니다. 이 드라이버는 정적 타겟 디스커버리만 구현합니다. AIX 멀티패스(MPIO)라고 하는 기능을 사용하여 iSCSI 디스크를 사용할 수 있습니다. CHAP 인증도 지원됩니다.

어떤 드라이버도 iSCSI에서 부팅할 수 있도록 허용하지 않습니다. 이는 드라이버 개발의 다음 단계가 될 수 있습니다.

3. 리눅스에서의 iSCSI 구현

이니시에이터 구현:

Cisco는 리눅스 드라이버도 출시했지만 꽤 오래되었습니다.

Intel iSCSI 구현은 타겟 및 이니시에이터 드라이버와 작업 부하를 생성하기 위한 유용한 도구를 포함합니다.

UNH-iSCSI는 뉴햄프셔 대학교의 이니시에이터 및 타겟 구현입니다.

Open-iSCSI 프로젝트는 가장 최신의 구현입니다. 2.6.11 커널 이상에서 사용할 수 있습니다. 우리는 이 드라이버를 Debian 호스트에서 테스트할 것입니다. 이 드라이버는 커널 모듈과 iscsid 데몬을 포함합니다.

iscsid는 다음 명령으로 시작할 수 있습니다:

/etc/init.d/open-scsi start

iSCSI 작업은 iscsiadm 명령으로 제어할 수 있습니다. 이 명령은 타겟을 발견하고, 타겟에 로그인/로그아웃하며, 세션 정보를 표시합니다.

구성 파일은 /etc/iscsi 디렉토리 아래에 있습니다:

  • iscsid.conf:         iscsi 데몬의 구성 파일입니다. 시작 시 읽힙니다.
  • initiatorname.iscsi:    데몬이 시작 시 읽는 이니시에이터의 이름입니다.
  • nodes 디렉토리:         노드와 그들의 타겟을 포함하는 디렉토리입니다.
  • send_targets 디렉토리: 발견된 타겟을 포함하는 디렉토리입니다.

설치 과정은 꽤 간단합니다. 다음 명령을 입력하세요:

apt-get install open-iscsi

이 드라이버는 현재 Sendtargets 디스커버리 방법을 구현합니다.

타겟 구현:

iSCSI 엔터프라이즈 타겟은 리눅스를 위한 오픈 소스 타겟 구현입니다. Ardis iSCSI 리눅스 구현을 기반으로 하며 2.6.14 커널이 필요합니다.

Openfiler는 꽤 인기 있는 리눅스 NAS 구현이며, 웹 기반 GUI가 있는 리눅스 기반 NAS 소프트웨어를 제공합니다.

많은 다른 회사들이 소프트웨어 기반 상용 iSCSI 타겟 드라이버를 제공합니다(Amgeon, Mayastor, Chelsio).

스토리지 배열 제조업체들도 iSCSI에 대한 네이티브 지원을 제공합니다(EMC, Netapp 등).

우리는 테스트를 위해 Netapp FAS 필러를 선택했지만, 무료 소프트웨어로도 테스트할 수 있습니다. 이 문서 하단에 Openfiler로 이를 수행하는 방법을 보여주는 링크가 있습니다.

4. iSCSI 리눅스 데모 환경 설정하기

우리의 데모 환경은 하나의 Debian Linux 호스트와 하나의 Netapp 필러로 구성됩니다. Debian 호스트는 이니시에이터이고, Netapp 필러는 타겟입니다.

설정 과정은 다음과 같습니다:

  1. Debian과 Netapp 필러 간의 TCP/IP 연결을 설정해야 합니다. 이니시에이터와 타겟은 서로 핑을 보내야 합니다. 우리는 open-iscsi 패키지가 이미 Debian에 설치되어 있다고 가정합니다.
  2. Debian 호스트는 Netapp 타겟을 발견해야 합니다. 이를 “디스커버리” 과정이라고 합니다. 그런 다음 타겟이 타겟 목록을 보냅니다.
  3. 타겟은 이니시에이터가 LUN에 접근할 수 있도록 해야 합니다. Netapp 측에서는 호스트와 LUN 간의 논리적 바인딩인 이니시에이터 그룹을 생성해야 합니다. 이니시에이터 그룹은 LUN과 이 LUN에 접근할 수 있는 하나의 Debian 호스트를 포함합니다.
  4. 이니시에이터가 타겟 목록을 받으면 타겟에 “로그인”해야 합니다.
  5. “로그인” 과정이 성공적으로 완료되고 Netapp 필러가 접근을 허용하면 이니시에이터는 iSCSI 디스크를 일반 디스크처럼 사용할 수 있습니다. 이는 /dev/sdx 장치 아래에 나타나며, 일반 디스크처럼 포맷하고 마운트할 수 있습니다.

자세한 단계는 다음과 같습니다:

  1. 리눅스 호스트에서 Netapp 필러에 핑을 보냅니다:
debian:~# ping nasa

PING nasa (192.168.2.222) 56(84) 바이트의 데이터.

64 바이트가 nasa (192.168.2.222)에서 왔습니다: icmp_seq=1 ttl=255 time=0.716 ms
64 바이트가 nasa (192.168.2.222)에서 왔습니다: icmp_seq=2 ttl=255 time=0.620 ms

성공적입니다.

  1. iscsiadm 명령으로 netapp 필러 iSCSI LUN을 발견합니다. 우리는 st(전송 타겟) 디스커버리 방법을 선택했습니다. 현재 이 드라이버로 구현되어 있습니다:
debian:~# iscsiadm -m discovery -t st -p 192.168.2.222

192.168.2.222:3260을 통해 sendtargets

발견된 타겟을 살펴보겠습니다:

debian:~# iscsiadm -m node

192.168.2.222:3260,1000 iqn.1992-08.com.netapp:sn.84211978

  1. Netapp 측을 준비해야 합니다: 이 예제에서는 하나의 4GB LUN(RAID 그룹의 일부)을 생성하고 이를 Debian 호스트에 할당합니다. 여유 공간을 확인해야 합니다:
nasa> df -k

파일 시스템

사용됨  가용 용량  마운트됨
/vol/vol0/
8388608KB   476784KB
7911824KB       6%  /vol/vol0/
/vol/vol0/.snapshot
2097152KB    10952KB
2086200KB       1%
/vol/vol0/.snapshot
/vol/iscsiLunVol/   31457280KB 20181396KB 11275884KB      64%  /vol/iscsiLunVol/
/vol/iscsiLunVol/.snapshot
0KB
232KB
0KB     —%
/vol/iscsiLunVol/.snapshotunVol/testlun1

다음 명령은 iscsiLunVol 볼륨에 하나의 4GB Lun을 생성합니다:

nasa> lun create -s 4g -t linux /vol/iscsiLunVol/testlun1

확인합니다:

nasa> lun show

/vol/iscsiLunVol/iscsitestlun    7.0g
(7526131200)    (r/w, online, mapped)
/vol/iscsiLunVol/iscsitestlun2    7.0g
(7526131200)   (r/w, online, mapped)
/vol/iscsiLunVol/testlun1      4g
(4294967296)        (r/w, online)

Debian 호스트가 Netapp 호스트에서 보이는지 확인해야 합니다:

nasa> iscsi initiator show

연결된 이니시에이터:
TSIH  TPGroup  이니시에이터
19    1000   debian (iqn.1993-08.org.debian:01.35ef13adb6d / 00:02:3d:00:00:00)

좋습니다, Debian 호스트가 보입니다. 이제 Debian2라는 이니시에이터 그룹을 생성합시다.

nasa> igroup create -i -t linux Debian2 iqn.1993-08.org.debian:01.35ef13adb6d
nasa> igroup show
    Debian2 (iSCSI) (ostype: linux):  
        iqn.1993-08.org.debian:01.35ef13adb6d (로그인됨: e0a)

새로 생성된 Lun을 Debian2 호스트에 할당해야 합니다.

nasa> lun map /vol/iscsiLunVol/testlun1 Debian2

lun map: 자동 할당된 Debian2=2

확인 명령:

nasa> lun show -v

/vol/iscsiLunVol/testlun1      4g
(4294967296)    (r/w, online, mapped)
일련번호: hpGBe4AZsnLV
공유: 없음
공간 예약: 활성화됨
다중 프로토콜 유형: linux
매핑: Debian2=2

  1. 이제 이니시에이터 호스트로 돌아갑니다. 이제 모든 것이 준비되어 4GB lun에 접근할 수 있습니다. 다음 명령은 리눅스 호스트에서 디스크에 접근할 수 있게 합니다.
debian:~#  iscsiadm -m node -T iqn.1992-08.com.netapp:sn.84211978 -p 192.168.2.222:3260 --login

메시지 파일에서 다음 항목을 확인해야 합니다:

debian:~# tail /var/log/messages
Apr 13 00:31:34 debian kernel: scsi: unknown device type 31
Apr 13 00:31:34 debian kernel:   Vendor: NETAPP
모델:
LUN               Rev: 0.2
Apr 13 00:31:34 debian kernel:
Type:
Unknown                            ANSI SCSI revision: 04
Apr 13 00:31:34 debian kernel: Vendor: NETAPP    모델:
LUN               Rev: 0.2
Apr 13 00:31:34 debian kernel:
Type:
Direct-Access                      ANSI SCSI revision: 04
Apr 13 00:31:34 debian kernel: SCSI device sdb: 8388608 512-byte hdwr sectors (4295 MB)
Apr 13 00:31:34 debian kernel: sdb: Write Protect is off
Apr 13 00:31:34 debian kernel: SCSI device sdb: drive cache: write through
Apr 13 00:31:34 debian kernel: sd 1:0:0:2: Attached scsi disk sdb

디스크는 sdb 장치(/dev/sdb)로 나타납니다.

  1. 이를 일반 디스크처럼 사용할 수 있습니다. 파티션을 하나 만들고 쉽게 마운트할 수 있습니다.
debian:~# fdisk /dev/sdb 
debian:~# mkfs /dev/sdb1 ; mount /dev/sdb1 /mnt 

다음 재부팅 후에도 sdb를 사용하려면 다음 항목을 변경해야 합니다:

node.conn[0].startup = manual을 automatic으로 변경

/etc/iscsi/nodes// 파일에서. 변경 후 iSCSI 데몬이 이 타겟에 로그인합니다. 자동 마운트 항목(/dev/sdb1 /mnt)을 /etc/fstab 파일에 추가하는 것은 작동하지 않습니다. 왜냐하면 open-iscsi 데몬이 파일 시스템 마운트보다 늦게 시작되기 때문입니다. 이 문제를 해결하는 간단한 스크립트를 작성할 수 있습니다. 이는 iSCSI 데몬이 시작된 후 자동으로 마운트를 수행합니다.

open-iscsi 이니시에이터 구현은 네트워크 오류를 잘 처리합니다. 이더넷 케이블을 분리하고 다시 연결하면 IO 프로세스를 다시 시작해야 하지만, 재연결은 자동으로 발생합니다.

네트워크 장애에 대한 또 다른 좋은 해결책은 하나의 LUN에 대해 여러 경로를 생성하는 것입니다(예: /dev/sdb, /dev/sdc). 이니시에이터는 두 위치(두 RAID 컨트롤러)에 로그인하고 두 디스크를 리눅스 멀티패스 소프트웨어(dmsetup)를 사용하여 하나의 논리 디스크로 만듭니다.

Netapp 박스에서 테스트할 수 없다면 iSCSI 타겟 구현을 위한 또 다른 대안으로 Openfiler를 추천합니다. 이는 웹 기반 GUI로 관리할 수 있는 무료 리눅스 기반 NAS 소프트웨어입니다.

iSCSI 설정 과정은 다른 유닉스 구현의 경우에도 꽤 유사합니다.

5. 요약 및 결과

iSCSI는 저렴한 재해 복구 사이트에 대한 좋은 솔루션입니다. 재해 복구 사이트에서 비싼 파이버 채널 카드를 구매할 필요가 없으며, 이더넷과 iSCSI를 사용할 수 있습니다. 또한 파이버 채널 호스트 어댑터 없이 호스트를 디스크 배열에 연결하는 데 사용할 수 있습니다(배열이 iSCSI를 지원하는 경우).

테스트 중에 Debian 호스트를 VMware 플레이어 프로그램에서 실행했으며, 내 네트워크 연결은 100 Mbit/s였습니다. 읽기/쓰기 성능이 15 MB/s를 초과할 수 없지만 이는 중요하지 않습니다. 기가비트 이더넷을 사용하면 훨씬 더 나은 성능을 얻을 수 있으며, 유일한 단점은 CPU 부하가 증가한다는 것입니다(CPU는 TCP 프레임을 생성하고 계산해야 합니다).

여기 내 간단한 홈페이지가 있습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.