データ管理アプリケーション・プログラミング・インターフェース

AIX®はデータ管理アプリケーションプログラミングインターフェース(DMAPI)を提供します:これは、The Open Groupによって公開されているX/Open標準 "System Management: Data Storage Management (XDSM) API "の実装です。

DMAPI を使用すると、ソフトウェア・ベンダーは、POSIX 準拠システムにない関数およびセマンティクスのセットを使用して、データ管理アプリケーションを開発することができます。 これは、エンド・ユーザーに機能を直接提供するものではありません。 DMAPI の完全なドキュメンテーションは、 The Open Group の Web サイトの資料セクションにあります。

AIX によって提供される DMAPI は、汎用実装です。 オプションのインターフェースおよび機能に対するサポートのレベルは、基礎となっているファイルシステムのインプリメンテーションによって決定され、特定のファイルシステムの個別のセクションに記述されています。

DMAPI の目的は、任意の 1 つのファイルシステム上で 1 つのプロダクトをサポートすることです。 DMAPI は、同じファイルシステム上に異なるベンダー活動によって異なるプロダクトが提供されることを除外することありませんが、これは推奨されません。 異なるファイルシステム上の異なるプロダクトは、デリバリーに関してでさえ、以下の制約事項に従って、DMAPI によって完全にサポートされます。
  • 複数セッションが、同じオブジェクト上の同じイベントに対して処理を登録することはできない。
  • イベント・メッセージは、セッションを宛先にしてセッションにエンキューされる。特定のプロセスをイベントの明示的宛先にすることはできない。
  • セッションが、マウント・イベント以外の特定のイベントに対して処理を登録しなかった場合は、DMAPI はイベントを生成しないで、プロセスが、あたかもイベントが使用可能にされていないかのように進行することを可能にする。 セッションが、常に使用可能にされる、マウント・イベントに対して処理を登録しなかった場合は、 DMAPI はイベントを失敗させて、ファイルシステムをマウントできないようにする。

DMAPI は、 AIX内の抽象レイヤーに実装されます。これにより、基礎となるすべてのファイル・システムが、その個別レベルのサポートおよび実装オプションを定義することができます。 ジャーナル・ファイルシステム (JFS) ファイルシステムは、DMAPI に対するサポートを提供していません。 X/Open 標準で記述されているインプリメンテーション・オプション、制限、およびその他の特性に関する拡張ジャーナル・ファイルシステム (JFS2) の動作については、 拡張ジャーナル・ファイルシステムに関する DMAPI の考慮事項に概説されています。

dm_init_service関数は、AIXDMAPI が正しく初期化された場合は 0 を返し、初期化に失敗した場合は-1を返す。 初期化が失敗した後で他のどの DMAPI 関数を使用しても、それもまた失敗します。

AIX DMAPI は、以下のオプションの DMAPI 機能をサポートしません。
  • dm_downgrade_right
  • dm_upgrade_right
  • dm_obj_ref_* ファミリー
  • dm_pending
オプションの他のインターフェースは、基礎にあるファイルシステムのインプリメンテーションによってサポートされていないことがあり、サポートされていないインターフェースは、特定のファイルシステムに対して、DMAPI のドキュメンテーションに示されています。

データ管理 (DM) アプリケーションが、権限が使用可能になるまでブロックするように指定した場合は、DM アプリケーションは割り込み不能な状態でブロックされます。

AIX では、複数の重複しない永続管理領域を使用できます。 正規ファイルだけが管理領域を持つことができます。 管理領域が再配列されるか合体されるかどうかは、 基礎にあるファイルシステムのインプリメンテーションによって決定されます。

オブジェクトが有効になっている特定のイベントを受信するためのセッションが登録されていない場合に、イベントをトリガーするアクティビティーが発生すると、 AIX はイベントを生成せず、イベントが有効になっていないかのように処理を進めることができます。

dm_set_eventlist 関数を実行すると、永続イベント・リストがオブジェクトとともに保管されます。 イベント・リストが事前にファイルシステム全体に対して設定されていて、 そのファイルシステム内のオブジェクトに対する後続のイベント・リストが、そのファイルシステムに対して設定されていたイベントを含んでいる場合は、イベントが使用不可にされるまで (その場合、オブジェクトに対するイベント・リストが動作を開始する)、イベントがそのファイルシステムに対するイベント・リストに基づいて生成され続けます。

イベントを生成しているプロセスが、DM アプリケーションからの応答を待ってブロックされている場合は、スリープは割り込み可能です。

