新しいファイルシステム・タイプの作成

ファイルシステムの新しいタイプを作成する必要がある場合、 ファイルシステム・ヘルパーとマウント・ヘルパーを作成する必要があります。

この項では、 ファイルシステム・ヘルパーとマウント・ヘルパーの、 インプリメンテーションの詳細および実行構文について説明します。

ファイルシステム・ヘルパー

複数のファイルシステム・タイプのサポートを使用可能にするために、 大部分のファイルシステム・コマンドには、 個別のファイルシステムと通信するコードが入っていません。 その代わりに、コマンドは、特定のファイルシステム・タイプに固有でないパラメーター、 ファイルシステム名、および他の情報を収集してから、 情報をバックエンド・プログラムに渡します。 バックエンドは、関係のあるファイルシステム・タイプに関する特殊な情報を理解し、 ファイルシステムと通信するための詳細な作業を実行します。 ファイルシステム・コマンドが使用するバックエンド・プログラムは、ファイルシステム・ヘルパー およびマウント・ヘルパー と呼ばれます。

適切なファイルシステム・ヘルパーを判別するために、 フロントエンド・コマンドは、 /sbin/helpers/vfstype/コマンド・ファイルの下で、vfstype/etc/vfs ファイルで検出されたファイルシステム・タイプと一致し、 実行中のコマンド名とコマンド が一致するヘルパーを検索します。 フロントエンド・コマンドに渡されたフラグがファイルシステム・ヘルパーに渡されます。

提供する必要がある 1 つの必須ファイルシステム・ヘルパー (fstype と呼ばれる) は、コマンド名と一致しません。 このヘルパーは、指定された論理ボリュームにヘルパーの vfstype のファイルシステムが入っているかどうかを識別するために使用されます。
  • このヘルパーは、論理ボリュームにそのタイプのファイルシステムが入っていない場合には 0 を戻します。 戻り値 0 は、論理ボリュームにログが入っていないことを示します。
  • このヘルパーは、論理ボリュームにそのタイプのファイルシステムが入っていて、 そのファイルシステムがログ用の個別のデバイスを必要としない場合には 1 を戻します。 戻り値 1 は、論理ボリュームにログが入っていることを示します。
  • このヘルパーは、論理ボリュームにそのタイプのファイルシステムが入っていて、 そのファイルシステムがログ用の個別のデバイスを必要とする場合には 2 を戻します。 -l フラグが指定されている場合、fstype ヘルパーは、指定された論理ボリューム上でそのファイルシステムのタイプのログを調べる必要があります。

古いファイルシステム・ヘルパーのメカニズム

この項では、AIX® の以前のバージョンで使用されていた、古いファイルシステム・ヘルパーのメカニズムについて説明します。 このメカニズムはまだ使用可能ですが、もう使用しないでください。

ファイルシステム・ヘルパー操作

次の表は、/usr/include/fshelp.h ファイルでヘルパーに要求できる操作をリストしています。
ヘルパーの操作
#defineFSHOP_NULL 0
#defineFSHOP_CHECK 1
#defineFSHOP_CHGSIZ 2
#defineFSHOP_FINDATA 3
#defineFSHOP_FREE 4
#defineFSHOP_MAKE 5
#defineFSHOP_REBUILD 6
#defineFSHOP_STATFS 7
#defineFSHOP_STAT 8
#defineFSHOP_USAGE 9
#defineFSHOP_NAMEI 10
#define FSHOP_DEBUG 11

ただし、JFS ファイルシステムは以下の操作しかサポートしません。

コマンドに対応する操作値

#define FSHOP_CHECK     1    fsck

#define FSHOP_CHGSIZ    2    chfs

#define FSHOP_MAKE      5    mkfs

#define FSHOP_STATFS    7    df

#define FSHOP_NAMEI     10   ff

ファイルシステム・ヘルパーの実行構文

ファイルシステム・ヘルパーの実行構文は、次のとおりです。

