ファイル削除してもサーバー容量が増えない場合の対処例
現象
Linuxサーバーの容量が著しく減少しているので調査すると某検索システムプロセスのログファイルが大きいのが原因だった。
しかし、単純に当該ファイルを削除してもサーバー容量は増加しなかった。
問題点
ログファイルに対してプロセスからの処理(書き込み等)が続行されている場合、単に削除しても容量が開放されない。
プロセスの停止 or 再起動が必要となる。
状況確認方法
lsofコマンドでプロセスが制御しているログファイルの状態を確認する。
$ lsof 〈対象ファイル〉
コマンド名、PID、ファイルサイズ等の情報が確認出来る。
何も出力されなければ対象ファイルをオープンしているプロセスは存在しないという事になる。
対処手順
最初からrmでファイル削除すると一見消えたように見え判別し辛くなるので以下手順を推奨。
1) リネームする
*この時点ではlogfile_nextへのプロセスからの書き込みは止まらない
$ mv logfile logfile_next
2) 当該プロセスを停止 or 再起動する
*この時点でlogfile_nextはプロセスから解放されファイル操作可能な状態となる
$ kill 〈対象プロセスID〉 or 対象プロセスの再起動手順
Tips) 低負荷なファイルコピー
例えば本番環境下で別ドライブ(や別ホスト)へ巨大なログファイルをコピーするような場合、高すぎる I/O 負荷が発生するとサービス障害を引き起こす可能性が有る。
以下コマンドで I/O 処理速度を制限しつつ低負荷なコピーが可能。
*bwlimitオプション 帯域制限を(kilobytes per second)で指定できる。
$ rsync -av --bwlimit=10000 /hd1/logfile /hd2/logfile