わが家のストレージサーバーはnetatalkとsambaでMac向けWindows向けにファイル共有サービスを動かしているのだけど、もう一つiscsitargetでiSCSIも動かしている。
iscsitargetで指定できるのは/dev/以下のブロックデバイスなので、通常はsda1とかhda2とかのパーティションになる。LVMでiSCSIするためのパーティションを動的に作成するのもいいけどちょっと敷居が高い。
そういえば、LinuxにはLoopback deviceというモノがあったなぁと思いついたので、イメージファイルをLoopback deviceに指定してそのデバイスをiSCSIとして使えるか試してみた。
まずは、イメージファイルをCentOS上で作る。iTunes用のハードディスクにするために250GBのイメージをつくる。
# dd if=/dev/zero of=./iTunes.img bs=1GB count=250
次に/dev/loop0に作ったイメージファイルをloop deviceに関連づける。
# losetup /dev/loop0 /mnt/storage4/loop_img/iTunes.img
これで下準備はOK。
iscsitargetの設定ファイルietd.confに以下のようなターゲットを指定してみる。
Target iqn.2010-05.jp.dip.talkabout:iTunes
Lun 0 Path=/dev/loop0,Type=fileio
Alias iTunes
iscsitargetを再起動。
# /etc/init.d/iscsi-target restart
これで、Mac OS X側からglobalSAN iSCSI initiator for Mac OS Xを使ってコネクトしてみるとちゃんと認識した。ディスクユーティリティでHFS+にフォーマットすれば外付けドライブと同じように使える。
この方法なら、パーティション切ったりしないで済むので一時的にファイルを逃がしたりするのに便利。
不要になった場合には、iscsitargetを止めてlosetupコマンドで関連付けを外す。
# /etc/init.d/iscsi-target stop
# losetup -d /dev/loop0
再起動するとloop deviceの関連づけは消えちゃうので、/etc/rc.localやっつけですが、以下のコマンドを書いておきました。
losetup /dev/loop0 /mnt/storage4/loop_img/iTunes_Anime.img
/etc/init.d/iscsi-target restart
今回netatalkを使わなかったのは、仮想的なファイルシステムにファイルをコピーするより、仮想デバイス上の本物のHFS+ファイルシステムの方が、Mac OS X側から見ると自然な気がするから。
最近のコメント