この節では、壊れたシステムアカウンティングファイルを修復し、runacct スクリプトを再起動する方法を説明します。
システムアカウンティングは絶対に障害が発生しないわけではありません。ファイルが壊れたり、失われることがあります。ファイルによっては、単に無視してよいものや、バックアップから復元できるものがあります。ただし、特定のファイルは、アカウンティングシステムの完全性を維持するために修復しなければなりません。
wtmpx ファイルは、システムアカウンティングを日常的に運用する上で発生する問題の大部分の原因になっています。日付を手動で変更したときに、システムがマルチユーザーモードになっていると、一連の日付変更レコードが /var/adm/wtmpx ファイルに書き込まれます。wtmpfix ユーティリティーは、日付変更が行われたときに、wtmp レコードのタイムスタンプを調整するように設計されています。ただし、日付変更とリブートの組み合わせによっては、wtmpfix の処理から漏れて、acctcon プログラムの処理が失敗することがあります。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
/var/adm ディレクトリに移動します。
wtmpx ファイルの形式をバイナリから ASCII 形式に変換します。
# /usr/lib/acct/fwtmp < wtmpx > wtmpx.ascii |
wtmpx.ascii ファイルを編集して、壊れたレコードを削除します。
wtmpx.ascii ファイルを再びバイナリファイルに変換します。
# /usr/lib/acct/fwtmp -ic < wtmpx.ascii > wtmpx |
詳細については、fwtmp(1M) のマニュアルページを参照してください。
/var/adm/acct/sum/tacct ファイルの完全性は、システム資源に対してユーザーに課金している場合は重要です。負の数値、重複ユーザー ID、または 65535 のユーザー ID とともに不正な tacct レコードが表示されることがあります。このような場合はまず、prtacct スクリプトを使用して、 /var/adm/acct/sum/tacctprev ファイルを表示してチェックします。内容が正しい場合は、最新の /var/adm/acct/sum/tacct MMDD ファイルに修正します。次に、/var/adm/acct/sum/tacct ファイルを作成し直します。次の手順は、簡単な修復手順の概要を説明しています。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
ディレクトリ /var/adm/acct/sum に移動します。
tacctMMDD ファイルの形式をバイナリから ASCII 形式に変換します。
# /usr/lib/acct/acctmerg -v < tacctMMDD > xtacct |
MMDD は、月と日をあらわす 2 桁の数値を組み合わせたものです。
xtacct ファイルを編集して、壊れたレコードを削除し、重複レコードを別のファイルに書き込みます。
xtacct ファイルを ASCII 形式からバイナリ形式に変換します。
# /usr/lib/acct/acctmerg -i < xtacct > tacctMMDD |
tacctprev ファイルと tacct.MMDD ファイルをマージして tacct ファイルを生成します。
# /usr/lib/acct/acctmerg < tacctprev tacctMMDD > tacct |
runacct スクリプトは、さまざまな理由で失敗することがあります。
一般的な理由には、以下のようなものがあります。
システムクラッシュ
/var ディレクトリの容量不足
wtmpx ファイルの破損
active.MMDD ファイルが存在する場合は、まずエラーメッセージをチェックします。active ファイルおよび lock ファイルが存在する場合は、異常なメッセージがないかどうか fd2log ファイルを調べます。
runacct スクリプトは、引数を指定しないで実行すると、その呼び出しがその日の最初の呼び出しであると想定します。runacct スクリプトを再起動し、runacct スクリプトがアカウントを返す月と日を指定する場合は、引数 MMDD が必要になります。処理のエントリポイントは statefile ファイルの内容に基づきます。statefile ファイルを無効にするには、処理を開始したい状態をコマンド行に指定します。利用可能な状態の説明については、runacct(1M) のマニュアルページを参照してください。
runacct プログラムを手動で実行するときは、ユーザー adm として実行していることを確認してください。
/var/adm/acct/nite ディレクトリに移動します。
$ cd /var/adm/acct/nite |
lastdate ファイルと lock* ファイル (もしあれば) を削除します。
$ rm lastdate lock* |
lastdate ファイルには、 runacct プログラムが最後に実行された日付が含まれています。次の手順で runacct スクリプトを再起動することによって、このファイルが作成し直されます。
runacct スクリプトを再起動する
$ /usr/lib/acct/runacct MMDD [state] 2> /var/adm/acct/nite/fd2log & |