Solaris のシステム管理 (第 2 巻)

アカウンティング情報の管理

この節では、アカウンティング情報を保守する方法について説明します。

壊れたファイルと wtmp エラーを修復する

UNIX のアカウンティングシステムは堅固ではなく、ファイルが壊れたり失われることがあります。そのようなファイルにも、単に無視してよいものや、バックアップから復元できるものがあります。しかし、特定のファイルは、アカウンティングシステムの完全性を維持するために修復しなければなりません。

wtmp(4) ファイルは、アカウンティングシステムを日常的に運用する上で発生する大部分の問題の原因になっています。日付が変更され、システムがマルチユーザーモードになると、1 組の日付変更レコードが /var/adm/wtmp に書き込まれます。wtmpfix(1M) ユーティリティは、日付変更されたときの wtmp レコード内のタイムスタンプの調整用として用意されています。ただし、日付変更とリブートとの組み合わせによっては、wtmpfix のチェックから漏れて、acctcon の処理を失敗させることがあります。wtmp の問題を解決する手順については、wtmp ファイルを修復する方法」を参照してください。

wtmp ファイルを修復する方法

  1. スーパーユーザーになります

  2. ディレクトリ /var/adm/acct/nite に変更します。

  3. 次のように、バイナリファイル wtmp.MMDD を ASCII ファイル xwtmp に変換します。

    # fwtmp wtmp.MMDD xwtmp
    

    MMDD

    2 桁の数値で指定される月日 

  4. xwtmp を編集します。壊れたファイルを削除するか、始めから日付変更までのすべてのレコードを削除します。

  5. ASCII ファイル xwtmp をバイナリファイルに変換し、壊れたファイルを上書きします。

    # fwtmp -ic xwtmp wtmp.MMDD
    

tacct エラーを修復する

/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 ファイルを作成し直してください。次の手順は、簡単な修復手順の概要を説明しています。

tacct エラーを修復する方法

  1. スーパーユーザーになります。

  2. ディレクトリ /var/adm/acct/sum に変更します。

  3. 次のように、tacct.MMDD の内容をバイナリから ASCII 形式に変換します。

    # acctmerg -v tacct.MMDD xtacct
    

    MMDD

    2 桁の数字で指定される月日 

  4. xtacct ファイルを編集して、不良レコードを削除し、重複レコードを別のファイルに書き込みます。

  5. xtacct ファイルを ASCII 形式からバイナリに変換します。

    # acctmerg -i xtacct tacct.MMDD
    

    MMDD

    2 桁の数字で指定される月日 

  6. ファイル tacct.prvtacct.MMDD をマージしてファイル tacct を生成します。

    # acctmerg tacctprv tacct.MMDD tacct
    

runacct を再起動する

runacct プログラムはいろいろな原因で失敗することがあります。一番多い原因は、システムがクラッシュする、/var がディスク容量を使い果たす、wtmp ファイルが壊れたなどです。active.MMDD ファイルが存在する場合、まずエラーメッセージがないか調べます。active ファイルとロックファイルが存在する場合、異常なメッセージがないかどうか fd2log ファイルを調べます。

runacct は、引数を指定しないで実行すると、その日の最初の起動とみなします。runacct を起動し直し、もう一度 runacct にアカウンティングをやり直させる月日を指定する場合は、引数 MMDD が必要です。処理のエントリポイントは statefile の内容に基づきます。statefile を無効にするには、次のように処理を開始したい状態をコマンド行に指定します。


注意 - 注意 -

runacct プログラムを手動で実行するときは、ユーザー adm として実行していることを確認してください。


runacct を再起動する方法

  1. lastdate ファイルと lock* ファイル (もしあれば) を削除します。

    $ cd /var/adm/acct/nite
    $ rm lastdate lock*
    
  2. runacct プログラムを再起動します。

    $ runacct MMDD [state] 2> /var/adm/acct/nite/fd2log &
    

    MMDD

    月日を数値で指定する 

    state

    runacct 処理を開始させたい状態または開始点を指定する