超安価で大容量で最低限の運用に耐えられるストレージを作る必要があったので作りました。作っただけだと勿体無いのでここに記載。予算は30万以内。30万以内で作る2TByte Raid10サーバです。30万以内でHotSwapできるエンクロージャ付き2T Raid10って目茶目茶安いよね??
- 準備編 買ったものを紹介
- Debianへドライバインストール
- WebGUIインストール
- WebGUIからの運用
- iSCSIサーバ側設定
- iSCSIクライアント側設定 Linux編
- iSCSIクライアント側設定 Windows編
- まとめ
準備編 買ったものを紹介
Raidカード
ストレージ
サーバ
Debianへドライバインストール
ドライバダウンロード
ダウンロードはhighpointのwebページから。 今回は、Linuxソースを使う。
例:
#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と競合するのでインストールしない。
以下手順にてインストール
# 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からの操作方法については、マニュアルを見る。(英語だけど。)
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クライアント側設定 MAC編
Macならフリーで提供されているglobalSAN参考にしたサイト