アーカイブ

Archive for 2010年9月

Fedoraで仮想iSCSIターゲットを作る

今までファイルサーバー用途にsambaを使っていましたが遅いのでiSCSIを実験的に導入することに。
iSCSIは「SCSIドライブをネットワーク上に置く」という考え方なので共有には向かない(後述)けれどもどうせWindows1台しかないので関係なし。
今回はiSCSI専用のドライブを用意せず、
/homeの下にイメージファイルを作って仮想ディスクとする
こんな強引な方法でもある程度パフォーマンスが出るすげえ。
0.iSCSIターゲットデーモンのインストール
yum install scsi-target-utils
service tgtd start
chkconfig tgtd on
 
1.ディスクイメージ(空のファイル)を作る
dd if=/dev/zero of=/home/iscsi/disk.img bs=1G count=50
bsとcountは適度に設定。今回は50GBの空ファイルをとりあえずつくる。
実行後hijiriが10分程度固まってびびったのは秘密。
homeに作ったのはたまたまディスクが多かったから。
ファイルシステムは後でwindowsから作ります。
 
2.ターゲットを作る
こんなシェルスクリプトを作っときます。
#!/bin/bash
tgtadm –lld iscsi –op new –mode=target –tid=1 –targetname hijiri
tgtadm –lld iscsi –op new –mode=logicalunit –lun=1 –tid=1 -b /home/iscsi/disk.img
tgtadm –lld iscsi –op bind –mode target –tid 1 -I ALL
なぜシェルスクリプトにしたかというと、これ起動時に毎回実行しなきゃならんらしいので。
一行目はターゲットの作成。複数作る場合はtidをインクリメントし、targetnameを変更します。
二行目はユニットの作成。ここにディスクイメージを指定します。複数のディスクを扱う場合はlunをインクリメントすればいいはず。
今回はファイルを指定していますが普通のディスクデバイスでもok(というか普通はそうする)
論理ボリュームファイルも指定可能。hijiriのファイルシステムを論理ボリュームで構築しなかったことを後悔。
三行目は権限設定。読み書き自由。
これをスーパーユーザーで動かしてみて、問題が起こらないようなら/etc/rc.d/localから呼び出します。
tgtdが上がっていないと失敗するので注意。
 
3.windowsから読んでみる
管理ツールのiSCSI イニシエーターを起動してターゲットにIPアドレスを入れてクイック接続するとつながります。
あとはローカルのドライブのようにパーティションを切ったりフォーマットしたりすれば完成。
 
4.注意点
iSCSIではファイルシステムを理解するのはイニシエータ(クライアント側)なので複数台のコンピュータからマウントするともれなくファイルシステムが吹き飛びます。
(sambaのようにサーバー側がファイルシステムを理解する場合はサーバーが調整してくれるが、iSCSIでは個々が自分専用のドライブと認識するので勝手に書き込んで整合性がとれなくなる。)
ReadOnlyなら理論上大丈夫なはずだけど未検証。
Fedoraから中を見たい場合はiSCSIの接続を切ってからファイル自体をntfsでマウントすれば読める(と思う)
用途としては共有よりもバックアップ的な使い方のほうが向いているかも。
カテゴリー:GNU/Linux