AIX は、非同期メッセージ配信のかなり信頼性の高いモデルを採用しています。 未デリバリーの非同期メッセージの数は、システムで構成された使用可能メモリー (実メモリーおよび仮想メモリー) の量によって制限されます。 メッセージの数が使用可能メモリーの量を超えた場合は、未デリバリーの非同期メッセージは失われます。 ネームスペース・イベント・メッセージの非同期デリバリーは、基礎にあるファイルシステムのインプリメンテーションによって決定されます。

AIXの場合、DM_SESSION_INFO_LEN は 256、DM_ATTR_NAME_SIZE は 8 です。

データをユーザー・バッファーに戻し、ユーザー変数に結果のバッファー・サイズを入力する DMAPI インターフェースの場合、 インターフェースが E2BIG 以外のエラーで失敗すると、バッファーの内容とユーザーのサイズ変数の両方は未定義になります。 そのようなエラーの場合、ユーザー・バッファーの内容は無視しなければなりません。 インターフェースが失敗して errno が E2BIG の場合は、ユーザーのサイズ変数の内容は必要なサイズを示すように設定されます。 その場合は、アプリケーションはサイズ変更したバッファーを使用してそのインターフェースを再実行することができます。

拡張ジャーナル・ファイルシステムに関する DMAPI の考慮事項

注: 内部スナップショットは、DMAPI 管理のファイル・システムでは使用できません。

DMAPI の一般的な AIX インプリメンテーションによって提供される機能に加えて、 JFS2 インプリメンテーションは、以下の機能および制約事項を提供します。

dm_get_config 関数は、 JFS2 インプリメンテーション・オプションおよび制限について、以下の値を戻します。
DM_CONFIG_BULKALL
サポートされています。
DM_CONFIG_LEGACY
サポートされています。
DM_CONFIG_PERS_ATTRIBUTES
サポートされています。
DM_CONFIG_PERS_EVENTS
サポートされています。
DM_CONFIG_PERS_INHERIT_ATTRIBS
サポートされています。
DM_CONFIG_PERS_MANAGED_REGIONS
サポートされています。
DM_CONFIG_PUNCH_HOLE
サポートされています。
DM_CONFIG_WILL_RETRY
サポートされています。
DM_CONFIG_CREATE_BY_HANDLE
サポートされていません。
DM_CONFIG_LOCK_UPGRADE
サポートされていません。
DM_CONFIG_OBJ_REF
サポートされていません。
DM_CONFIG_PENDING
サポートされていません。
DM_CONFIG_DTIME_OVERLOAD
はい
DM_CONFIG_MAX_ATTR_ON_DESTROY
128
DM_CONFIG_MAX_ATTRIBUTE_SIZE
4072
DM_CONFIG_MAX_HANDLE_SIZE
32
DM_CONFIG_MAX_MANAGED_REGIONS
167
DM_CONFIG_MAX_MESSAGE_DATA
65536
DM_CONFIG_TOTAL_ATTRIBUTE_SPACE
4072

JFS2 インプリメンテーションでは、すべての DM 属性値は同じ割り当てを共有します。 したがって、いずれの属性値のサイズも DM_CONFIG_MAX_ATTRIBUTE_SIZE を超えることはできず、 さらに、オブジェクトに関連したすべての DM 属性の値のサイズの合計によって制限されます。 この合計もまた、DM_CONFIG_MAX_ATTRIBUTE_SIZE に制限されます。

AIXでサポートされないオプション・インターフェースに加えて、 JFS2 インプリメンテーションは、オプションの DMAPI 取り消しイベントおよびデビュー・イベントも、追加のオプションの dm_getall_dmattrdm_create_by_handle、および dm_symlink_by_handle 機能もサポートしません。

JFS2の拡張属性サポートの現在のインプリメンテーションにより、 dm_set_region 関数によってファイルの ctime が変更されます。 JFS2 は、管理領域を再配列しようとも、また合体しようともしません。

JFS2 は、すべての対応する操作に対して、それらが成功しても失敗しても、非同期ネームスペース・イベント・メッセージを生成します。

JFS2 は、ファイルシステム内のメタデータの事前割り当ておよび直接制御を可能にするインターフェースを提供します。 これらのインターフェースを MM_ALLOC または MM_RECORD モードのいずれかで使用して、指定された相対位置と長さついて DMAPI 書き込みイベントを生成します。

