くまきち

山と旅と家族が大事。
でも激しい物欲が理性と財布のタガを飛ばす
最近は自転車も乗ってる

FreeNASのiSCSIターゲットで問題

2008-11-13 11:15:33 | SEまわり
 FreeNAS で iSCSI ターゲットを構築。

 一度成功しているサーバのHDDを大容量のに変更して、再度構築。RAID は 1。
 FreeNAS は HDD の第1スライスへ。残り全部をデータ領域に。

 インストール後、管理画面(Web)からディスク追加とマウントポイント (/mnt/data)作成。

 マウントポイント /mnt/data 上に、エクステント extent0 を作成。

 これでiSCSIサービスを起動させた。


 エラー

 …

iscsi-taret:pid 959:iscsi-target.c:145: ***ERROR*** target_init() failed
iscsi-target: pid 959:target.c:1553: ***ERROR*** device_init() failed
iscsi-target: pid 959:disk.c:803:***ERROR*** error opening "/mnt/data"


 エラーメッセージの詳細を調べるため、FreeNAS のソースを取ってこようとするが、利用している 0.686.4 のソース tarball はわかんなかったので、SVN リポジトリからごっそり落としてきた。

 が、残念ながら、そもそも *.c ファイルがほとんど含まれておらず、実は ports/net/iscsi-target を利用していると気付く。

 net/iscsi-target の Makefile から、ソースの位置を見つけて、tarball をダウンロード。 展開。

 やっと、disk.c を発見。


 問題の803行付近。

mode = (tp->flags & TARGET_READONLY) ? O_RDONLY : (O_CREAT | O_RDWR);
if (de_open(&tp->de, mode, 0666) == -1) {
 iscsi_trace_error(__FILE__, __LINE__, "error opening \"%s\"\n", disks.v[disks.c].filename);
 return -1;
}


 たしかにこのエラーメッセージだ。

 関数 de_open は、開こうとする対象がデバイスなのか、エクステントなのかを判別して、それぞれ open() を呼び出しているだけだったので、結局上記メッセージは、「0666 でファイルを開こうとしたけどできなかった」と言うことになる。

 そこで、実際の /mnt/data (実体はファイル)の属性を確認したところ、mode 777 だったので、これを強制的に 0666 に変更してみた。
 その後、サービスを起動させてみるが、エラーメッセージに変化なし。


 さて、どうしたものか…

最新の画像もっと見る