/var/log/sa ディレクトリに保持されるファイル数は、 HISTORY の値よりわずかに多い。 これは sa2 スクリプトがどのファイルを削除するかを算出する方法による (以下の 「sa2(8) スクリプトが HISTORY 値を適用する方法」を参照)。 値 28 を使うと、1 ヶ月全部のデータが保持される。 HISTORY に 28 より大きい数を設定すると、 sadc のオプション -D が古いファイルを上書きしないように考慮する必要がある (sadc(8) のマニュアルページを参照すること)。 後者の場合、データファイルは saYYYYMMDD で、レポートファイルは sarYYYYMMDD である。 ここで、YYYY は現在の年、MM は月、DD は日である。
sa2(8) スクリプトが HISTORY 値を適用する方法
sa2 スクリプトは "find" コマンドを "-mtime" オプションを付けて使い、 どのファイルを削除するかを算出する。 "find" コマンドは、この値を "N × 24 時間" として解釈し、 小数部を無視する。 これは HISTORY が 1 の場合、削除される sa[r]DD データファイルまたは レポートファイルの最終修正時刻が、 少なくとも 2 日前までという意味になる。 そして、 HISTORY が 28 の場合、29 日前までとなる。
HISTORY が 28 の場合に実際にどのように適用されるかは、 sa2 が "find" コマンドを発行して、 システムの午前 0 時の直前に古いファイルを削除するかを考える必要がある。 sadc の最初のレコードは前日のデータファイルに書かれる (よって修正時刻は少しだけずれる) ので、 sa2 スクリプトは 30 個のファイルを触らずに残す。 そのため、28 に設定すると、 現在の日付のデータファイルをカウントし、指定した日の大部分で、 31 個のファイル (月の日数により 30 ファイル) が /var/log/sa ディレクトリに残る。
4月30日: 31 ファイル (3月31日、4月1日-30日)
5月1日: 30 ファイル (4月2日-30日、5月1日)
(指定した日の正午に調べられた場合) 以下の例外がある点に注意すること。
2月28日: 31 ファイル (1月29日-31日、2月1日-28日)
3月1日: 30 ファイル (1月30日-31日、2月2日-28日、3月1日)
3月2日: 29 ファイル (1月31日、2月3日-28日、3月1日-2日)
3月3日: 28 ファイル (2月4日-28日、3月1日-3日)
3月4日-28日: 28 ファイル
3月29日: 29 ファイル
3月30日: 30 ファイル
3月31日: 31 ファイル
(閏年の 3 月にいくつのファイルが残るかは、読者への練習に取っておく。)
名前フォーマット sa[r]YYYYMMDD を使った場合は、より単純である。 上記を同じロジックを適用し、指定した日の大部分で、常に HISTORY + 3 ファイルが /var/log/sa ディレクトリにあることが分かるだろう。
https://github.com/sysstat/sysstat
http://pagesperso-orange.fr/sebastien.godard/