Solaris のシステム管理 (上級編)

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

この節では、壊れたアカウンティングファイルを修復し、runacct スクリプトを再起動する方法を説明します。

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

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

wtmpx ファイルは、アカウンティングシステムを日常的に運用する上で発生する問題の大部分の原因になっています。日付を手動で変更した時に、システムがマルチユーザーモードの場合は、日付変更レコードが/var/adm/wtmpx ファイルに書き込まれます。wtmpfix ユーティリティは、日付変更が行われたときに、wtmp レコードのタイムスタンプを調整するように設計されています。ただし、日付変更とリブートの組み合わせによっては、wtmpfix の処理から漏れて、acctcon プログラムの処理が失敗することがあります。

壊れた wtmpx ファイルの修復方法

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

  2. /var/adm ディレクトリに移動します。

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


    # /usr/lib/acct/fwtmp < wtmpx > wtmpx.ascii 
    
  4. wtmpx.ascii を編集して、壊れたレコードを削除します。

  5. wtmpx.ascii ファイルを再びバイナリファイルに変換します。


    # /usr/lib/acct/fwtmp -ic < wtmpx.ascii> wtmpx
    

    詳細は、fwtmp(1M) のマニュアルページを参照してください。

tacct エラーを修復する

/var/adm/acct/sum/tacct ファイルの完全性は、システム資源に対してユーザーに課金している場合は重要です。不正な tacct レコードが、負の数値、重複ユーザー ID、65535 のユーザー ID で表示されることがあります。このような場合はまず、prtacct スクリプトを使用して/var/adm/acct/sum/tacctprev ファイルを印刷してチェックします。内容が正しい場合は、最新の /var/adm/acct/sum/tacctMMDD ファイルを使用して、/var/adm/acct/sum/tacct ファイルを作成し直してください。次の手順は、簡単な修復手順の概要を説明しています。

tacct エラーを修復する方法

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

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

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


    # /usr/lib/acct/acctmerg -v < tacctMMDD > xtacct
    

    MMDD は、月と日をあらわす 2 桁の数値を組み合わせたものです。

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

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


    # /usr/lib/acct/acctmerg -i < xtacct > tacctMMDD
    

    MMDD は、月と日をあらわす 2 桁の数値を組み合わせたものです。

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


    # /usr/lib/acct/acctmerg < tacctprev tacctMMDD > tacct
    

runacct スクリプトを再起動する

runacct スクリプトは、さまざまな理由で失敗することがあります。最も一般的な理由には、システムクラッシュ、/var ディレクトリの容量不足での実行、wtmpx ファイルが壊れたなどがあります。activeMMDD ファイルが存在する場合は、まずエラーメッセージをチェックします。active ファイルおよび lock ファイルが存在する場合は、異常なメッセージがないかどうか fd2log ファイルを調べます。

runacct スクリプトは、引数を指定しないで実行すると、その実行がその日の最初の実行であるとみなします。runacct スクリプトを再起動し、runacct スクリプトがアカウントを返す月と日を指定する場合は、引数 MMDD が必要になります。処理のエントリポイントは statefile ファイルの内容に基づきます。statefile ファイルを無効にするには、処理を開始したい状態をコマンド行に指定します。利用可能な状態の説明については、runacct(1M) のマニュアルページを参照してください。


注意 – 注意 –

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


runacct スクリプトを再起動する方法

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


    $ cd /var/adm/acct/nite
    $ rm lastdate lock*
    

    lastdate ファイルには、 runacct プログラムが最後に実行された日付が含まれています。次の手順で runacct を再起動することによって、このファイルが再び作成されます。

  2. runacct スクリプトを再起動します。


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

    MMDD

    月日を 2 桁の数値で指定する 

    state

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