この節では、日常的な NIS+ 名前空間の管理作業を行なっているときに発生する可能性のある問題について説明します。一般的な症状には次のようなものがあります。
「Illegal object type for operation」メッセージ
その他の「オブジェクトの問題」のエラーメッセージ
初期設定のエラー
チェックポイントのエラー
ユーザーをグループに追加するときのエラー
ログが大きすぎる場合、ディスク容量が不足した場合、ログの切り捨てのエラー
groups_dir や org_dir が削除できない
「症状」
このエラーメッセージには、いくつもの原因が考えられます。
データベース処理が DB_BADOBJECT の状態を返しました (db(3N) のエラーコードの詳細は、nis_db(3N) のマニュアルページを参照してください)。
長さを 0 に指定して、データベースオブジェクトを追加または変更しようとしました。
所有者を指定せずに、オブジェクトを追加しようとしました。
その処理はディレクトリオブジェクトを想定していますが、指定したオブジェクトは、ディレクトリオブジェクトではありませんでした。
ディレクトリを LINK オブジェクトにリンクしようとしました。
テーブルエントリにリンクしようとしました。
グループオブジェクトの処理が想定されていましたが、指定したオブジェクトのタイプはグループオブジェクトではありませんでした。
テーブルオブジェクトの処理が想定されていましたが、指定したオブジェクトはテーブルオブジェクトではありませんでした。
次の点をチェックしてください。
NIS+ が動作していることを、ping によって確認できるか
-H オプションで指定した NIS+ サーバーが、適切なサーバーであるか、また現在も動作しているか
rpc.nisd がサーバー上で動作しているか
その他クラスが、このドメインの読み取り権を持っているか
このマシンで、ネットマスクが正しく設定されているか
チェックポイント処理 (たとえば、nisping -C コマンドによる操作) が、継続してエラーを起こしている場合は、十分なスワップ空間やディスク容量があるかどうか確認してください。syslog 内のエラーメッセージもチェックします。core ファイルがディスク空間を使い果たしていないかどうかチェックします。
ユーザーをそのドメイン内のグループのメンバーとして追加する前に、そのユーザーは、ドメインの cred テーブルの中で LOCAL の資格を持つ NIS+ 主体クライアントになっていなければなりません。DES の資格を持っているだけでは、十分ではありません。
nisping -C を使用して定期的にチェックポイントを実行していないと、ログファイルが極端に大きくなることがあります。マスターサーバーのすべての複製サーバーが更新されるまでは、マスター上にあるログはクリアされません。複製がダウンしている場合や、サービスが行われていない場合、複製サーバーと通信できない場合は、その複製サーバーに対応するマスターをクリアできません。このため複製がダウンしているか、または一定時間使用できない場合には、「ディレクトリを削除する」で説明するとおり、マスターから複製を削除する必要があります。ディレクトリ org_dir とサブディレクトリ groups_dir を最初に削除してから、ディレクトリ自体を削除してください。
十分なディスク容量が確保できない場合は、様々なエラーメッセージが表示されます (詳細は、「ディスク容量の不足」を参照)。
まずはじめに、問題のファイルが存在するか、読み込み可能か、そのファイルに書き込み権が割り当てられているかどうかチェックしてください。
トランザクションログは、ls /var/nis/trans.log で表示できます。
ファイルの存在、アクセス権、読み取り権については、nisls -l と niscat で確認できます。
関係するメッセージは、syslog でチェックできます。
最も可能性のある原因は、適切なアクセス権を割り当てられているものの、ディスク容量が不足していることです。チェックポイント処理では、ログを切り捨て一時ファイルを削除する前に、ますログ一時ファイルのコピーを作成します。このため、一時ファイルを作成するためのディスク容量がない場合は、チェックポイント処理を進めることができません。使用可能なディスク容量をチェックし、必要であれば容量を確保してください。
NIS+ の多くのコマンドや操作にとって、ドメイン名は重要な役割を果たします。ルートサーバーを除いて、NIS+ のすべてのマスターと複製は、それ自身がサービスを提供するドメインより上にあるドメインのクライアントであるということに特に注意してください。サーバーまたは複製サーバーを、それ自身がサービスを提供するドメインのクライアントとして誤って扱った場合、「Generic system error」や「Possible loop detected in namespace directoryname:domainname」というエラーメッセージが表示されます。
たとえば、altair というマシンが、subdoc.doc.com. ドメインのクライアントだとします。サブドメイン subdoc.doc.com. のマスターサーバーが sirius というマシンだとすると、sirius は doc.com. ドメインのクライアントになります。したがって、ドメインの指定や変更を行うときは、混同しないように次のルールに注意してください。
クライアントマシンは、特定のドメインかサブドメインに所属します。
特定のサブドメインにサービスを提供するサーバーや複製サーバーは、そのドメインより上にあるサブドメインのクライアントです。
2 の規則の唯一の例外は、ルートマスターサーバーとルート複製サーバーです。これらは、それ自身がサービスを提供するドメインのクライアントになります。つまり、ルートドメインのクライアントになるのは、ルートマスターとルート複製だけです。
したがって、上の例では、マシン altair の完全指定名は、altair.subdoc.doc.com. です。マシン sirius の完全指定名は、sirius.doc.com. です。sirius は doc.com. のクライアントであり、subdoc.doc.com. のクライアントではないので、sirius.subdoc.doc.com. は間違いであり、エラーになります。
親ディレクトリを削除する前に、必ず org_dir と groups_dir を削除してください。ドメインの groups_dir と org_dir を削除する前に、nisrmdir を使用してドメインを削除すると、これらの 2 つのサブディレクトリは、どちらも削除できなくなります。
複製サーバーからディレクトリを削除または分離する場合には、最初にディレクトリの org_dir と groups_dir のサブディレクトリを削除してから、ディレクトリ自体を削除します。各サブディレクトリが削除された後に、削除しようとするディレクトリの親ディレクトリで nisping を実行する必要があります (「ディレクトリを削除する」を参照)。
nisping の操作に失敗すると、ディレクトリは完全に削除または分離されません。
この状態が発生したら、次の手順を実行して、修正する必要があります。
複製上の /var/nis/rep/serving_list で org_dir.domain が表示されないことを確認してください。
domain で nisping を実行します。
マスターサーバーから nisrmdir -f replica_directory を実行します。
分離しようとしている複製サーバーがダウンしているか、または通信不能である場合に nisrmdir -s コマンドは「Cannot remove replica name: attempt to remove a non-empty table」というエラーメッセージを戻します。
このような場合には、nisrmdir -f -s replicaname をマスターで実行して、分離を強制できます。しかし nisrmdir -f -s replicaname を使って通信不能な複製を分離する場合には、複製がオンライン状態に戻ったらすぐに、nisrmdir -f -s replicaname を再実行して、複製の /var/nis ファイルシステムをクリーンアップする必要があります。nisrmdir -f -s replicaname の再実行に失敗した場合には、複製がサービスを再開した時に複製上に残された古い情報によって問題が発生します。