いますぐ実践! Linuxシステム管理  RSSを登録する

システム管理者で初心者の方を対象に、実際に試せるシステム管理のノウハウを、お知らせします。Vine,Fedora,Ubuntu,DebianなどLinuxの他に、OpenBSD,FreeBSDなども対象とします。バックナンバーは発行者サイトにて。

最新号をメルマガでお届けします    
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。
2009/12/07

■ いますぐ実践! Linux システム管理 / Vol.170

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ いますぐ実践! Linux システム管理  /  Vol.170  /  読者数:1402名
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

こんばんは、うすだです。

というわけで、新しい ThinkPad の威力を痛感する日々を送っています。

とはいえ、よく考えたら、CPUのコア数もクロックも、メモリもディスク
もすべて倍になったのですから、これで速くなかったら詐欺ですよね。
(といっても、Core 2 Duo 2.26GHz, RAM 1GB, HDD 160GB ですが。)

いままで、古いものを大事にしようと思いながら生きてきましたが、最新
の技術を常に取り入れなければならない技術者の場合、それはあまりよい
考えとは言えないかもしれない、と思うようになりました。

やはり、新しいものを体験し、それを糧にして次の経験に生かす、という
ことを、繰り返し行っていくべきではないか、ということです。

…ただ、普段使用する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
http://www.ietf.org/rfc/rfc3720.txt

で、iSCSI で、ストレージを提供する側を「ターゲット」、ストレージを
利用する側を「イニシエータ」と呼びます。

今回は、Linuxマシンをターゲット、Windowsマシンをイニシエータとして
iSCSI を使用する方法を、ご紹介したいと思います。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ ターゲットの設定 〜 パッケージをインストールする

まずは、Linux 側の設定からまいりましょう。

おっとその前に、必要なパッケージをインストールしておきましょう。
RedHat 系の貴兄は scsi-target-utils というパッケージを、Debian 系
の貴兄は iscsitarget というパッケージを、yum や apt-get などで入手
してください。

 ……………………………………………………………………………………
  # yum install scsi-target-utils  (RedHat 系の場合)
  # apt-get install iscsitarget    (Debian 系の場合)
  ↑あるいは sudo apt-get install iscsitarget
 ……………………………………………………………………………………

パッケージ名が異なるということは、ベースになっているモノが異なると
いうことになります。
RedHat 系の場合、以下からパッケージが作成されているようです。

Linux SCSI target framework (tgt) project
http://stgt.berlios.de/

かたや、Debian 系は、以下がベースのようです。

iSCSI Enterprise Target
http://iscsitarget.sourceforge.net/


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ ターゲットの設定 〜 RedHat 系の場合

というわけで、肝心の設定は、RedHat 系と Debian 系とで異なります。
ですので、まずは、RedHat 系の設定手順をご紹介しましょう。
ざっくりと手順を書きますと、以下のようになります。

1. 提供するディスクのイメージの作成
2. /etc/tgt/targets.conf の設定
3. デーモンの起動
4. デーモンの停止


それではまず、提供するディスク・イメージを作成しましょう。
基本的には、空き容量のあるパーティションならどこでもよいと思います
が、ここでは、サイズが 128MB の /usr/local/etc/iscsi/test00.img と
いうファイルを、以下のように作成します。

 ……………………………………………………………………………………
  # 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 をつけておこうと思います。


設定ファイルの記述に戻りましょう。
RedHat の場合、設定ファイルのパスは、/etc/tgt/targets.conf です。
これに、以下のような内容を盛り込みます。
(ちなみに、Fedora 12 には上記ファイルがありませんでしたので、新規
 で作成しました。)

 ……………………………………………………………………………………
  <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 には、作成したディスク・イメージのパスを指定します。
incominguser には、認証に使用するユーザとパスワードを指定します。
initiator-address には、許可するイニシエータのアドレスを指定します
…が、ここでは ALL を指定していますので、制限を設けていません。

あ、ちなみに、Windows のイニシエータが、パスワードは12文字以上に!
とおっしゃいますので、パスワードは12文字以上にしてください。


設定ファイルを書いたところで、デーモンを起動してみましょう。

 ……………………………………………………………………………………
  # /etc/init.d/tgtd start  (すでに起動していたら restart)
 ……………………………………………………………………………………

[ OK ] などと出力されていましたら、問題なく起動されています。
…が、このままですと、/etc/tgt/targets.conf の内容を見てくれません
ので、tgt-admin コマンドで読み込んでもらいます。
tgt-admin を -e オプションつきで実行すると、読み込んでくれます。

 ……………………………………………………………………………………
  # tgt-admin -e
 ……………………………………………………………………………………

ですが…特に何もおっしゃいません。
よくわかりませんので、--dump オプションつきで tgt-admin を実行して
みましょう。

 ……………………………………………………………………………………
  # 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 系とほぼ同じです。

1. 提供するディスクのイメージの作成
2. /etc/ietd.conf の設定
3. デーモンの起動
4. デーモンの停止


まず、提供するディスク・イメージの作成ですが、これはRedHat系の場合
とまったく同じです。…ので、割愛させていただきます。


次に、/etc/ietd.conf の設定です。
RedHat系と同じIQNをつけて、同様の設定をする場合は、以下を追加して
ください。
(以下しか使用しないのであれば、以下だけの内容でも構いません。)

 ……………………………………………………………………………………
  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 イニシエータは、以下から入手できます。
(なんと、Windows 2000 SP4 にも対応していますので、いろんなマシンで
 利用できますね。ありがたいです。)

