アドバンスト・ファイルシステム・インプリメンター・ガイドも最終回となりました。今回は、EVMS入門 に引き続き、EVMSのncursesベースの管理ツールであるevmsn を利用する手順を紹介します。
EVMSを触りはじめる場合、予備のハードディスク・ドライブをもってきて、それをシステムに追加するというのが最善の方法です。そうすれば、いまあるデータを危険にさらすことなく、心置きなくパーティションやボリュームの作成や削除を行うことができます。以下では、ちょうどEVMS 1.0.1をサポートしているGentoo Linux Game CD (稿末の参考文献参照) をブートしながら、この方法の手順を追ってみました。CDのブートにはvmware (リンク先は、参考文献 参照) を使用し、仮想PCには、SCSIディスクを1基 (sda) 増設しました。login: プロンプトが表示されたら、Gentoo Linux CDベースから直接立ち上げたシステムにルートとしてログインし、パスワード・プロンプトには単にエンターを入力します。次にevmsn とタイプし、EVMS管理インターフェースのncursesバージョンを始動します。もちろん、既存のEVMSを有効にしたシステムに、新しいハードディスク・ドライブを組み入れるという選択もできます。また、Xを使っているのであれば、GTK+ ベースのEVMS管理インターフェースであるevmsgui を利用してもよいでしょう。evmsn が、ncursesを使ってコンソール上で実行されるのに対して、evmsgui は、もっと現代的なGTK+ ベースのインターフェースを使用しますが、2つのプログラムのインターフェースは、非常に似通っています。片方に慣れれば、それがもう一方にも簡単に応用できるはずです。
それでは、EVMSを使い始めることにしましょう。私は、コンソールを使いますので、evmsn とタイプします。すると、以下のような画面になります。
図1. EVMS管理ツール
画面には、このシステムの唯一のボリュームである/dev/evms/sda が示されています。皆さんのマシンでEVMSを実行させた場合、きっと、他に/dev/evms/???? の行が少なくとも2行表示されることと思います。デバイス・ノード間は、上向き / 下向きの矢印キーで移動できます。
多分、/dev/evms/??? と表示されるこれらのデバイス・ノードが何を意味しているのかわからない方も多いと思います。一見すると、単に /devに含まれるデバイス・ノードのコピーを表しているように見えます。たとえば、/dev/evms/sda は、単に、従来の/dev/sda デバイス・ノードと同じディスクを指しているように見えます。しかし、/dev/evms/ ディレクトリーにデバイス・ノードのコピーを作成するのには、どんな意味があるのでしょうか。答は、EVMSの仕事の1つが、システム上のすべてのボリュームに対して統一的な名前空間を作成することであり、この名前空間を/dev/evms 下に作成しているというわけです。それで、EVMSがsdaを検出し、それをEVMSの名前空間に所属させる必要があることを認識したために、/dev/evms に適当なデバイス・ノードを作成したということです。ここで注意しなければならないのは、devfsを使っていない場合、evms_devnode_fixup プログラムを実行して、/dev/evms の名前空間を更新する必要があるかもしれない、ということです。
ここで、些細なことながら重要だとされていることがもう1つあります。EVMSは、システム上のすべてのストレージ資源を認識はしますが、検出したすべての資源に対して/dev/evms/ のデバイス・ノード項目を作成しない場合もあります。たとえば、私の開発システムは/dev/hde と/dev/hdg の2基のハードディスク・ドライブを装備していますが、それに対応するデバイス・ノード/dev/evms/hde、/dev/evms/hdg は存在しません。/dev/evms/ を調べると、デバイス・ノードには、1番目のハードディスクのブート・パーティションを表すもの (/dev/evms/hde1) しか示されていません。/dev/evms/hde1 が存在し、/dev/evms/hde が存在しないのは、なぜなのでしょうか。結局、EVMSは非常に賢く、hdeとhdgは、それ自体ボリュームとしてセットアップされていないことを認識し、一方で私がhdeとhdgをパーティションで設定していることをEVMSが把握しているのです。また、私がこれらのパーティションを使ってLVM論理ボリュームを作成していることも、EVMSにはわかっています。パーティション /dev/evms/hde2のスペースは、上位のストレージ・オブジェクト用に使用されていますので、EVMSは、デバイス・ノード/dev/evms/hde2 を作成しません。代わりに、EVMSは、私が作成したLVMのボリュームを認識し、/dev/evms/lvm の下に、それらのデバイス・ノードを作成します (リスト1)。
リスト1. /dev/evms/lvm下のデバイス・ノード
$ ls /dev/evms/lvm/*/* -l
brw-rw-rw- 1 root root 117, 2 Dec 31 1969 /dev/evms/lvm/mainvg/root
brw-rw-rw- 1 root root 117, 3 Dec 31 1969 /dev/evms/lvm/raid0vg/swap
brw-rw-rw- 1 root root 117, 4 Dec 31 1969 /dev/evms/lvm/raid0vg/tmplv
|
このことは、EVMSが従っている重要な原理を示しています。すなわち、EVMSは、システム上で検出した最終的な (中間的なものでない) ストレージ・オブジェクトに対するデバイス・ノードだけを作成するということです。EVMSは、これらの最終的なストレージ・オブジェクトのことを、それが実際にディスクであるかパーティションであるかLVM論理ボリュームであるかにかかわらず、「論理ボリューム」と呼んでいます。後述することですが、evmsn やevmsgui といった管理ツールを使用する場合、ストレージ・オブジェクトに対応するデバイス・ノードが/dev/evms/ に表示されるようにするには、明示的にそのストレージ・オブジェクトからEVMSボリュームを作成する必要があります。ストレージ・オブジェクトがボリュームにされるまでは、EVMSは、そのストレージ・オブジェクトが直接使われるのではなく、上位のストレージ・オブジェクトを作成するために使用されるものとみなし、それに対するデバイス・ノードを作成しません。/dev/evms デバイス・ノードが作成される前にボリュームを作成することを明示しておくことで、EVMSは、われわれがmke2fs /dev/evms/foo とタイプして、扱うべきでないデバイス・ノード上にファイルシステムを作成することがないようにします。こうした動作から、/dev/evms/ 下のデバイス・ノードは、すべて、ファイルシステムかスワップ・スペースを保有するか保有する予定であるらしいことを知ることができます。
これは、非常に洗練され、便利で、混乱を起こしにくくする機能ですが、慣れるのに少し時間を要することも事実です。このことをよく確認していただくために、私の開発用ワークステーションでevmsguiを実行したときの画面を示しておきます。この画面からわかるように、私のストレージ資源の中の4つだけがボリュームとして設定されており、すべて、ファイルシステムまたはスワップ用として使用されています。
図2. evmsguiユーティリティー
vmwareによるEVMSの設定に話を戻しましょう。1番目の画面 (図1) を見ると、ディスクが空であるにもかかわらず、/dev/evms/sda がボリュームとして表示されていることがわかります。これは、EVMSで注意すべきもう1つの点です。EVMSは、ディスク上のストレージ資源の有効なタイプを検出することはできませんでしたが、このディスク全体をボリュームとして示すことで、このボリュームを削除 してからでないと、ディスク上のこのストレージを使うことができないようにしています。ディスクは、理論的には、EVMSが認識することのできない重要なデータを含んでいる可能性があります ので、これは非常に好ましい動作です。このような手法を採用することで、EVMSは、ディスクが空であると表示し、管理者に、たとえば、生のFreeBSDボリュームを間違って上書きさせてしまうような危険な動作を防止しています。この点でも、EVMSは洗練されているのですが、一見すると、少し混乱を招きそうな動作です。
もちろん、上の私のシステムでは、/dev/emvs/sda は空であり、それにパーティションを設定する必要があります。そのためには、以下のようにして、/dev/evms/sda ボリュームを破棄する必要があります。まず、/dev/evms/sda を選択した状態で、エンターを入力します。
図3. ボリュームの破棄
すると、図にあるように、サブメニューが現れ、その中で、そのボリュームに関する詳細データの確認、ストレージ・オブジェクトからのボリュームの削除、およびボリュームの破棄を選択することができます。「ボリュームの破棄」と「ストレージ・オブジェクトからのボリュームの削除」には、大きな違いがあります。前者を選択すると、いまあるボリューム (および、そのボリューム下にあるすべてのサブオブジェクト) は、そのベースとなるコンポーネントに還元 (broken down) されます。これに対して、単にボリュームを削除した場合、そのボリュームは破棄されますが、その下のサブオブジェクトには何の変更も加えられません。「削除」と「破棄」の違いは、玉ねぎの層を1つ剥くことと、玉ねぎをまるごとフード・プロセッサーに投げ込むことの違いにたとえることができます。
ただし、上の例では、玉ねぎの層が1つだけなので、どちらを選択しても、同じことになります。私は、「ボリュームを破棄する」ことにしました。これを選択したことを確認し、何かキーを叩くと、ボリューム一覧の画面に戻ります。このアクションの結果、"No logical volumes found" (論理ボリュームがありません) と表示されるようになります。
表示内容が、まったく面白みのないものに変わってしまいましたので、これを変えたいと思います。"4" をキー入力すると、表示内容を選択するためのサブウィンドウが現れます。現在は、"Logical volumes" (論理ボリューム) 表示になっています。そこで、"Available topmost storage objects" (最上位のストレージ・オブジェクト) に移動することにします。これを選択すると、一覧に再びsdaが表示されているのがわかります。しかし、前回のものと違い、ボリュームではなく、ストレージ・オブジェクトとして表示されています。続いて、このストレージ・オブジェクトを選択して、エンター・キーを押すと、sdaから、EVMSや互換ボリュームなど、いろいろなものを作成できることがわかります。
しかし、われわれが行いたいことは、そういうことではありません。sdaからボリュームを作成するというのであれば、最初にevmsn をロードしたときディスク全体を1個のボリュームにしていた状態に逆戻りすることになります。ここでやりたいのは、そういうことではなく、まずパーティションを作成し、その後、それらのパーティションをボリュームに変換するということです。それには、"4" (表示内容の選択) を押し、"Logical disks" (論理ディスク) を選択します。ここのsdaは、論理ディスクとして表示されているものです。もちろん、ストレージ・オブジェクトのsdaと論理ディスクのsdaの間には、大きな違いがあります。ストレージ・オブジェクトとしてのsdaを扱っている場合、sdaをボリュームに変換したり、sdaから上位のストレージ・オブジェクトを構築することができます。一方、ディスクとしてのsdaを扱っている場合、そのディスクをパーティション (EVMSの用語では「セグメント」と呼ばれているもの) に分割することができ、そのパーティションをさらにストレージ・オブジェクトとして使用できるようになります。そうするためには、まずエンター・キーを押してメニューを出し、その中から、ディスクへのセグメント・マネージャーの割り当ての項目を選択します。
図4. セグメント・マネージャーの割り当て
ところで、セグメント がパーティションと同じものであるのなら、セグメント・マネージャー とは何なのだろうと疑問に思われるかもしれません。セグメント・マネージャーというのは、「パーティションの設定方法」あるいはスキーマだと考えることができます。セグメント・マネージャーを選択してやると、EVMSは、ディスクにメタデータを書き込み、マスター・ブート・レコードを作成して、ディスクの残りの領域には、新しいセグメントに使うことのできる「空き領域 (freespace)」のマークを付けていきます。そのようにするための手順としては、まず画面のメニューで "DefaultSegMgr" を選択し、もう一度エンター・キーを押し、さらにスペース・キーを押します。セグメント・マネージャーの受け取り先のオブジェクトとしてsdaを選択します。次に、もう一度エンター・キーを押し、ディスク・タイプとして "Linux" を選択して (他に "OS/2" の選択肢もあります)、エンター・キーを押して作業を進めます。何かキーを押し、さらに "4" (表示内容の選択) を押し、"Disk Segments" を選択して、いま作成した新しいセグメントを確認します (図5)。
図5. 新しいセグメントの作成
これで、このディスクにマスター・ブート・レコードが設けられましたので、EVMSの用語では「セグメント」と呼ばれているパーティションを新たに作成する準備ができました。新しいセグメントを作成すると、sda_freespace1セグメントは、小さくなっていきます。ディスク上の空き領域全部をパーティションに設定すると、sda_freespace1セグメントは完全に消滅します。ハードディスク・ドライブ上のストレージの空きにぴったり対応するようにパーティションのサイズを指定した場合、sda_freespace1が若干残る場合もあります。
そこで、セグメントを作成する手順ですが、sda_freespace1が選択されている状態でエンター・キーを押し、さらに "Create a New Segment" を選択します。次に、DefaultSegMgrプラグインを選択し、スペースを押することでsda_freespace1オブジェクトを使用することを了承し、エンター・キーを押します。次に、ディスクの先頭部分にカーネルを入れておくための小さなブート可能なパーティションを作成します。それには、スペース・キーを2回押し、パーティションのサイズを100 Mバイトにするという意味で "100" とタイプします。そして、Bootableオプションを選択した状態でスペース・キーを2回押して、"Bootable" をTRUEにします。最後に、エンター・キーを押し、新しいパーティションを作成します。以上の手順を繰り返すことで、ファイルシステムやスワップ用に他のパーティションを作成することができます。注意: パーティションを5個以上作成する必要がある場合には、ブート・ボリューム作成後に、"Primary Partition" オプションを反転させてください。また、スワップ・パーティションを作成する場合には、"Partition Type" を "Linux Swap" にしてください。
一番最後に、"sda1"、"sda2"、"sda3" をそれぞれ選択した状態でエンター・キーを押します。すると、"Create Compatibility Volume from the Segment" (セグメントから互換ボリュームを作成) というオプションを示すメニューが現れます。このオプションを選択すると、セグメントは、完全な論理ボリュームを収容したものとなります。すなわち、/dev/evms/ 下にデバイス・ノードが作成されます。また、ここでは互換 ボリュームを作成しましたので、EVMS以外のカーネルでできたシステムをリブートしたとしても、新しいボリュームは使用できることになります。"Create EVMS Volume" (EVMSボリュームの作成) を選択した場合には、そういうことにはなりません。ちなみに、EVMSのバージョン1.1.0以上では、互換ボリュームからEVMSボリュームへの変換、あるいはその逆の変換が可能となっています。
以上、EVMSを使って1個のシステム・ディスクにパーティションを設定しました。画期的な偉業というわけではありませんが、こうした作業を経験しておくと、ストレージ・コンテナー、LVM論理ボリューム、RAIDボリューム、スナップショットなどの便利な機能を構築しようとするときに必要となるEVMSの基礎が理解しやすくなります。もちろん、本稿でこれらの事項を解説するだけの余地はありませんが、来年は、これらEVMSアプリケーションのいくつかを、随時紹介していければと考えております。ですが、まずは、何はともあれ、アドバンスト・ファイルシステム・インプリメンター・ガイドの幕を閉じることといたします。皆さんがこの連載を楽しんでいただけたとすれば幸いです。
- Danielは、EVMSについての最初の解説を、アドバンスト・ファイルシステム・インプリメンター・ガイドの第12回、EVMS入門 (developerWorks、2002年10月) で行っています。
- SourceForgeにあるEVMSプロジェクトの公式の開発ホーム・ページ。このホームページで、たとえば、メーリング・リストに参加したり、EVMSのドキュメントを読むことができます。
-
#evms channel on the freenode (以前のOpen Projects Net) IRCネットワーク。EVMSの何人かの開発者が定期的に #evmsに顔を出しています。
-
VMware は、仮想マシン・ソフトウェア・パッケージです。
-
Gentoo Linux のサイト。
- DanielによるLinuxのSoftware RAIDについての連載記事は以下のとおり。
- 新Linux 2.4カーネルのSoftware RAID、第1回 -- インストール方法と概略の説明 (developerWorks、2001年4月)
- Linux 2.4 Software RAID、第2回 -- 実稼動環境にRAID-1を設定する (developerWorks、2001年5月)
- DanielによるLinuxの論理ボリューム管理について記事は以下のとおり。
- Linux LVMについて学ぶ、第1回 -- 論理ボリューム管理で実現するストレージ管理の魔法 (developerWorks、2001年6月)
- Linux LVMについて学ぶ: 第2回 -- cvs.gentoo.orgのアップグレード (developerWorks、2001年6月)
- developerWorks のLinuxゾーンには、他にもLinux関係の記事が多数掲載されています。
ニューメキシコ州のアルバカーキーに住む Daniel Robbins は、Gentoo プロジェクトのチーフ・アーキテクトであり、かつ Gentoo Technologies, Inc. の CEO であり、かつ Linux Advanced Multimedia Project (LAMP) のよき助言者です。彼は、マクミラン・ブックCaldera OpenLinux Unleashed、SuSE Linux Unleashed、およびSamba Unleashed の著者です。Daniel は、小学校 2 年生のころから曲がりなりにもコンピューターにのめり込み、当時彼は、危険性を潜めたパック・マンのほか、Logo プログラム言語にも初めて出会いました。これで、彼がなぜ、それ以来 SONY Electronic Publishing/Psygnosis のリード・グラフィック・アーティストを務めているかが分かるでしょう。Daniel は、奥さんの Mary(今度の春に出産の予定です)と一緒に時間を過ごすのが楽しいそうです。彼の電子メール・アドレスはdrobbins@gentoo.org です。