いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! 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/ (モバイル栗日記)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本