OpName OpKey FilsysFileDescriptor PipeFileDescriptor Modeflags
DebugLevel OpFlags
OpName
プログラムがヘルパーを呼び出す場合に、 arg0 パラメーターを指定します。 OpName フィールドの値は、 プロセスのリストに表示されます (ps コマンドを参照してください)。
OpKey
使用可能なヘルパー操作に対応します。 したがって、OpKey 値が 1 の場合、 fsck (ファイルシステム検査) 操作が要求されています。
FilsysFileDescriptor
プログラムがファイルシステムをオープンしているファイル・ディスクリプターを示します。
PipeFileDescriptor
元のプログラムとヘルパー・プログラムの間でオープンされるパイプに関するファイル・ディスクリプターを示します (pipe サブルーチンを参照してください)。 このチャネルによってヘルパーはフロントエンド・プログラムと通信することができます。

例: ヘルパーはパイプを介してその成功または失敗の表示を送信し、 それはさらにフロントエンド処理に影響を与える可能性があります。 また、デバッグ・レベルが十分に高い場合、 ヘルパーは元のプログラムに送信する追加情報を持っている可能性があります。

Modeflags
ヘルパーの呼び出し方法を示し、 ヘルパーの振る舞いに (特にエラーの報告に関して) 影響を与える可能性があります。 モード・フラグは /usr/include/fshelp.h ファイルに定義されます。
     Flags                                 Indicator   
#define FSHMOD_INTERACT_FLAG                  "i"
#define FSHMOD_FORCE_FLAG                     "f"
#define FSHMOD_NONBLOCK_FLAG                  "n"
#define FSHMOD_PERROR_FLAG                    "p"
#define FSHMOD_ERRDUMP_FLAG                   "e"
#define FSHMOD_STANDALONE_FLAG                "s"
#define FSHMOD_IGNDEVTYPE_FLAG                "I"

例: FSHMOD_INTERACT フラグは、 コマンドが対話式に実行されているかどうかを示します (標準入力上で isatty サブルーチンをテストすることによって判別されます)。 すべての操作がこれらのすべての (またはいずれかの) モードを使用するわけではありません。

DebugLevel
必要なデバッグ情報の量を判別します。デバッグ・レベルが高くなると、 より詳細な情報が戻されます。
OpFlags
操作を実行する実際のデバイス (単数または複数)、 およびフロントエンドによって指定された他のすべてのオプションが組み込まれています。

ヘルパー呼び出しのサンプル

fsck -fp /user のファイルシステム・ヘルパーの実際の呼び出しは次のとおりです。
execl("/etc/helpers/v3fshelpers","fshop_check","1","3","5","ifp",
        "0","devices=/dev/lv02,fast,preen,mounted")
この例で、
  • 実行可能プログラム execd/etc/helper/v3fshelpers です。
  • プロセス (ps コマンド) のリストに表示される名前は fshop_check です。
  • "1" によって表される、要求された操作は FSHOP_CHECK です。
  • ファイルシステムは、 ファイル・ディスクリプター "3" に 関してオープンされています。
  • ヘルパーがフロントエンド・プログラムに情報を送信するためのパイプは、 ファイル・ディスクリプター "5" に関してオープンされています。
  • ModeFlags 文字列 は "-ifp" であり、 interactive モードと force および perror モードを示しています。
  • DebugLevel0 なので、追加のデバッグ出力は fsck コマンドに戻されません。
  • OpFlags 文字列がバックエンド・プログラムに、 操作を実行する対象のデバイス (/dev/lv02)、 要求されたオプション (fast および preen)、およびデバイスのマウントを指示します。 fsck コマンドの場合、fsck コマンドはマウント済みファイルシステムに作用しないので、何の変更も行われません。
ファイルシステム・ヘルパーを呼び出す方法の別の例では、 mkfs コマンドを使用します。 /dev/lv02 という名前の既存の論理ボリューム上で JFS ファイルシステムを作成するには、次のように入力して、マウント・ポイントを作成します。
mkfs /junk
ファイルシステムを作成する必要があり、 ファイルシステムをマウントするデバイスしか知らない場合は、 次のように入力します。
mkfs /dev/lv02
いずれの場合も、次のファイルシステム・ヘルパーが呼び出されます。

execl ("/etc/helpers/v3fshelpers", "fshop_make", "5", "3", "5", "-ip",¥
 "0", "name=/junk,label=/junk,dev=/dev/lv02") 

要求された操作は現在 FSHOP_MAKE です。 モードは interactive および perror です。 OpFlags 文字列には、 マウント・ポイントとデバイスの両方が組み入れられます。

