超安価で大容量で最低限の運用に耐えられるストレージを作る必要があったので作りました。作っただけだと勿体無いのでここに記載。予算は30万以内。30万以内で作る2TByte Raid10サーバです。30万以内でHotSwapできるエンクロージャ付き2T Raid10って目茶目茶安いよね??

  1. 準備編 買ったものを紹介
  2. Debianへドライバインストール
  3. WebGUIインストール
  4. WebGUIからの運用
  5. iSCSIサーバ側設定
  6. iSCSIクライアント側設定 Linux編
  7. iSCSIクライアント側設定 Windows編
  8. まとめ

準備編 買ったものを紹介

Raidカード

RocketRAID2322 PCI-Express

rocketraid2322 Raidカード

ストレージ

8Bay HotSwap Enclosure NA-341A

NA-341Aエンクロージャ

サーバ

PowerEdge860

PowerEdge860

Debianへドライバインストール

ドライバダウンロード

ダウンロードはhighpointのwebページから。 今回は、Linuxソースを使う。

highpointのrocketraidドライバページ 例:
#cd /usr/local/src
#wget http://www.highpoint-tech.com/BIOS_Driver/rr232x/Linux/rr232x-linux-src-v1.06-081507-0315.tar.gz
#ls
rr232x-linux-src-v1.06-081507-0315.tar.gz
#tar xvzf rr232x-linux-src-v1.06-081507-0315.tar.gz
#ls
rr232x-linux-src-v1.06 rr232x-linux-src-v1.06-081507-0315.tar.gz 

ドライバのコンパイルに必要なパッケージのインストール

Raidカードを認識するようにする。 Raidカードを860に挿してdebianを起動。この時点では、もちろんdebianは認識しない。まずはコンパイルに必要なパッケージをざっくりと入れる。

例: 今回は linux-image-2.6.17-5-686で実施 各自ここは読替える
#apt-get build-dep build-essential
#apt-get install build-esseintial
→  依存関係にあるもの全てインストール

#apt-get build-dep kernel-package
#apt-get install kernel-package
→  依存関係にあるもの全てインストール

#apt-get build-dep initrd-tools
#apt-get install initrd-tools
→  依存関係にあるもの全てインストール

(linux-image-2.6.18-5-686をインストールしてある事を想定)
# apt-get install linux-headers-2.6.18-5-686
→  カーネルヘッダをインストール

# ls /usr/src/linux-headers-2.6.18-5-686
→  カーネルヘッダが/usr/src以下にあることを確かめる

ドライバコンパイル

ダウンロードしたソースとカーネルヘッダを使ってコンパイル

# cd /usr/local/src/rr232x-linux-src-v1.06
# ls
README  inc  lib  osm  product
#cd /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux
#KERNELDIR=/usr/src/linux-headers-2.6.18-5-686  make
→ KERNELDIRとして、カーネルヘッダがあるディレクトリを指定してmake

#make install  
→  ※ mkinitrdが失敗する場合は、initrd-toolsパッケージをインストール

#ls /lib/modules/2.6.18-5-686/kernel/drivers/scsi/rr232x/rr232x.ko
→  rr232xモジュールが出来ていればOK
→  ※  ( ls -al /lib/modules/`uname -r`/kernel/drivers/scsi/rr232x/rr232x.koでもOK)

注意: READMEにある通り、KERNELDIRを指定しない場合は、

        KERNELDIR=...
           Specify kernel source directory. If not specified the driver will
           use /lib/modules/{kernel-version}/build/ as the default location.
           This option is needed if you have a manually configured kernel
           source tree.

と書いてある事からもわかるように/lib/modules/kernel-version/buildへ読みに行く。ここにカーネルヘッダは無いので必ず、KERNELDIRを指定する事。

以下は実際にコンパイルした時の標準出力

