2011/05/08 CentOS5.5





iSCSIを使用する

CentOSでiSCSIを設定します。
openSUSEなどに比べるとGUIが乏しいことから、コマンドによる設定を余儀なくされます。
なおWindowsで使用する場合の情報は、別項「WindowsXPでiSCSIデバイスを使用する」を参照してください。


iSCSIターゲットの作成

iSCSIイニシエータの設定
 iSCSI接続の流れ
 iSCSIを接続する
 iSCSIを切断する

iSCSIを接続するとシャットダウンできない
fstabに記述したらiSCSIが利用できなくて起動しない

iSCSIターゲットの作成
iSCSIターゲットの作成は以外と簡単です。
インストールから動作まで、最短、以下のコマンドで動作を開始できます。

#yum install scsi-target-utils ※iscsiではありません
#service tgtd start
#chkconfig tgtd on
#tgt-setup-lun -d /dev/sdb1 -n iscsi-disk 192.168.1.100

言うまでもありませんが、最初の三つはお決まりのコマンドなので実際は最後の一行だけで動作します。

#tgt-setup-lun -d /dev/sdb1 -n iscsi-disk 192.168.1.100
ここでは「/dev/sdb1というパーティション(ブロックデバイス)」に「iscsi-disk」という名前をつけ「192.168.1.100」からのアクセスを許可します。という意味です。
ここでクライアントの許可IPがあるのがポイントです。名前はローカルでの管理用です。


指定できるディスクはブロックデバイスであれば動作するので、USB-HDDやisoイメージはもとより、「dd if=/dev/zero of=/tmp/iscsi.img ibs=1M obs=1M count=1024」などで出力したファイルも仮想ディスクに指定できます。

iSCSIは接続にTCP/UDPの3260を使用するので、このポートがファイアウォールで開放されていればこれだけでクライアントから接続可能です。

すぐに接続試験をしたいのなら、Windowsから接続するのが簡単でしょう。

しかしコマンドによるストレージの開放は一時的な設定で、再起動すると消えてしまいます。
継続的にディスクを提供したい場合は、ストレージの設定をファイルに記述してやる必要があります。

/etc/tgt/targets.conf へ、以下のように記述します。

<target iqn.2001-04.com.localhost-iscsi-disk>
  backing-store /dev/sdb1
  initiator-address 192.168.1.100 #許可アドレス
  write-cache off #書き込みキャッシュのオフ、イニシエータのシャットダウンに影響
  #incominguser iscsiuser iscsi_usr_pass #受信パス
  #outgoinguser iscsiserver iscsi_srv_pass #送信パス
</target>

記述後、tgtdを再起動します。
すでにユーザが接続してきている場合、サービスは普通には停止しません。
「service tgtd forcedstop」で停止する必要があり、起動する場合はstartではなくrestartを用いましょう。

incominguserは受信認証、outgoingserverは送信認証を意味します。
incominguserはクライアントから送られてくる認証、outgoinguserはサーバが送信する認証なので、これはクライアントから見れば逆になり、クライアントのincomingはサーバから送られてくる認証、outcomingはサーバへ送信する認証になります。
ここではコメントアウトしてあるのでiSCSIディスクには認証無しで接続できます。

iSCSIの真のコマンドには、tgtadmコマンドがあります。
しかし一つのコマンドで全てを操作するため、オプションが長く複雑なものになりやすいです。
そのために、もっとフレンドリーなtgt-setup-lunコマンド、tgt-adminコマンドが用意されています。
「tgt-admin -s」コマンドにより、提供状況が表示できます。

tgtadminコマンドやその他の解説について、Stray Penguinさんのページに詳しく解説されています。


iSCSIイニシエータの設定
iSCSIイニシエータの設定は以外と簡単です。
インストールから動作まで、最短、以下のコマンドで動作を開始できます。

#yum install iscsi-initiator-utils
#service iscsid start
#chkconfig iscsid on
#iscsiadm --mode discovery --type sendtargets --portal 192.168.1.34 --login

言うまでもありませんが、最初の三つはお決まりのコマンドなので実際は最後の一行だけで動作します。
ファイアウォールで3260の送信が許可されていることが前提です。

#iscsiadm --mode discovery --type sendtargets --portal 192.168.1.34 --login
サーバへ接続(portal)・サーバのノードを全て登録(sendtarget)・ノード全てへログイン(login)という意味です。
サーバで公開されている全てのノード(ストレージ)へ接続を自動で開始します。


次のコマンドでサーバのストレージを全て開放します。
#iscsiadm --mode discovery --op delete --portal 192.168.1.34 --logout

自動コマンドは一行でやってくれる変わりに、全部
サーバのストレージをクライアント一つで独占しては困る、という場合は直接ストレージを指定するノード指定になります。
ここからは長い戦いです。コマンドの多さにひるまず、順を追っていきます。

iSCSI接続の流れ
iSCSIのディスクを使用するには以下の手順を踏みます。

1 サーバへの接続(ノードの一覧を取得、ローカルのデータベースへ登録)

2 登録ノードへのログイン

3 デバイスへパーティションを作る

4 デバイスをフォーマットする

5 デバイスをマウントする

上記最短コマンドを使用すると、1と2を同時にやってくれます。
3から5は普通のディスク使用までの手順を同様です。