マウント・ヘルパー

mount コマンドは、 特定のファイルシステムと通信するためにヘルパーを使用するフロントエンド・プログラムです。 mount コマンドおよび umount (または unmount) コマンド用のヘルパー・プログラムは、マウント・ヘルパー と呼ばれます。

mount コマンドは、他のファイルシステム固有のコマンドと同様に、コマンド・ラインで指定されたパラメーターとオプションを収集し、その情報を、/etc/filesystems ファイルで検出したファイルシステム構成情報の文脈で解釈します。 このコマンドは、 /etc/filesystems ファイル内の情報を使用して、 関連のあるファイルシステムのタイプに適したマウント・ヘルパーを呼び出します。 例えば、ユーザーが次のように入力すると、mount コマンドは、/etc/filesystems ファイルで、/test ファイルシステムについて記述しているスタンザを検査します。

mount /test

mount コマンドは、 /etc/filesystems ファイルから、 /test ファイルシステムが、 host1 という名前のノードからのリモート NFS マウントであることを判別します。 mount コマンドは、マウントに関連するすべてのオプションも示します。

/etc/filesystems ファイルのスタンザの例は、次のとおりです。

/test:
        dev              = /export
        vfs              = nfs
        nodename         = host1
        options  = ro,fg,hard,intr

ファイルシステム・タイプ (例では nfs) は、 呼び出すマウント・ヘルパーを判別します。 このコマンドは、ファイルシステム・タイプと /etc/vfs ファイルの最初のフィールドを比較します。 一致するフィールドの 3 番目のフィールドにマウント・ヘルパーがあります。

マウント・ヘルパーの実行構文

マウント・ヘルパーの実行構文のサンプルを次に示します。
/etc/helpers/nfsmnthelp M 0 host1 /export /test ro,fg,hard,intr
mountunmount の両方のコマンドには 6 つのパラメーターがあります。 最初の 4 つのパラメーターは両方のコマンドに共通です。
操作
ヘルパーに関して要求された操作を示します。 値は M (マウント操作)、Q (照会操作)、または U (アンマウント操作) のいずれかです。 照会操作は使用しなくなりました。
debuglevel
-D フラグの数値パラメーターを指定します。 mountunmount コマンドは -D フラグをサポートしないので、この値は 0 です。
nodename
リモート・マウントのノードの名前、またはローカル・マウントの null 文字列を指定します。 mount または unmount コマンドは、 nodename パラメーターが null の場合、 マウント・ヘルパーを呼び出しません。
オブジェクト
マウントまたはアンマウントするローカルまたはリモートのデバイス、 ディレクトリー、またはファイルの名前を指定します。 すべてのファイルシステムがすべての組み合わせをサポートするわけではありません。 例えば、大部分のリモート・ファイルシステムはデバイス・マウントをサポートしませんが、 大部分のローカル・ファイルシステムはデバイス・マウント以外をサポートしません。
mount コマンドの残りのパラメーターは、次のとおりです。
マウント・ポイント
オブジェクトをマウントするローカル・ディレクトリーまたはファイルの名前を指定します。
オプション
ファイルシステムに固有のすべてのオプションをコンマで区切ってリストします。 このパラメーターに関する情報は、/etc/filesystems ファイル内の関係のあるスタンザの options フィールドから、またはコマンド・ライン (mount -o Options) 上の -o Options フラグから来ます。 mount コマンドは -r (読み取り専用) フラグも認識し、 このフィールド内の文字列 ro に変換します。

unmount コマンドの残りのパラメーターは、次のとおりです。

vfsNumber
アンマウントの対象のマウントを識別する固有の番号を示します。 固有の番号は、vmount コールによって戻され、 mntctl または stat サブルーチンのコールによって検索することができます。 マウント・ヘルパーの場合、 このパラメーターは、実際にアンマウントを実行する uvmount サブルーチン・コールへの最初のパラメーターとして使用されます。
フラグ
uvmount サブルーチンへの 2 番目のパラメーターの値を示します。 -f フラグを使用してアンマウント操作を強制する場合 (umount -f)、この値は 1 になります。 それ以外の場合、値は 0 です。すべてのファイルシステムが強制アンマウントをサポートするわけではありません。