----以下ログ--------------------------------
# KERNELDIR=/usr/src/linux-headers-2.6.18-5-686 make
make[1]: Entering directory `/usr/src/linux-headers-2.6.18-5-686'
  CC [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/os_linux.o
  CC [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/osm_linux.o
  CC [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/div64.o
  CC [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/hptinfo.o
  CC [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/config.o
  LD [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/rr232x.o
  Building modules, stage 2.
  MODPOST
  CC      /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/rr232x.mod.o
  LD [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/rr232x.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.18-5-686'
→ makeここまで

# make install
make[1]: Entering directory `/usr/src/linux-headers-2.6.18-5-686'
  CC [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/os_linux.o
  CC [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/osm_linux.o
  CC [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/div64.o
  CC [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/hptinfo.o
  CC [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/config.o
  LD [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/rr232x.o
  Building modules, stage 2.
  MODPOST
  LD [M]  /usr/local/src/rr232x-linux-src-v1.06/product/rr232x/linux/.build/rr232x.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.18-5-686'
You made a module which is for current kernel 2.6.18-5-686.
Deleting previous installed driver module rr232x...
Install the new driver module...
Updating module dependencies...Done.
Checking for initrd images to be updated...
backup /boot/initrd.img-2.6.18-5-686 to /boot/initrd.img-2.6.18-5-686.rr232x.
→ new driver moduleがインストールされ、module dependenciesがアップデートされ、initrdイメージも作り直される インストールはここまで
---------------------------------------------

ドライバカーネル組込

コンパイルしたドライバをカーネルに組み込む

#modprobe sd_mod
→  (多分、既に組み込まれてると思う)

#modprobe rr232x
→  rr232xが読み込まれる

#lsmod
Module                  Size         Used by
rr232x                   176384   1

→ rr232xが読み込まれていればOK

以下は具体的にmodprobeでrr232xドライバを読み込んだ時の"/var/log/kern.log"を記載

-------ログ iscsi-serverの/var/log/kern.log-------------------------------------------
iscsi-server kernel: rr232x: module license 'Proprietary' taints kernel.
iscsi-server kernel: rr232x:1: RocketRAID 232x controller driver v1.06 (Nov 25 2007 xx:xx:xx)
iscsi-server kernel: ACPI: PCI Interrupt 0000:04:04.0[A] -> GSI 16 (level, low) -> IRQ 169
iscsi-server kernel: rr232x:1: adapter at PCI 4:4:0, IRQ 169
iscsi-server kernel: rr232x:1: start channel [0,0]
iscsi-server kernel: rr232x:1: start channel [0,1]
iscsi-server kernel: rr232x:1: start channel [0,2]
iscsi-server kernel: rr232x:1: start channel [0,3]
iscsi-server kernel: rr232x:1: start channel [0,4]
iscsi-server kernel: rr232x:1: start channel [0,5]
iscsi-server kernel: rr232x:1: start channel [0,6]
iscsi-server kernel: rr232x:1: start channel [0,7]
iscsi-server kernel: rr232x:1: channel [0,0] started successfully
iscsi-server kernel: rr232x:1: channel [0,1] started successfully
iscsi-server kernel: rr232x:1: channel [0,2] started successfully
iscsi-server kernel: rr232x:1: channel [0,3] started successfully
iscsi-server kernel: rr232x:1: channel [0,4] started successfully
iscsi-server kernel: rr232x:1: channel [0,5] started successfully
iscsi-server kernel: rr232x:1: channel [0,6] started successfully
iscsi-server kernel: rr232x:1: channel [0,7] started successfully
iscsi-server kernel: scsi2 : rr232x
iscsi-server kernel: Vendor: HPT       Model: DISK_2_0          Rev: 4.00
iscsi-server kernel: Type:   Direct-Access                      ANSI SCSI revision: 00
iscsi-server kernel: SCSI device sdb: 1249378304 512-byte hdwr sectors (639682 MB)
iscsi-server kernel: sdb: Write Protect is off
iscsi-server kernel: sdb: Mode Sense: 2f 00 00 00
iscsi-server kernel: SCSI device sdb: drive cache: write through
iscsi-server kernel: SCSI device sdb: 1249378304 512-byte hdwr sectors (639682 MB)
iscsi-server kernel: sdb: Write Protect is off
iscsi-server kernel: sdb: Mode Sense: 2f 00 00 00
iscsi-server kernel: SCSI device sdb: drive cache: write through
iscsi-server kernel: sdb: sdb1
iscsi-server kernel: sd 2:0:0:0: Attached scsi disk sdb
----------------------------------------

ディスクのdevice名の確認

ディスクが認識されたが、device名を特定させる必要があるので調べる。もちろん、先ほどのkern.log中にある

iscsi-server kernel: sd 2:0:0:0: Attached scsi disk sdb

sdbから「sdb」である事がわかるがログ以外からも調べる方法として、/sys以下を確認する方法がある

#cd /sys/class/scsi_disk
#cd /sys/class/scsi_device
→  /sys/class/scsi*以下のディレクトリを調査する事で、今回のドライバrr232x経由でのストレージが/dev/sdbであることを突き止める事が出来る

ディスクのmount

ここまで来ればあとはマウントするだけ。今回はxfsファイルシステムで/storageにマウントしてみる

#fdisk /dev/sdb
→ fdiskで適宜partitionを切る
#mkfs.xfs /dev/sdb1
→ xfsファイルシステム作成
#mount -t xfs /dev/sdb1 /storage
→ mountコマンド発行

#mount
/dev/sdb1 on /storage type xfs (rw)

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1             596G  1.1M  596G   1% /storage

→ こんな感じで出ればOK

WebGUIプログラムインストール方法

WebGUIの設定方法について、説明。CLIでも設定できるのであるが、WebGUIとは排他インストールとなってしまうので、運用のし易さから考えて今回は、WebGUIをインストールする。

WebGUIプログラムインストールに必要なパッケージインストール

以下のパッケージが必要なのでインストールする

#apt-get install alien
→  rpm形式でプログラムが提供されるのでalienをインストール

#apt-get build-dep libssl-dev
#apt-get install libssl-dev
→  sslのdeveloper向けパッケージ関連を全てインストール

#apt-get buil-dep openssl
#apt-get install openssl
→ 同じくopensslに必要なパッケージ関連を全てインストール

これでWebGUIのインストール準備は完了

WebGUIプログラムインストール

WebGUIをインストールする。プログラム自体がRPMで提供されているので、debianだとalienの力を借りてインストールする事になる。

該当のページは以下。 このページのWebGUIを取ってくる。普通のGUIだと、GTKが必要になるが確かGTKのVersionが低くてうまく入らない気がした。CLIは前述したように、GUIと競合するのでインストールしない。 WebGUIのダウンロードページ

以下手順にてインストール

# wget  http://www.highpoint-tech.com/BIOS_Driver/HRM/Linux/WebGUI-Linux-v1.4-6-061507.tgz
# tar xvzf WebGUI-Linux-v1.4-6-061507.tgz
# ls hptsvr-https-1.4-6.i586.rpm  hptsvr-https-1.4-6.x86_64.rpm
# alien -i hptsvr-https-1.4-6.i586.rpm
# touch /etc/hptcfg

# vi /etc/hptcfg
rr232x

→  ドライバ名のみを記載する。このhptcfgをhptsvrプログラムは読み込んで、rr232x経由で情報を取得及び操作をする

#/usr/bin/htpsvr
#lsof -i:7402  
→ htpsvrプログラムを実行して、7402番PortがOPENしてればOKになる。

インストール完了

WebGUIからの運用

ブラウザから
https://xxx.xxx.xxx.xxx:7402

でアクセス default id passはマニュアルに記載してあるので確認すること。
実際の画面はこんな感じ

webログインページ

実際にログインすると、web画面から運用できるようになる。webからの操作方法については、マニュアルを見る。(英語だけど。)

web運用ページ

iSCSIサーバ側設定

Targetとして用いるソフトウェア

Targetは「iSCSI Enterprise Target」を使う。 VERSIONは 0.4.15を使用した。HPは以下になる。

(注) 事前にカーネルソースヘッダを落としておく Kernelは 2.6.14以降であること debian etchであれば、2.6.18なのでOK
カーネルソースヘッダが無い場合は、以下コマンドで入力しておくこと。起動させたいカーネル名に合わせてヘッダも変更しておくこと。

#aptitude install linux-headers-2.6.18-5-686

iSCSI Enterprise Target コンパイル

残念な事にetch main ラインにはパッケージが用意されていないので、ソースからインストールします。まずは、ソースをダウンロード。 READMEを見ると以下のように書いてあるので、debianでのlinux-headerを入れてある/usr/src以下である事を考慮して以下のように設定

READMEより

The iSCSI target consists of a kernel module (iscsi_trgt.ko) , daemon
(ietd) and control utility (ietadm).
訳:  iSCSIターゲットは iscsi_trgt.koモジュール、ietdデーモン、ietadmコントロールユーティリティ
     (iSCSIターゲットの設定ツール)からなる

Compilation of the kernel module, daemon and control utility should
require nothing more than a:
訳:  カーネルモジュール、デーモン、ユーティリティのコンパイルはmakeコマンド
     のみを要求する

        make (今回はdebianヘッダを指定したいので、makeのみは打たない)

If you have multiple kernel sources installed and wish to target
the make for a particular source, you would issue:
訳:  複数のカーネルソースを持っていて、ターゲットを絞る場合は

        make KSRC=(kernel-src)
        (make KSRC=/usr/src/linux-headers-2.6.18-5-686 を指定)

To install everything, use:
訳:  全てをインストールする場合は以下コマンドを入力

        make [KSRC=(kernel-src)] install
        (make KSRC=/usr/src/linux-headers-2.6.18-5-686 install を指定)

実際のコマンドは以下

# make KSRC=/usr/src/linux-headers-2.6.18-5-686
Applying Patch compat-2.6.14-2.6.18.patch
patching file kernel/iscsi.h
patching file kernel/digest.c
patching file kernel/file-io.c
patching file kernel/iscsi.c
patching file kernel/tio.c
make -C usr
make[1]: Entering directory `/usr/local/src/iscsitarget-0.4.15/usr'
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o ietd.o ietd.c
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o iscsid.o iscsid.c
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o conn.o conn.c
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o session.o session.c
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o target.o target.c
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o message.o message.c
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o ctldev.o ctldev.c
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o log.o log.c
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o chap.o chap.c
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o event.o event.c
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o param.o param.c
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o plain.o plain.c
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o isns.o isns.c
cc ietd.o iscsid.o conn.o session.o target.o message.o ctldev.o log.o chap.o event.o param.o plain.o isns.o -o ietd -lcrypto
cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include   -c -o ietadm.o ietadm.c
cc ietadm.o param.o -o ietadm
make[1]: Leaving directory `/usr/local/src/iscsitarget-0.4.15/usr'
make -C /usr/src/linux-headers-2.6.18-5-686 SUBDIRS=/usr/local/src/iscsitarget-0.4.15/kernel modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.18-5-686'
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/tio.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/iscsi.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/nthread.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/wthread.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/config.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/digest.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/conn.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/session.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/target.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/volume.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/iotype.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/file-io.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/null-io.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/target_disk.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/event.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/param.o
  CC [M]  /usr/local/src/iscsitarget-0.4.15/kernel/block-io.o
  LD [M]  /usr/local/src/iscsitarget-0.4.15/kernel/iscsi_trgt.o
  Building modules, stage 2.
  MODPOST
  CC      /usr/local/src/iscsitarget-0.4.15/kernel/iscsi_trgt.mod.o
  LD [M]  /usr/local/src/iscsitarget-0.4.15/kernel/iscsi_trgt.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.18-5-686'

→ ここまでがコンパイルログ

→ ここからインストール

# make KSRC=/usr/src/linux-headers-2.6.18-5-686 install
install: creating directory `/lib/modules/2.6.18-5-686/kernel/iscsi'
`kernel/iscsi_trgt.ko' -> `/lib/modules/2.6.18-5-686/kernel/iscsi/iscsi_trgt.ko'
depmod -aq
`usr/ietd' ->  `/usr/sbin/ietd'
`usr/ietadm' ->  `/usr/sbin/ietadm'
`etc/initd/initd.debian' ->  `/etc/init.d/iscsi-target'
`etc/ietd.conf' ->  `/etc/ietd.conf'
`etc/initiators.allow' ->  `/etc/initiators.allow'
`etc/initiators.deny' ->  `/etc/initiators.deny'
`doc/manpages/ietadm.8' ->  `/usr/share/man/man8/ietadm.8'
`doc/manpages/ietd.8' ->  `/usr/share/man/man8/ietd.8'
`doc/manpages/ietd.conf.5' ->  `/usr/share/man/man5/ietd.conf.5'
install: creating directory `/usr/share/doc/iscsitarget'
`ChangeLog' ->  `/usr/share/doc/iscsitarget/ChangeLog'
`COPYING' ->  `/usr/share/doc/iscsitarget/COPYING'
`README' ->  `/usr/share/doc/iscsitarget/README'
`README.vmware' ->  `/usr/share/doc/iscsitarget/README.vmware'

→  /lib/module/2.6.18-5-686 以下に iscsi_trgt.koが入る事を確認
→ /etc/ietd.conf がある事を確認

モジュール読み込み

基本的には、/etc/init.d/以下にスクリプトが出来るので、それを使えばモジュールを読み込んでくれる。

# /etc/init.d/iscsi-target stop
Removing iSCSI enterprise target devices: succeeded.
Stopping iSCSI enterprise target service: succeeded.
Removing iSCSI enterprise target modules: succeeded.
# lsmod |grep iscsi_trgt
#
# /etc/init.d/iscsi-target start
Starting iSCSI enterprise target service: succeeded.
# lsmod |grep iscsi_trgt
iscsi_trgt             59740  4

/etc/ietd.conf設定

ietd.confの設定については、TargetのIDとiSCSI Qualified Nameを決める必要ある。

ID
iSCSIサーバでユニークな1以上の整数値
iSCSI Qualified Name
グローバルにユニークである必要があるため、 タイプ識別子「iqn.」、ドメイン取得日、ドメイン名、ドメイン取得者が付けた文字列を付けることになっています(RFC 3720 - Internet Small Computer Systems Interface (iSCSI) (IETF/rfc3720))。

今回は「iqn.2007-12.sakihoko.ru:storage.disk1.sys1.sakihokoru 」にする。その他認証設定、/dev/sdbをiSCSI用ディスク領域として設定するなどをすると、configは以下になる。

/etc/ietd.conf ファイル(今回最小限設定にしている。他設定部分はマニュアルを読むこと) 

IncomingUser iscsiuser  secret
OutgoingUser iscsiuser  secret

Target iqn.2007-12.sakihoko.ru:storage.disk1.sys1.sakihokoru
            Lun 0 Path=/dev/sdb,Type=fileio
            #→  /dev/sdbをiscsiターゲットとして使用する

確認は/proc/net/ietからできる

# ls /proc/net/iet/
session  volume
# cat /proc/net/iet/session
tid:1 name:iqn.2007-12.sakihoko.ru:storage.disk1.sys1.sakihokoru
→ sessionには「iSCSI Qualified Name」が記載されている

# cat /proc/net/iet/volume
tid:1 name:iqn.2007-12.sakihoko.ru:storage.disk1.sys1.sakihokoru
        lun:0 state:0 iotype:fileio iomode:wt path:/dev/sdb
→ volumeには どの領域がiSCSI用として取られているかが記載されている

また、ターゲット側のPortは3260番PortをListenしていればOK

# lsof -i:3260
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
ietd    5617 root    7u  IPv6  73612       TCP *:3260 (LISTEN)
ietd    5617 root    8u  IPv4  73613       TCP *:3260 (LISTEN)

これでサーバ側の準備はOK クライアントの設定に取りかかる。

※ちなみに、ietadmコマンドからでも入力及び設定ができる。

# ietadm --op new --tid=1 --params Name=iqn.2007-12.sakihoko.ru:storage.disk1.sys1.sakihokoru
# ietadm --op new --tid=1 --lun=0 --params Path=/dev/sdb

確認は同じく /proc/net/ietからできる

iSCSIクライアント側設定 Linux編

Open iSCSIインストール

クライアントはイニシエータとも呼ぶ イニシエータ側(クライアント側) はopen-iscsiを使う。こちらはetch main ラインにパッケージが用意されているのでパッケージをインストールする。

#aptitude instlal open-iscsi

Open iSCSI設定

まずは、サーバが見れるかどうかを確認

#iscsiadm -m discovery -t st -p 192.168.10.237
192.168.10.237:3260,1 iqn.2007-12.sakihoko.ru:storage.disk1.sys1.sakihokoru
→   ここで出てくればOK

次にiscsid.confの設定をする。 debianの場合は/etc/iscsiディレクトリと、/etc/iscsid.confファイルの2つが出来るので、まず、/etc/iscsid.confを/etc/iscsiディレクトリ配下に mv する。(何で/etc/以下にiscsid.confが出来るんでしょうね?謎。)

#mv /etc/iscsid.conf /etc/iscsi/iscsid.conf

configファイル設定。 特に設定するところもなく、discoveryの際のusername,passwordを設定すればOK

/etc/iscsi/iscsid.confファイル

node.active_cnx = 1
node.startup = manual
node.session.timeo.replacement_timeout = 120
node.session.err_timeo.abort_timeout = 10
node.session.err_timeo.reset_timeout = 30
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 16776192
node.session.iscsi.DefaultTime2Wait = 0
node.session.iscsi.DefaultTime2Retain = 0
node.session.iscsi.MaxConnections = 0
node.conn[0].iscsi.HeaderDigest = None
node.conn[0].iscsi.DataDigest = None
node.conn[0].iscsi.MaxRecvDataSegmentLength = 65536
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = iscsiuser
discovery.sendtargets.auth.password = secret

iSCSI storage接続

設定も終わったので、接続してみる

iscsiadm --mode node --targetname iqn.2007-12.sakihoko.ru:storage.disk1.sys1.sakihokoru --portal 192.168.10.237 --login

kern.logに以下のように記載されていればOK

debian kernel: scsi1 : iSCSI Initiator over TCP/IP
debian kernel:   Vendor: IET       Model: VIRTUAL-DISK      Rev: 0
debian kernel:   Type:   Direct-Access                      ANSI SCSI revision: 04
debian kernel: SCSI device sda: 312344576 512-byte hdwr sectors (159920 MB)
debian kernel: sda: Write Protect is off
debian kernel: sda: Mode Sense: 77 00 00 08
debian kernel: SCSI device sda: drive cache: write through
debian kernel: SCSI device sda: 312344576 512-byte hdwr sectors (159920 MB)
debian kernel: sda: Write Protect is off
debian kernel: sda: Mode Sense: 77 00 00 08
debian kernel: SCSI device sda: drive cache: write through
debian kernel:  sda: sda1
debian kernel: sd 1:0:0:0: Attached scsi disk sda

あとは、いつもどおりfdiskでパーティション切って、ファイルシステム作成して、mountすればOK

iSCSI storage切断

iSCSI storageを接続したら、切断したいですよね。切断するときは

iscsiadm --mode node --targetname iqn.2007-12.sakihoko.ru:storage.disk1.sys1.sakihokoru --portal 192.168.10.237 --logout

--login から --logout に変更するだけ。

#fdisk /dev/sda
Unable to open /dev/sda

sdaが見えなくなっていればOK これでクライアント側の設定も完了

loginからlogoutまでの流れをコマンドで記載すると以下のようになる。

# iscsiadm --mode node --targetname iqn.2007-12.sakihoko.ru:storage.disk1.sys1.sakihokoru --portal 192.168.10.237 --login
debian:/etc/iscsi# fdisk /dev/sda

Command (m for help): p

Disk /dev/sda: 159.9 GB, 159920422912 bytes
255 heads, 63 sectors/track, 19442 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):
Value out of range.
Partition number (1-4): 1
First cylinder (1-19442, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-19442, default 19442):
Using default value 19442

Command (m for help): p

Disk /dev/sda: 159.9 GB, 159920422912 bytes
255 heads, 63 sectors/track, 19442 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1       19442   156167833+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
#mkfs.xfs /dev/sda1
meta-data=/dev/sda1              isize=256    agcount=16, agsize=2440122 blks
         =                       sectsz=512   attr=0
data     =                       bsize=4096   blocks=39041952, imaxpct=25
         =                       sunit=0      swidth=0 blks, unwritten=1
naming   =version 2              bsize=4096
log      =internal log           bsize=4096   blocks=19063, version=1
         =                       sectsz=512   sunit=0 blks
realtime =none                   extsz=65536  blocks=0, rtextents=0
#mkdir /storage
#mount -t xfs /dev/sda1 /storage
#mount |grep sda1
/dev/sda1 on /storage type xfs (rw)
→ 無事mountされてますね。

#echo "hello storage" > /storage/test1.txt
#cat /storage/test1.txt 
hello storage
→ ちゃんと、ファイルも書けてる。

ログアウトしてみる

#umount /storage/
#iscsiadm --mode node --targetname iqn.2007-12.sakihoko.ru:storage.disk1.sys1.sakihokoru --portal 192.168.10.237 --logout
# fdisk /dev/sda

Unable to open /dev/sda

→ /dev/sdaが開けなくなった。ちゃんとログアウトが出来てる。

ちなみに、サーバ側の設定が見たい時は


# iscsiadm -m discovery -t st -p 192.168.10.237
192.168.10.237:3260,1 iqn.2007-12.sakihoko.ru:storage.disk1.sys1.sakihokoru
→ これでサーバ側のiSCSI Qualified Nameがわかる

# iscsiadm -m discovery -d -t st -p 192.168.10.237
discovery.startup = manual
discovery.type = sendtargets
discovery.sendtargets.address = 192.168.10.237
discovery.sendtargets.port = 3260
discovery.sendtargets.continuous = 0
discovery.sendtargets.send_async_text = 0
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = iscsiuser
discovery.sendtargets.auth.password = ********
discovery.sendtargets.auth.username_in = (empty)
discovery.sendtargets.auth.password_in = (empty)
discovery.sendtargets.timeo.login_timeout = 15
discovery.sendtargets.reopen_max = 5
discovery.sendtargets.timeo.auth_timeout = 45
discovery.sendtargets.timeo.active_timeout = 5
discovery.sendtargets.timeo.idle_timeout = 60
discovery.sendtargets.timeo.ping_timeout = 5
→ これでサーバ側の設定がわかる

iSCSIクライアント側設定 Windows編

米マイクロソフトのダウンロードセンタからiSCSIプログラムをダウンロードしてくる
米マイクロソフトダウンロードセンタ

iSCSIクライアント側設定 MAC編

Macならフリーで提供されているglobalSAN
を使う。

参考にしたサイト