iSCSIからログアウトし、完全に関係を解消するには以下の手順を踏みます。

1 デバイスをアンマウントする

2 登録ノードからのログアウト

3 登録ノードの削除

4 接続サーバの削除

上記の流れに沿って全てのコマンドを丁寧に追っていきます。

iSCSIを接続する
 サーバへ接続・ノード一覧の登録
 接続サーバの一覧表示
 登録ノード一覧表示
 ノードログイン(登録ノードへの一括ログイン)
 ノードログイン(登録ノードへの個別ログイン)
 ログインノード一覧表示
 fdiskでパーティションを設定
 フォーマット
 マウントする
 再起動時に必要な場合、fstabに記述する

iSCSIを切断する
 ログアウト(登録ノードの一括ログアウト)
 ログアウト(登録ノードの個別ログアウト)
 登録ノードの削除 (※discoveryによる一括登録を行った場合は、接続サーバの削除を行う)
 接続サーバの削除

成功結果も合わせて表示します。

iSCSIを接続する
サーバへ接続・ノード一覧の登録
iscsiadm --mode discovery --type sendtargets --portal 192.168.1.34


接続サーバの一覧表示
iscsiadm --mode discovery


登録ノード一覧表示
iscsiadm --mode node


ノードログイン(全ての登録ノードへの一括ログイン)
iscsiadm --mode node --login


ノードログイン(個別の登録ノードへのログイン)
iscsiadm --mode node --targetname iqn.2001-04.com.localhost-iscsi-disk --login


ログインノード一覧表示
iscsiadm --mode session


fdiskでパーティションを設定
fdisk -l


ディスク一覧を表示し、iSCSIデバイスを見つけて選択する
fdisk /dev/sdb
 p パーティション情報の表示
 n 新たに領域を作成
 w 書き込み

フォーマット(コマンドにドットがあることに注意)
mkfs.ext3 /dev/sdb1

マウントする
mkdir /disk
mount -t ext3 /dev/sdb1 /disk

再起動時に必要な場合は、fstabに記述する
/dev/sdb1 /disk ext3 _netdev 1 1

ポイント「_netdev」パラメータ。デバイスのマウントは、iSCSIデーモンの起動より先なのでfstabで指定されたデバイスが見つからないエラーを出力するので、マウントを待機する「_netdev」を設定します。


iSCSIを切断する
アンマウントする
umount /disk

ノードログアウト(全ての登録ノードの一括ログアウト)
iscsiadm --mode node --logout


ノードログアウト(個別の登録ノードのログアウト)
iscsiadm --mode node --targetname iqn.2001-04.com.localhost-iscsi-disk --logout


登録ノードの削除 (※discoveryによる一括登録を行った場合は、接続サーバの削除を行う)
iscsiadm --mode node --op delete --targetname iqn.2001-04.com.localhost-iscsi-disk


接続サーバの削除
iscsiadm --mode discovery --op delete --portal 192.168.1.34



CentOS〜CentOSの環境で、openSUSEと同じ手法で速度を調べると、18〜19MB/sほど。
openSUSE〜openSUSEのときより遅いのが気になります。


これらのコマンドによって設定された情報は、iSCSI用のDBに記録されます。
格納先は、/var/lib/iscsi/ディレクトリのnodesとsend_targetsになります。
したがってコマンドを実行するたび、DBが更新されていくという考えが必要です。
ここでは現在接続されているデバイスの設定情報を更新してみます。

DBの編集(自動ログオンをマニュアルログオンに変更)
iscsiadm --mode node --op update --targetname iqn.2010-09.com.hoge.alpha --name=node.startup --value=manual



iSCSIを接続するとシャットダウンできない
iSCSIイニシエータがターゲットへ接続すると、シャットダウンに失敗し、停止してしまいます。
これはターゲット(サーバ側)で「書き込みキャッシュ」が有効になっている場合、イニシエータ(クライアント側)でシャットダウンに失敗します。


これは、シャットダウンシーケンスでネットワークがすでに切断されているのにiSCSIを同期しようとするからです。
画面上部でネットワークがすでにシャットダウンされています。
画面下部でiSCSIを同期しようとしています。

いろいろ回避策を試してみましたが、結局サーバ側で書き込みキャッシュを無効にするのが一番ラクのようです。
iSCSIターゲット側の設定ファイルでwrite-cacheが記述してあるのはそのためです。
しかしiSCSIアプライアンスや、既存環境など、ユーザの意思でターゲットの設定を変更できるとは限らないので、この辺りは注意が必要です。
それ以外の対処方法としては、やはりStray Penguinさんのページでも紹介されていますが、シャットダウンシーケンスで使用されるスクリプトに変更を加えるよりほかに無いようです。


fstabに記述したらiSCSIが利用できなくて起動しない
fstabにiSCSIを記述した場合、ネットワークがつながっていない、iSCSIサーバがダウンしているなどの理由でiSCSIサーバへ接続できないと、fstabのマウントでエラーが出力され起動できません。

起動の修正モードに入っても、読み取り専用でfstabファイルを編集できません。
こういう時の対処法としては

1 fstabのエラーで「Ctrl+D」を押して修正モードで起動する。
2 「mount -o remount ,rw / 」でルートを再マウントする。
3 fstabの対象の行を修正、保存する。
4 再起動する。

で復旧できます。






prev.gif