マスクの値が dm_get_bulkalldm_get_bulkattrdm_get_dirattrs、および dm_get_fileattr 関数に指定されていない場合 (つまり、ゼロに設定されている場合)、 JFS2 は dm_stat 構造内のすべてのフィールドを返します。 マスクが特定の値に設定されている場合は、マスクで指定されたフィールドだけが戻されます。マスクで指定されなかったフィールドの値は未定義になります。

JFS2 は、 dm_respond_event 関数の respbufp パラメーターを使用しません。 指定された場合は、バッファーの内容は、関数が戻るとき、未定義にされます。

JFS2 は dm_ctime および dm_dtime を多重定義するため (つまり、DM_CONFIG_DTIME_OVERLOAD が true)、 dm_set_dmattr 関数の setdtime パラメーターは無視されます。

ファイルがメモリー・マップされるとき (つまり、 mmap(2) 呼び出しが実行されるとき)、ファイルの非常駐部分は DM アプリケーションによって常駐にされなければなりません。 マッピングについてアプリケーションに通知するために、JFS2 は、モードおよびマップされる領域に対応する読み取りまたは書き込みイベントを生成します。

JFS2 ファイルシステムでの DMAPI の活動化

JFS2 ファイルシステムで DMAPI を活動化するには、次のように入力します。
chfs -a managed=yes mountpoint

chfs コマンドの発行時にファイル・システムが現在マウントされている場合、 managed パラメーターが設定されているときにマウント・イベントを listen して応答する DMAPI 対応アプリケーションが存在している必要があります。 chfs コマンドの成功は、アプリケーションがマウント・イベントに対してどのように応答するかによって異なります。

JFS2 ファイルシステムで DMAPI を非活動化するには、次のように入力します。
chfs -a managed=no mountpoint

chfs コマンドの発行時にファイル・システムが現在マウントされている場合は、 managed パラメーターが設定されているときに、事前アンマウント・イベントを listen して応答する DMAPI 対応アプリケーションが存在している必要があります。 chfs コマンドが成功するかどうかは、アプリケーションが事前アンマウント・イベントにどのように応答するかによって決まります。

JFS2 暗号化ファイルシステムでの DMAPI の使用

JFS2 暗号化ファイルシステムの暗号化ファイルに対して隠れた入出力操作を実行する際には、 そのファイルで RAW モードの入出力を実行した場合と同様のオフセットおよび長さの位置合わせ制限が適用されます。 特に、入出力のオフセットと長さは、ファイルシステムのブロック・サイズに応じて、ブロックで位置合わせされなければなりません。 暗号化データのサイズは、暗号化解除されたファイルのサイズに関係なく、必ずファイルシステム・ブロックの倍数となります。ファイル・サイズがブロックで位置合わせされていない場合は、そのファイルにそのファイル・サイズを超えた暗号化データが含まれます。
注: stat サブルーチンおよび DMAPI インターフェース ( dm_get_fileattr 関数など) は、平文 (暗号化解除) ファイル・サイズを報告します。 一方、 statx サブルーチンは、 command パラメーターとして STX_EFSRAW を渡すと、ブロックで位置合わせされた暗号化データ・サイズを報告します。
dm_read_invis 関数と dm_write_invis 関数は、正常な操作を行うために以下の要件を満たす必要があります。
dm_read_invis
暗号化ファイルの場合、off パラメーターと len パラメーターは、いずれもファイルシステムのブロック・サイズで位置合わせされている必要があります。そうしないと、エラー・コード EINVAL で操作は失敗します。
dm_write_invis
暗号化ファイルの場合、off パラメーターと len パラメーターは、ファイルシステムのブロック・サイズで位置合わせされていて、かつ、ファイルの拡張を行う操作はしないようにする必要があります。そうしないと、エラー・コード EINVAL で操作は失敗します。

AIXワークロード・パーティションでのDMAPIの使用

ワークロード区画 (WPAR) 内で DMAPI アプリケーションを実行するには、PV_FS_DMAPI 特権を特権のセットに追加し、WPAR で実行されているプロセスにそれらを割り当てる必要があります。 特権のセットは、作成中に WPAR に追加して割り当てることができます。あるいは、後で特権のセットを変更することができます。

mkwpar -S privs+=PV_FS_DMAPI -n wparname
chwpar -S privs+=PV_FS_DMAPI wparname

デフォルトでは、ルート・プロセスのみが WPAR で実行する特権を取得します。 rootが無効化されたシステム、またはrootがデフォルトで無効化されているTrustedAIXインストールでは、非rootプロセスは、グローバルまたはWPARシステムのprivcmdsテーブルを使用して、この特権を取得する。 詳しくは、 RBAC 特権を参照してください。