FreeNAS で iSCSI ターゲットを構築。
一度成功しているサーバのHDDを大容量のに変更して、再度構築。RAID は 1。
FreeNAS は HDD の第1スライスへ。残り全部をデータ領域に。
インストール後、管理画面(Web)からディスク追加とマウントポイント (/mnt/data)作成。
マウントポイント /mnt/data 上に、エクステント extent0 を作成。
これでiSCSIサービスを起動させた。
エラー
…
エラーメッセージの詳細を調べるため、FreeNAS のソースを取ってこようとするが、利用している 0.686.4 のソース tarball はわかんなかったので、SVN リポジトリからごっそり落としてきた。
が、残念ながら、そもそも *.c ファイルがほとんど含まれておらず、実は ports/net/iscsi-target を利用していると気付く。
net/iscsi-target の Makefile から、ソースの位置を見つけて、tarball をダウンロード。 展開。
やっと、disk.c を発見。
問題の803行付近。
たしかにこのエラーメッセージだ。
関数 de_open は、開こうとする対象がデバイスなのか、エクステントなのかを判別して、それぞれ open() を呼び出しているだけだったので、結局上記メッセージは、「0666 でファイルを開こうとしたけどできなかった」と言うことになる。
そこで、実際の /mnt/data (実体はファイル)の属性を確認したところ、mode 777 だったので、これを強制的に 0666 に変更してみた。
その後、サービスを起動させてみるが、エラーメッセージに変化なし。
さて、どうしたものか…
一度成功しているサーバの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 に変更してみた。
その後、サービスを起動させてみるが、エラーメッセージに変化なし。
さて、どうしたものか…