仮想コンテナ(Ubuntu Hardy)にある640MBのwtmpファイルに気づきました。
# last -n 10000 -f /var/log/wtmp.1|wc -l
384
# ls -hl /var/log/wtmp.1
-rw-rw-r-- 1 root utmp 641M 21. Sep 07:49 /var/log/wtmp.1
logrotateがインストールされていません(私はそれを実行して強制的に回転させました)。
last
によって表示されていないレコードがありますか(最後の1000エントリが表示されるはずですが、明らかに384しかありません)。
すぐにスキミングからwtmp/utmp
manページ、単一のエントリで約1,6MBを使用する必要があるように見えません。
これらのファイルを検査するlast
以外のプログラムはありますか?
logrotate
は良い考えでした。
通常のファイルと同様に、wtmpは「スパース」(lseek(2)の「ホール」および_ls -s
_を参照)である可能性があり、実際にはほとんどディスクを占有しない極端なファイルサイズを示します。穴だったら、どうやってそこにたどり着いたのですか? getty(8)
や友達にはバグがあった可能性があります。または、システムクラッシュとfsckの修復が原因である可能性があります。
Wtmpの生の内容を確認したい場合は、od
またはhd
がバイナリをのぞくのに適しており、空の長時間実行などを表示するという嬉しい副作用があります。
再発しない限り、これ以上考えないでしょう。わずかに有能な侵入者はそれよりも良い仕事をします、内容はそれほど興味深いものではなく、それらにほとんど依存しません。
これが役立つと思われる人を助けるために...
これらのファイルを検査する
last
以外のプログラムはありますか?
はい、utmpdump
をお試しください。
$ utmpdump /var/log/wtmp
Wtmpに穴があるかどうか疑わしい場合は、coreutilsが十分に新しい場合はcp --sparse
で、まだリリースされていないutil-linux 2.25バージョンを使用している場合はfallocate --Dig-holes
でそれらを取り除くことができます。おそらく、より実用的なアプローチはwtmpを再パックすることです。
utmpdump /var/log/wtmp | utmpdump -r > /tmp/newtmp
ls -l /var/log/wtmp /tmp/newtmp # if significantly smaller
chown root:root /tmp/newtmp
chmod 0554 /tmp/newtmp
mv /tmp/newtmp /var/log/wtmp
そして、それでもファイルがかなり大きい場合は、単に回転して圧縮します。
mv /var/log/wtmp{,.1}
gzip -9 /var/log/wtmp.1