slocate.dbが肥大化し破綻
と、あるファイルを探そうと思い、いつもの通り
slocate xxxx
とコマンドを打ち込んだが、返答が無い。
ヤバイ気配を感じて、もう一つのコンソールからtopコマンドを打ち込んだらスワップは急上昇し、メインメモリは今にも食い尽くされんばかりになっていた。慌てて CTRL-Cで止める。
「なんでこんな事になってんだ」
考えられたのは slocate.db の肥大化である。朝のcronでの updatedb が終わらんのを疑問に思っていたのを思い出したのである。
slocate.db は /var/lib/slocate/ にある。サイズを見て驚いた。なんと1GBに届かんばかりのサイズに膨れていたのだ。slocateはデータベースを全部メモリに読み込んで検索するようで、1GBしかない(もある)メインメモリの中身は大半が外に放り出されることになったのだった。
いくらHDDが数百GBあるからと言ってもインデックスがGBになることは無い。
なんでだろうと悩んでいるうちに、毎日取っているバックアップが原因らしいということに気がついた。
そこにはハードリンクを駆使した今のユーザファイルx365日分という大量のファイルが見かけ上存在している。updatedbは図らずして数十TBのHDDをインデックスしているも同然になっていたのである。
早速、updatedb.conf の PRUNEPATHS に バックアップディレクトリを追加してインデックスから排除して、再構築。その結果、slocate.db は僅か9MBにダイエット。えがった。
df -i して iノードの使用度も確認したら50%近かったので現在古いバックアップを削除中。まぁ三ヶ月分あれば十分でしょう。