Microsoft Storage Technologies - iSCSI
http://www.microsoft.com/windowsserver2003/technologies/storage/iscsi/

上記のページに、iSCSI Software Initiator v2.x というリンクがあると
思いますので、ここをたどってインストールしてください。


インストールしましたら、プログラムなどをたどったり、デスクトップに
ある Microsoft iSCSI Initiator を実行したりしてください。

ウィンドウが出てきましたら、Discovery タブにある Add ボタンを押下
して、ターゲットのIPアドレスもしくはホスト名を入力し、OK ボタンを
押します。

ここでなにも文句を言われなければ、Targets タブに切り替えます。
特に問題がなければ、ターゲットで設定したストレージの IQN が項目に
挙がっているはずです。
(前述の例の場合ですと、iqn.2009-12.org.usupi:test00 です。)

ちなみに、当初 iqn.2009-12.org.usupi:iSCSI_test00 という名前にして
いましたら、このあたりで invalid name などと言われてしまいました。
もし同様の現象に遭遇された貴兄は、名前を少し単純にするなどしてみて
ください。

さて、無事 IQN が表示されていましたら、Log On...ボタンを押します。
そして、Advanced ボタンを押して、CHAP logon information にチェック
して、ターゲット側で設定したユーザ名とパスワードを入力します。

入力後、OK ボタンを押しますと、先ほどの IQN の一覧の画面で、Status
が Connected になります。つまり、無事接続できた、ということです。


あとは、ディスクの管理などで、パーティションの作成やフォーマットを
行えば、通常のディスクとして使用できます(できるはずです)。


そして、もし接続を断ちたい場合は、先のTargetsタブで Details ボタン
を押します。
すると、接続中のセッション一覧が表示されますので、そのセッションに
チェックを入れて Log off... ボタンを押してください。

ちなみに、Log On する際、以下にチェックを入れておきますと、Windows
の再起動などの際、自動的に接続してくれます。

  Automatically restore this connection when the system boots


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ おわりに

以上、iSCSI を使って、リモートマシンのストレージを利用する方法を、
ご紹介しました。

とりあえず設定して使えました、という程度の内容になってしまいました
が、それでもこの長さ…簡潔に説明できなくて、申し訳ありません。

とはいえ、ちょっと消化不良的ですので、次回も引き続き、iSCSI を取り
上げたいと思っております。(徹底的に不評でしたらやめておきます…。)

ちなみに、一つのファイルイメージを、複数のイニシエータが同時に使用
しますと、一方で作成したファイルがもう一方で見えなかったり、下手を
すると、データが壊れているなどと言われて利用できなかったりします。

おそらく、キャッシュによる不整合だと思われますし、直接SCSIの命令で
操作するわけですから、直観的にもまずそうだという気はいたします。
いずれにしましても、複数のイニシエータで共有させないほうが無難だと
いうことは、ここに記しておきたいと思います。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 宿題の答え
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

前回の宿題は、

  alien で生成したパッケージの情報を、適切な内容に変更しましょう。

でした。

もともとパッケージになっているものを変換する場合は、ある程度反映を
してくださいます。
しかし、もとが tgz ですと、そっけない情報しか入れてくれません。

たとえば、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行だけですが、複数行にわたって文章を指定したい場合は、一旦
ファイルに書いて処理すれば、なんとかなります。
以下では、descr.txt に書いた内容を、description に指定しています。

 ……………………………………………………………………………………
  $ 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
 ……………………………………………………………………………………

その他の項目に関しましては、おそらくできないようです。
…が、alien に変更を加えることを許していただけるのでしたら、多少の
余地はあるように思います。

たとえば、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 以下が空っぽのため、情報が得られなくて困っていただけ
でした。
root の権限で rpm コマンドを実行しますと、/var/lib/rpm 以下が生成
されて、それ以降はエラーメッセージが出力されなくなりました。

わかってしまえば、そんなことかぁといった原因でしたし、straceだって
知っているコマンドでしたが、それらをつなぎ合わせて解決するには至り
ませんでした。

というわけで、ご指摘いただいた読者の方に感謝するとともに、おのれの
脳ミソの硬さを痛感した次第です。

しかし、脳ミソの硬さをどうすることもできないのであれば、外部に頼る
という選択をすることも、悪いことではないのかもしれませんね。
(大事なのは、自力でなんとかすることではなく、問題を解決することだ
 と思いますので…。)


さて、今年もまた、あわただしい年末がやってこようとしております。
世の中は不況だというのに、お仕事はいっこうに減る気配がありません。
いえ、こんなご時世なのに、クビにせず、仕事とお給料を与えてくださる
会社には、感謝してもしきれない、と言うべきなのかもしれません。

まあ、なにはともあれ、申し訳ございませんが、今年は、今回で薄幸を…
じゃなかった、発行を終わりにさせていただきたいと存じます。

無事、もろもろのなにかを乗りきり、新年を迎えられた暁には、iSCSI の
続きを取り上げさせていただこうと思います。


今回も、ここまで読んでいただき、誠にありがとうございました。
次回は、新年明けた 1月3日(日) の未明にお会いしましょう!
それでは、よいお年をお迎えください。(早いですがー)


「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/    (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」- 12月25日でようやく8周年。まだまだ栗画を描きますよ。
http://www.usupi.org/kuri/     (まぐまぐ ID:126454)
http://usupi.seesaa.net/       (栗日記ブログ)
http://usupi.org/k/            (モバイル栗日記)
最新号をメルマガでお届け
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。
上へ戻る