
|
[バックナンバーのトップへ] [Linux システム管理のトップへ] いますぐ実践! Linux システム管理 / Vol.170 / 読者数:1402名こんばんは、うすだです。 というわけで、新しい ThinkPad の威力を痛感する日々を送っています。
とはいえ、よく考えたら、CPUのコア数もクロックも、
メモリもディスクもすべて倍になったのですから、
これで速くなかったら詐欺ですよね。 いままで、古いものを大事にしようと思いながら生きてきましたが、 最新の技術を常に取り入れなければならない技術者の場合、 それはあまりよい考えとは言えないかもしれない、と思うようになりました。 やはり、新しいものを体験し、それを糧にして次の経験に生かす、ということを、 繰り返し行っていくべきではないか、ということです。
…ただ、普段使用するPCがこれだけ速くなったのですから、
仕事の効率もよくなっていくはずなのに、とくに変わっておりません。 直視すべきことに目を背けながら、今回もはりきってまいりますよ! 今回のお題 - iSCSI でリモートマシンのストレージを使う
同じ PC を使っていますと、当然、スペックは年々低下していきます。 CPUの速度もさることながら、やはり大きく見劣りしていくのが、 メモリとディスクの容量ではないでしょうか。 とは言いましても、メモリに関しては、ある程度の上限があり、 上限に到達してしまいますと、それ以上は増やせなくなってしまいます。 ですが、ディスクの場合は、ハード的な制限(大昔では504MBや8GBの壁、 大きくない昔では32GBや128GBの壁というものがありました)があっても、 ネットワークの先にあるファイルシステムを利用することで、 それなりに延命させることができるように思います。 さて、ネットワーク経由でストレージを利用すると言いますと、代表的なのが、 NFS(Network File System)や CIFS(Common Internet File System)でしょうか。 しかし、そういった従来のファイルシステムとは少し異なり、もっとベタに、 直接リモートのファイルシステムを操作するものが、世の中には存在するようです。 そんな中で、最近よく名前を聞くようになった iSCSI を、 今回は試してみたいと思います。 iSCSI とは?
PCなどのコンピュータと周辺機器を接続するためのインターフェースに、
SCSI(Small Computer System Interface) というものがあります。 この SCSI でやりとりされるプロトコルを、SCSIのバスではなく、 TCP/IPに流してしまおう、というのが、iSCSI です。 なんで? という疑問が沸きそうですが、 ネットワークの速度が徐々に向上していくとしたら、 わざわざ専用のバスでやらなくても、ネットワークを使えばいいじゃない、 という発想は、しごくまっとうな気がいたします。 ちなみに、詳細は RFC3720 に記載されています。
RFC3720 で、iSCSI で、ストレージを提供する側を「ターゲット」、 ストレージを利用する側を「イニシエータ」と呼びます。 今回は、Linuxマシンをターゲット、 Windowsマシンをイニシエータとして iSCSI を使用する方法を、 ご紹介したいと思います。 ターゲットの設定 〜 パッケージをインストールするまずは、Linux 側の設定からまいりましょう。
おっとその前に、必要なパッケージをインストールしておきましょう。 # yum install scsi-target-utils (RedHat 系の場合) # apt-get install iscsitarget (Debian 系の場合) ↑あるいは sudo apt-get install iscsitarget
パッケージ名が異なるということは、
ベースになっているモノが異なるということになります。
Linux SCSI target framework (tgt) project かたや、Debian 系は、以下がベースのようです。
iSCSI Enterprise Target ターゲットの設定 〜 RedHat 系の場合
というわけで、肝心の設定は、RedHat 系と Debian 系とで異なります。
それではまず、提供するディスク・イメージを作成しましょう。 # mkdir /usr/local/etc/iscsi # dd if=/dev/zero of=/usr/local/etc/iscsi/test00.img bs=1M \ seek=128 count=1
次に、設定ファイルを記述します。
iSCSIの世界では、IQN(iSCSI Qualified Name)という決まりがあり、
IQN にしたがった名前をつける必要があります。 iqn.年-月.ドメイン名:名前 「年」には西暦を4ケタで、「月」には月を2ケタで、 「ドメイン名」には org.usupi のようにドメインを逆順にした名前を、 「名前」にはディスク・イメージの名前を、それぞれ指定します。 というわけですので、/usr/local/etc/iscsi/test00.img には、 iqn.2009-11.org.usupi:test00 という IQN をつけておこうと思います。
設定ファイルの記述に戻りましょう。
<target iqn.2009-11.org.usupi:test00>
driver iscsi
backing-store /usr/local/etc/iscsi/test00.img
incominguser neuromancer CyBeR_99_SPaCe
initiator-address ALL
</target>
backing-store には、作成したディスク・イメージのパスを指定します。 あ、ちなみに、Windows のイニシエータが、パスワードは12文字以上に! とおっしゃいますので、パスワードは12文字以上にしてください。
設定ファイルを書いたところで、デーモンを起動してみましょう。 # /etc/init.d/tgtd start (すでに起動していたら restart)
[ OK ] などと出力されていましたら、問題なく起動されています。
…特に何もおっしゃいません。
# tgt-admin --dump
<target iqn.2009-11.org.usupi:test00>
driver iscsi
backing-store /usr/local/etc/iscsi/test00.img
incominguser neuromancer PLEASE_CORRECT_THE_PASSWORD
initiator-address ALL
</target>
targets.conf に記述した内容が、そのまま読み込まれていますね。 これで、ようやくイニシエータが接続して使える状態になりました。
デーモンを終了させるには、読み込んだ内容を削除する必要があります。 具体的には、--delete オプションと IQN を指定して、tgt-admin を実行します。 以下に例を示します。 # tgt-admin --delete iqn.2009-11.org.usupi:test00 こうして、tgt-admin --dump で何も出力されなくなったことを確認してから、 デーモンを終了させましょう。 # tgt-admin --dump # /etc/init.d/tgtd stop ターゲットの設定 〜 Debian 系の場合
…ふぅ。お次は、Debian 系の場合です。
まず、提供するディスク・イメージの作成ですが、 これはRedHat系の場合とまったく同じです。…ので、割愛させていただきます。
次に、/etc/ietd.conf の設定です。 Target iqn.2009-12.org.usupi:test00 IncomingUser neuromancer CyBeR_99_SPaCe OutgoingUser Lun 0 Path=/usr/local/etc/iscsi/test00.img,Type=fileio
そして、デーモンを起動します。 # /etc/init.d/iscsitarget start (すでに起動していたら restart) Debian 系の場合は、これで ietd.conf の内容を読み込んでくださいますので、 他になにかする必要はありません。
デーモンを停止する場合も、以下だけですみます。 # /etc/init.d/iscsitarget stop イニシエータの設定ああ、ようやく、Windows 側の設定です。
Windows 用の iSCSI イニシエータは、以下から入手できます。
Microsoft Storage Technologies - iSCSI 上記のページに、iSCSI Software Initiator v2.x というリンクがあると思いますので、 ここをたどってインストールしてください。
インストールしましたら、プログラムなどをたどったり、 デスクトップにある Microsoft iSCSI Initiator を実行したりしてください。
ウィンドウが出てきましたら、Discovery タブにある Add ボタンを押下して、 ターゲットのIPアドレスもしくはホスト名を入力し、OK ボタンを押します。
ここでなにも文句を言われなければ、Targets タブに切り替えます。
ちなみに、当初 iqn.2009-12.org.usupi:iSCSI_test00 という名前にしていましたら、
このあたりで invalid name などと言われてしまいました。 さて、無事 IQN が表示されていましたら、Log On...ボタンを押します。
そして、Advanced ボタンを押して、CHAP logon information にチェックして、 ターゲット側で設定したユーザ名とパスワードを入力します。
入力後、OK ボタンを押しますと、先ほどの IQN の一覧の画面で、 Status が Connected になります。つまり、無事接続できた、ということです。
あとは、ディスクの管理などで、パーティションの作成やフォーマットを行えば、 通常のディスクとして使用できます(できるはずです)。
そして、もし接続を断ちたい場合は、
先のTargetsタブで Details ボタンを押します。
ちなみに、Log On する際、以下にチェックを入れておきますと、 Windows の再起動などの際、自動的に接続してくれます。 Automatically restore this connection when the system boots おわりに以上、iSCSI を使って、リモートマシンのストレージを利用する方法を、 ご紹介しました。 とりあえず設定して使えました、という程度の内容になってしまいましたが、 それでもこの長さ…簡潔に説明できなくて、申し訳ありません。 とはいえ、ちょっと消化不良的ですので、次回も引き続き、 iSCSI を取り上げたいと思っております。(徹底的に不評でしたらやめておきます…。) ちなみに、一つのファイルイメージを、複数のイニシエータが同時に使用しますと、 一方で作成したファイルがもう一方で見えなかったり、下手をすると、 データが壊れているなどと言われて利用できなかったりします。
おそらく、キャッシュによる不整合だと思われますし、
直接SCSIの命令で操作するわけですから、
直観的にもまずそうだという気はいたします。 宿題の答え前回の宿題は、 alien で生成したパッケージの情報を、適切な内容に変更しましょう。 でした。
もともとパッケージになっているものを変換する場合は、
ある程度反映をしてくださいます。 たとえば、tgz をそのまま変換しますと、以下のようになります。
$ fakeroot alien --to-deb usucmd-0.1.tgz
usucmd_0.1-2_all.deb generated
$ dpkg -I usucmd_0.1-2_all.deb
...
Description: Converted tgz package
Converted tgz package
...
Description の欄が、あまりにそっけないですよね。 しかし、--description オプションを使用しますと、Descriptionの欄を変更できます。 以下に例を示します。
$ fakeroot alien --to-deb --description="A test cmd for alien." \
usucmd-0.1.tgz
usucmd_0.1-2_all.deb generated
$ dpkg -I usucmd_0.1-2_all.deb
...
Description: Converted tgz package
A test cmd for alien.
...
上記は1行だけですが、複数行にわたって文章を指定したい場合は、
一旦ファイルに書いて処理すれば、なんとかなります。 $ cat descr.txt << E-O-F > A test cmd for alien. > Please ignore. > E-O-F $ fakeroot alien --to-rpm --description="`cat descr.txt`" \ usucmd-0.1.tgz usucmd-0.1-2.noarch.rpm generated $ rpm -qip usucmd-0.1-2.noarch.rpm ... Description : A test cmd for alien. Please ignore. ... $ rm descr.txt (もう要らなければ) また、バージョンを変更したい場合は、 --version オプションで指定することができます。 さらに、バージョンの最後につく数値を変更するには、 --bump オプションで指定します。以下に、簡単な例を示します。 $ fakeroot alien --to-rpm --version=0.2 usucmd-0.1.tgz usucmd-0.2-2.noarch.rpm generated $ fakeroot alien --to-deb --version=0.2 --bump=7 usucmd-0.1.tgz usucmd_0.2-8_all.deb generated
その他の項目に関しましては、おそらくできないようです。 たとえば、rpm の Group を変更できるようにしてみましたので、 簡単にご紹介したいと思います。 まず、以下のパッチをダウンロードします。 http://www.usupi.org/sysad/170_alien-diff.txt そして、カレントディレクトリに alien をコピーし、 ダウンロードしたパッチを当てます。 $ cp /usr/bin/alien . $ patch -p0 < 170_alien-diff.txt patching file alien 通常では、tgz を rpm に変換すると、Group は以下のようになります。 $ fakeroot ./alien --to-rpm usucmd-0.1.tgz usucmd-0.1-2.noarch.rpm generated $ rpm -qip usucmd-0.1-2.noarch.rpm | grep Group Group : Converted/unknown Source RPM: usucmd-0.1-2.src.rpm ですが、パッチを当てた alien で --group オプションを使用しますと、 以下のように、Group の後半部分を変更することができます。 $ fakeroot ./alien --to-rpm --group=utils usucmd-0.1.tgz usucmd-0.1-2.noarch.rpm generated $ rpm -qip usucmd-0.1-2.noarch.rpm | grep Group Group : Converted/utils Source RPM: usucmd-0.1-2.src.rpm …というわけで、労力のわりには地味な結果しか得られませんでしたが、 一応がんばったという微妙な努力を認めていただけますと幸いです。 今回の宿題今回の宿題は、 USBメモリなど、ホンモノのストレージを iSCSI で扱ってみましょう。 です。 本題ではファイル・イメージをストレージとして使用しましたが、 実際のストレージを iSCSI で扱いたい! ということもあるかもしれません。 特にひねる必要はないはずですので、フツーにお試しくださいませ。 あとがき前回、alien を使って RPM パッケージを扱う際に、 Ubuntu 9.10 で db3 に関するエラーが頻発したということを、書かせていただきました。 具体的には、こういうエラーです。 error: cannot open Name index using db3 - No such file or directory (2) エラー: Name インデックスを db3 でオープンできません - No such \ file or directory (2) すると、読者の方から、strace で追いかけてみては? という的確な助言をいただきました。 あ、ちなみに、strace というのは、引数で指定したコマンドを実行し、 そのコマンドが発行するシステムコールをすべて表示してくれるという、 便利なコマンドです。 で、原因っぽい rpm コマンドを strace 経由で実行してみますと、 一発でわかりました。
$ strace rpm -qa
...
stat64("/var/lib/rpm/Packages", 0xbfd44690) = -1 ENOENT (No such \
file or directory)
...
/var/lib/rpm 以下が空っぽのため、情報が得られなくて困っていただけでした。 わかってしまえば、そんなことかぁといった原因でしたし、 straceだって知っているコマンドでしたが、 それらをつなぎ合わせて解決するには至りませんでした。 というわけで、ご指摘いただいた読者の方に感謝するとともに、 おのれの脳ミソの硬さを痛感した次第です。
しかし、脳ミソの硬さをどうすることもできないのであれば、
外部に頼るという選択をすることも、悪いことではないのかもしれませんね。
さて、今年もまた、あわただしい年末がやってこようとしております。 まあ、なにはともあれ、申し訳ございませんが、今年は、今回で薄幸を…じゃなかった、 発行を終わりにさせていただきたいと存じます。 無事、もろもろのなにかを乗りきり、新年を迎えられた暁には、 iSCSI の続きを取り上げさせていただこうと思います。
今回も、ここまで読んでいただき、誠にありがとうございました。
「いますぐ実践! Linux システム管理」の解除は、以下からできます。
バックナンバーは、こちらにほぼ全部そろっています。
「栗日記」- 12月25日でようやく8周年。まだまだ栗画を描きますよ。 |
▼ トップ ▼ プロフィール ▼ リンク
▼ 作ってみました
▼ せんでん
▼ 最近読んだ本
▼ 気に入ってる本 |