2009年5月7日木曜日

NetBSDでiSCSI Targetを構築する。その1 Target構築編

NetBSDはiSCSIのTargetソフトウェアが標準で搭載されている。VMware ESXiやWindowsのInitiatorと組み合わせるとものすごい幸せになれるので構築してみた。
今回は、ddで作成されたファイルをターゲットとして公開し、Windows Server 2008のイニシエーターでマウントしてフォーマットするところまでを紹介する。環境の構築手順はとても簡単だ。
  1. NetBSDマシンでiSCSIターゲットを構成する
  2. NetBSDマシンでiSCSIターゲットを起動する
  3. クライアントマシン(例としてWindows Server 2008 SP1)でターゲットをマウントする。
  4. クライアントマシンでターゲットをフォーマット
NetBSDではiSCSIターゲットが標準でインストールされており、その詳細はiscsi-target(8)とtargets(5)でmanを見る事ができる。iscsi-targetは少し前にはpkgsrc/devel/netbsd-iscsiとして公開されていたがいつのまにか本家にマージされていた。私の記憶が正しければ、実装は元々WASABI Systemが行なっていて、NetBSDプロジェクトに寄贈したんじゃなかったかと。2005年くらいには実装が終了していたような気がするので、割と安心して使用する事ができる。

iscsi-targetの設定は設定ファイルベースで行なわれる。設定ファイルのデフォルトの場所は、/etc/iscsiとなっており、サンプルとしてtargetsとauthsの2つのファイルが保存されている。targetsはiSCSIターゲットとして公開するファイル(またはデバイス)を記載し、authsはターゲットにアクセスする際のユーザー名とパスワードを記載する。

まずはiSCSIターゲットとして公開したいディスクイメージファイルを作成する。ここではファイル名を/iscsi-targets/testとし、ファイルサイズを500Mbyteとした。
$ dd if=/dev/zero of=/iscsi-targets/test bs=1024k count=500
作成が終了したらls -l でファイルの大きさを確認しておく。ファイルの大きさをtargetの設定ファイルに記述する必要があるためだ。
ls -l /iscsi-targets/test
-rw-r--r-- 1 root wheel 524288512 May 7 09:54 /iscsi-targets/test
次に、/etc/iscsi/targetsファイルを編集する。targetsファイルには以下の2行を追加する。
extent0 /iscsi-targets/test 0 524288512
target0 rw extent0 192.168.55.0/24
extent0の行には公開するファイルとそのファイルの開始位置と終了位置を記載する。オフセットを適切に指定する事によって、1つのファイル(やデバイス)を複数のextentとして構成する事ができる。今回は1つのファイルを1つのextentとしている。このため、offset は0となり、sizeは524288521となる。target0の行には公開するターゲットの名前とモード、ターゲットに対応するextentとtargetを公開するサブネットを記載する。
ここで注意するのは、extent0の行は"extent + numner"で表記されなければならず、hoge0などの勝手な名前は拒否される。同様にtargetの行も"target + number"の形式で表記する必要がある。

次にiSCSIターゲットを起動する。iSCSIターゲットの起動スクリプトは/etc/rc.d/iscsi-targetに保存されている。システム起動時に自動的に起動したい場合は、以下のようにrc.confに1行を追加しておく。
echo "iscsi-target=YES" >> /etc/rc.conf
次に、iSCSIターゲットを起動する。
bash-4.0# /etc/rc.d/iscsi_target start

iSCSIターゲットが正常に起動すると、以下のようにメッセージが表示される。
iscsi_target not running? (check /var/run/iscsi-target.pid).
Starting iscsi_target.
Reading configuration from `/etc/iscsi/targets'
target0:rw:192.168.55.0/24
extent0:/iscsi-targets/test:0:524288512
DISK: 1 logical unit (1024000 blocks, 512 bytes/block), type iscsi fs
DISK: LUN 0: 500 MB disk storage for "target0"
TARGET: TargetName is iqn.1994-04.org.netbsd.iscsi-target
ここで、注目するのはTARGET:の行で、これがこのターゲットを識別するための物となる。実際にターゲットをマウントする際はLUNと連結し、「iqn.1994-04.org.netbsd.iscsi-target:target0」としてマウントする事になる。

長くなったので今日はここまで。実際にWindows Server 2008を用いてマウントする方法は次回に記載する事にしよう。

0 件のコメント: