日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
GEOM(4) FreeBSD カーネルインタフェースマニュアル GEOM(4)
名称
GEOM -- モジュラディスク I/O 要求変換フレームワーク
書式
options GEOM_BDE
options GEOM_CACHE
options GEOM_CONCAT
options GEOM_ELI
options GEOM_GATE
options GEOM_JOURNAL
options GEOM_LABEL
options GEOM_LINUX_LVM
options GEOM_MAP
options GEOM_MIRROR
options GEOM_MOUNTVER
options GEOM_MULTIPATH
options GEOM_NOP
options GEOM_PART_APM
options GEOM_PART_BSD
options GEOM_PART_BSD64
options GEOM_PART_EBR
options GEOM_PART_EBR_COMPAT
options GEOM_PART_GPT
options GEOM_PART_LDM
options GEOM_PART_MBR
options GEOM_PART_VTOC8
options GEOM_RAID
options GEOM_RAID3
options GEOM_SHSEC
options GEOM_STRIPE
options GEOM_UZIP
options GEOM_VIRSTOR
options GEOM_ZERO
解説
GEOM フレームワークは、上位のカーネルからデバイスドライバまでのパスとその
逆でディスク I/O 要求の変換を実行することができる ``classes'' の基盤を提
供します。
GEOM コンテキストの変換は、RAID アルゴリズムとデバイスマルチパスリ解決上
の典型的なディスクパーティショニングモジュールで実行された簡単なジオメト
リ置換えから格納されたデータの本格的な暗号法の保護に及んでいます。
伝統的な ``ボリューム管理'' と比べて、GEOM は、次の方法で以前のすべての実
装とほとんど異なっています:
• GEOM は、拡張可能です。新しいクラスの変換を書き込むことは明らかに簡単
であり、継承される子供の処理は与えられません。だれかがある理由で IBM
MVS ディスクパックをマウントしたいなら、それらの VTOC 情報を認識して
設定するクラスは、小さい事柄でしょう。
• GEOM は、トポロジ (位相的な) の不可知論者です。ほとんどのボリューム管
理実装には、クラスがどのように一緒に適合することができるかに関する非
常に厳しい概念があります。頻繁に、1 つの固定階層構造は、例えば、サブ
ディスク - plex - ボリューム、を提供されます。
拡張できることは、新しい変換が既存の変換と異なって取り扱われないことを意
味します。
固定の階層構造は、効率的に意図を述べるのを不可能にするので、良くないで
す。上記の固定階層構造では、2 つの物理的なディスクをミラーすることができ
ません、そして、サブディスク中のミラーを区切り、代わりに、はるかに複雑な
設定をもたらす 2 つずつミラーする、1 つの物理的なボリュームで強制的にサブ
ディスクを作ります。他方では、GEOM は、どの順序でこれが行われるかは気にし
ません、唯一の制限は、グラフでの循環が許されないことです。
専門用語とトポロジ
GEOM は、かなりオブジェクト指向で、その結果として、専門用語は、オブジェク
ト指向 (OO) の語彙 (ボキャブラリ) から多くのコンテキストとセマンティクス
(意味論) を借りています:
データ構造 g_class で表される ``class'' は、1 つの特定の種類の変換を実装
しています。典型的な例は、MBR ディスクパーティション、BSD disklabel と
RAID5 のクラスです。
クラスのインスタンスは、``geom'' と呼ばれ、データ構造 g_geom で表されま
す。典型的な i386 FreeBSD システムでは、各ディスクのためのクラス MBR の 1
つの geom があります。
データ構造 g_provider で表される ``provider'' は、geom がサービスを提供す
るフロントゲートです。プロバイダは、``/dev に現れるディスクのようなもの''
- 言い換えれば、論理的ディスクです。すべてのプロバイダには、3 つの主要な
プロパティ (特性) があります: ``name'', ``sectorsize'' と ``size'' です。
``consumer'' は、geom が別の geom プロバイダに接続し、I/O 要求が送信され
るバックドア (裏口) です。
これらの実体の間のトポロジ (位相的な) の関係は、次の通りです:
• クラスには、0 または geom インスタンスがあります。
• geom には、由来する、まさに 1 つのクラスがあります。
• geom には、0 または複数のカスタマがあります。
• geom には、0 または複数のプロバイダがあります。
• カスタマは、0 または 1 つのプロバイダにアタッチすることができます。
• プロバイダは、0 またはアタッチされた複数のカスタマを持つことができま
す。
すべての geom には、検出するために使用され、非循環の有向グラフでループを
防ぐ、ランク番号を割り当てられています。このランク番号は、次のように割り
当てられます:
1. アタッチされたカスタマがない geom は、ランク=1 を持ちます。
2. アタッチされたカスタマがある geom は、アタッチされたカスタマのプロバ
イダの geom の最も高いランクより 1 つ高いランクを持ちます。
特別なトポロジの技術操作
カスタマからプロバイダにアタッチする直接的なアタッチと結び付きを破るデ
タッチに加えて、多くの特別のトポロジの操作が設定を容易にするためと総合的
な柔軟性を改良するために存在しています。
テイスティング (TASTING) は、新しいクラスか新しいプロバイダを作成し、それ
自身のものとして認識するプロバイダで自動的にインスタンスを設定するための
チャンスをクラスに提供するときはいつも、起こるプロセスです。典型的な例と
しては、最初のセクタで MBR テーブルを探す、MBR ディスクパーティションのク
ラスです、見つけられて有効であれば、MBR の内容に従って多重化するために
geom のインスタンスを作成します。
新しいクラスは、順番にすべての既存のプロバイダを提供し、新しいプロバイダ
は、順番にすべてのクラスを提供します。
受け付けるべきであるなら、どのクラスが正確に認識するためには、提供された
プロバイダは、GEOM によって定義されませんが、目的にふさわしいオプションの
組は、次の通りです:
• ディスク上で特定のデータ構造を調べます。
• プロバイダのために ``sectorsize'' または ``mediasize'' のようなプロパ
ティ (特性) を調べます。
• プロバイダの geom のランク番号を調べます。
• プロバイダの geom のメソッド名を調べます。
親がないようにする (ORPHANIZATION) は、それが潜在的にまだ使用されている間
にプロバイダによって取り除かれるプロセスです。
geom がプロバイダを親がないようにするとき、すべての今後の I/O 要求が geom
によって設定されたエラーコードでプロバイダで ``bounce'' (戻り) ます。プロ
バイダにアタッチされた任意のカスタマは、イベントループがそれをうまく避け
るとき、親がないようにすること (orphanization) に関する通知を受信し、そし
て、それらは、その時、適切なアクションを取ることができます。
親のないプロバイダを欠いている間に、機能し続ける方法がない場合、通常の
taste 操作の結果のように出現する geom は、自己破壊すべきです。したがっ
て、ディスクスライサ (disk slicer) のような geom は、自己破壊すべきである
のに対して、RAID5 またはミラーの geom は、それらが定足数を失わない限り、
継続することができます。
プロバイダが親がないようにされるとき、必ずトポロジでのいくらかの即座の変
更で終りません: どんなアタッチされたカスタマもまだアタッチされています。
どんなオープンされたパスもまだオープンしています。どんな未解決の I/O 要求
もまだ未解決のままです。
典型的なシナリオは、次の通りです:
• ディスクを検出するデバイスドライバは、それのためのプロバイダを
死なせて親のない状態にします。
• ディスクの先頭の geom は、親がないようにすること (orphaniza
tion) のイベントを受信し、順番にそれらのすべてのプロバイダを親
のない状態にします。アタッチされていないプロバイダは、通常すぐ
に自己破壊されます。このプロセスは、ツリーのすべての関連断片が
悪いニュースを聞くまで、準再帰的な方法で継続します。
• 結局、それがスタックの先端で geom_dev に達するとき、責任を取り
ます。
• geom_dev は、それ以上の要求が入るのを止めるために
destroy_dev(9) を呼び出します。任意の、そしてすべての未解決の
I/O 要求が返されるまでスリープします。メッシュを通して端から端
まで伝播される変更を明白にクローズします (すなわち、アクセスカ
ウントが 0)。次に、geom をデタッチして破壊します。
• プロバイダが現在デタッチされている geom は、プロバイダを破壊
し、カスタマをデタッチして破壊し、そして、geom を破壊します。
• このプロセスは、クリーンアップが完了するまで、メッシュを通して
端から端まで浸透します。
このアプローチが複雑に見えるとはいえ、それは、見えなくなっているデバイス
の取り扱いにおける最大の柔軟性と堅牢性を提供します。
承知している 1 つの絶対的に重要な詳細は、デバイスドライバがすべての I/O
要求を返さないなら、ツリーは、分解されません。
妨害 (SPOILING) は、古いメタデータから守るために使用される親がないように
すること (orphanization) の特別な場合です。例を体験することによって妨害を
解釈することがたぶん最も簡単です。
ディスクを推測してください。MBR geom は、da0s1 と da0s2 を提供し、その先
頭は、da0 で、BSD geom は、da0s1a から da0s1e を提供する da0s1 の先頭であ
ること MBR と BSD geom の両方は、ディスクメディア上のデータ構造に基づいて
自動設定しました。今度は、da0 が書き込みのためにオープンされる場合、それ
らのデータ構造は、変更されるか、または上書きされる場合を想像してくださ
い。今、そうでなければ、何らかの通知システムがそれらを通知することができ
ないなら、geom は、古いメタデータを操作するようになるでしょう。
この状況を避けるためには、書き込みのために da0 のオープンが起こるとき、す
べてのアタッチされたカスタマは、これに関して通信され、MBR と BSD のような
geoms は、結果として自己破壊されます。da0 が再びクローズされるとき、再び
tasting のためにそれを提供し、そして、MBR と BSD のためのデータ構造がまだ
そこにあるなら、新しい geom は、新たにそれら自体のインスタンスを作成しま
す。
現在の例外規定は、次の通りです:
MBR か BSD モジュールを通してパスのいすれかがオープンされたなら、排他的
ビットレンダリングで下向きにオープンされるでしょう。その場合には、書き込
みのために da0 をオープンすることは不可能で、逆に要求された排他的ビットが
レンダリングされ、書き込みのために da0 がオープンされている間、MBR geom
を通してパスをオープンすることが不可能です。
また、これから、オープンされている geom のサイズを変更することは、それら
の協力でのみ行えることが続きます。
最終的に: spoiling は、書き込みカウントが 0 から非 0 になるときのみ起こ
り、再 tasting (retasting) は、書き込みカウントが非 0 から 0 になるときの
み起こります。
設定 (CONFIGURE) は、特定のクラスがそれ自体のインスタンスを作成するために
管理者が指示を発行するプロセスです。この場合、目的を述べる複数の方法があ
り、- 特定のプロバイダは、例えば BSD disklabel モジュールが TASTE 操作の
間においしさを見つけられなかったプロバイダにアタッチするために、強制的に
上書きのレベルを指定することができます。
最終的に IO は、私たちがこれを行う理由です: それは、それ自体がグラフで
I/O 要求を送信するのに対する懸念です。
I/O 要求 (REQUESTS) は、カスタマに由来して struct bio によって表され、ア
タッチされたプロバイダでスケジュールされ、処理されたとき、カスタマに返り
ます。``反対側で出て来ない'' 特有の geom のプロバイダを通して入る struct
bio を完全に理解することは重要です。MBR と BSD のような簡単な変換でさえ、
struct bio のクローンであり、クローンを変更して、それら自身のカスタマ上で
クローンをスケジュールします。struct bio のクローン作成は、IO 要求で指定
された実際のデータ領域のクローンを必要としないことに注意してください。
合計で 4 つの異なった IO 要求が GEOM に存在しています: 読み込み、書き込
み、削除と ``属性の取得'' です。
読み込み、書き込みは、自明です。
データの特定の範囲は、もはや使われていない、そして基本的な技術サポートと
して削除されるか解放できると示されるものを削除します。フラッシュ適合レイ
ヤ (層) のような技術は、再割り当てようになる前に関連ブロックを消すように
準備することができ、暗号デバイスは、攻撃に利用可能なデータの量を減少させ
るために範囲内にランダムなビットを満たしたいかもしれません。
削除指示が要求されず、そしてその結果、グラフによる特定の geom によって保
証しない場合、データが実際に消されるか、または入手できなくするという保証
がないことを認識することは重要です。``安全な削除'' セマンティクスが要求さ
れるなら、geom は、削除指示を書き込み要求 (のシーケンス) に変換するものを
プッシュするべきです。
``属性の取得'' は、特定のプロバイダかパスで帯域外の属性の検査と操作をサ
ポートします。属性は、ASCII 文字列で指定され、それらについては、下記の別
々のセクションで議論します。
(作者が彼の脳と指を休ませている間、この問題に引き続き注目してください: 将
来もっと書く予定です。)
診断
GEOM 操作のトレースと、kern.geom.debugflags sysctl を通して保護メカニズム
をアンロックするために、いくつかのフラグが準備されています。これらのフラ
グのすべては、デフォルトでオフです、そして、それらをオンにするには、かな
りの注意が必要です。
0x01 (G_T_TOPOLOGY)
トポロジ変更イベントのトレースを提供します。
0x02 (G_T_BIO)
バッファ I/O 要求のトレースを提供します。
0x04 (G_T_ACCESS)
アクセスチェック制御のトレースを提供します。
0x08 (未使用)
0x10 (足の射撃を許可)
Rank1 プロバイダへの書き込みを可能とします。例えば、これで、スー
パユーザが、ルートディスクに MBR 上書きするか、またはマウントされ
たディスクへのほかの場所でランダムなセクタを書き込むことを許しま
す。意味は、明白です。
0x40 (G_F_DISKIOCTL)
これは、今回未使用です。
0x80 (G_F_CTLDUMP)
gctl 要求の内容をダンプします。
関連項目
libgeom(3), DECLARE_GEOM_CLASS(9), disk(9), g_access(9), g_attach(9),
g_bio(9), g_consumer(9), g_data(9), g_event(9), g_geom(9), g_provider(9),
g_provider_by_name(9)
歴史
このソフトウェアは、DARPA CHATS 研究プログラムの一環として、DARPA/SPAWAR
契約 N66001-01-C-8035 (``CBOSS'') の下で Poul-Henning Kamp と NAI Labs,
the Security Research Division of Network Associates, Inc. によって
FreeBSD プロジェクトのために最初に開発されました。
次の時代遅れの GEOM 構成要素は、FreeBSD 13.0 で削除されました:
• GEOM_BSD,
• GEOM_FOX,
• GEOM_MBR,
• GEOM_SUNLABEL と
• GEOM_VOL。
代りに、それぞれ
• GEOM_PART_BSD,
• GEOM_MULTIPATH,
• GEOM_PART_MBR,
• GEOM_PART_VTOC8 と
• GEOM_LABEL
オプションを使用してください。
作者
Poul-Henning Kamp <phk@FreeBSD.org>
FreeBSD 13.2 August 13, 2019 FreeBSD 13.2