
ディスク使用率100%を防ぐ|ログローテーションと監視の基本
夜中にスマホが鳴る。サイトが見られないという連絡。 ログインして調べると、原因はコードでもアクセス急増でもなく——「ディスクがいっぱいで、もう何も書き込めない」。
そんな経験、ありませんか。 ディスク使用率100%は、保守運用の現場でいちばん起きやすいトラブルのひとつです。そして同時に、事前に防ぎやすいトラブルでもあります。じわじわ進むので、仕組みさえ整えておけば「満杯になる前に気づいて手を打つ」ことができます。
この記事では、なぜ満杯で止まるのか、何が容量を食っているかの調べ方、ログをため込まない設定、手遅れになる前に気づく監視を、一人運用の目線で整理します。全部を一度にやらなくて大丈夫です。
結論:ディスク満杯は「調べる・減らす・気づく」で防ぎます。①dfとduで今の使用率と「何が重いか」を把握、②ログはlogrotateで自動圧縮・削除、③100%前(例:85〜90%)に通知が来る監視を1つ。まずは「df -hを1回見る」ところから。
閾値や保存日数は用途次第です。ここを出発点に、環境に合わせて調整してください。コマンドはLinux系を前提にしています。
なぜディスク100%でシステムが止まるのか
ディスクが満杯になると、CPUやメモリに余裕があっても、多くのソフトが「書き込めること」を前提にしているため動けなくなります。
- ログが書けずにアプリが止まる
- データベースが一時ファイルやトランザクションログを書けず更新を拒否
- セッションやキャッシュが作れない
- 最悪、再起動すらうまくいかない
起きてからの復旧は重くなりがちです。だからこそ、満杯になる前に気づいて減らすのが現実的です。
まず調べる:何が容量を食っているか

容量を減らす前に、「今どれくらい使っていて、何が重いのか」を知ります。順番はシンプルです。
① df で全体の使用率と枯渇の種類を見る
df -h
df -i
Use% が高い場所(/ か、/var か、/home か)を特定します。あわせて df -i で inode 枯渇も確認します。サイズに空きがあっても inode が尽きると新規作成ができません。inode が枯渇していたら、小さなファイルの整理や再配置を検討します。
② du で「重い場所」を上からたどる
満杯に近い場所が分かったら、その中で何が容量を食っているかをたどります。
du -xh -d 1 -x /var | sort -h
-d 1 は1階層だけ、-x は別ファイルシステムに降りない指定です。大きいものが下に来るので、いちばん重いディレクトリへ一段ずつ降りていきます。たいていは /var/log(ログ)や一時ファイル、バックアップ置き場が候補です。
③ 慌てて消さない(ここが大事)
重い場所が分かっても、いきなり rm は避けます。使用中のファイルを消すと、プロセスがつかんだままで容量が戻らないことがあります。削除済みだがプロセスが保持しているファイルは、次で探せます。
lsof +L1
該当プロセスを再起動すると解放されます。ログは「古いものだけ」を対象にし、今書き込み中のファイルは触らないのが基本です。
ログをため込まない:ログローテーションの基本
ディスク満杯の最頻原因は、ログがたまり続けることです。logrotate の設定で「いつ・何世代・どう圧縮して残すか」を決めます。押さえるのは次の4点+α。
- 周期:
daily/weekly/size 100Mなど - 世代数:
rotate N - 圧縮:
compress(必要に応じて直近はdelaycompress) - 空でも許容:
missingok、空ファイルは回さないならnotifempty - 新規ファイルの作成:
createの有無(必要ならモード/所有者を設定。値は環境のポリシーに合わせて公式情報で確認)
例(環境の既存ポリシーに合わせて調整してください):
/var/log/myapp/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create
# アプリが再オープンする場合は postrotate で通知
# postrotate
# systemctl reload myapp.service || true
# endscript
# 再オープンできない場合だけ代替で copytruncate を検討
# copytruncate
}
重要ポイント(現場での選び方):
- アプリがログの再オープンに対応しているなら、
postrotateで SIGHUP 送信やサービスの reload を行うのが第一候補。行単位の欠落を避けやすい。 - 再オープン非対応なら
copytruncateを検討。ただし書き込みが多いと一部の行が欠けたり重複する可能性があるため、許容できるログ(追記専用・多少の欠落を許せる)に限定。 - どちらを使うかは、アプリの公式情報(シグナル対応や reload の可否)で確認。
設定を変えたら、本番適用前に挙動をテストします。
- ドライラン(何をするかだけ表示):
logrotate -d /etc/logrotate.conf - 強制ローテ(条件無視で実行):
logrotate -f /etc/logrotate.conf
また、systemd-journald が肥大化している場合は、まず使用量確認とクリーンアップを検討します。
journalctl --disk-usage
journalctl --vacuum-size=… または --vacuum-time=…
手遅れになる前に気づく:監視の入れ方
ローテーションしても、バックアップや一時ファイルの暴走で増えることはあります。だから「100%前に気づく監視」を最低1つ。
- 余裕を持った水準で鳴らす:たとえば 85%(様子見)/90%(対応)など
- 増え方も意識:短時間の急増は低い数字でも要注意
- 通知先は、まずは1経路でよい(夜間も届くメール等)。余力が出たら段階通知や経路分離へ拡張
最小実装の例:cron で df を閾値判定してメール通知、または利用中クラウドのディスク使用率/ファイルシステム系メトリクスにしきい値アラームを設定。
閾値と通知運用の考え方は、監視アラートの鳴らしすぎを減らす記事も参考に。
具体例:よくある3つの「容量を食う犯人」
- ローテーションされていないアプリログ:OS側は設定済みでも、アプリ独自ログが無限増加。→
logrotate対象に追加し、postrotate/copytruncateを選定。 - 古いバックアップの置きっぱなし:DBダンプやファイルバックアップが残り続ける。→ 保存世代を決めて自動削除、または外部へ退避。
- 一時ファイル・キャッシュの暴走:失敗で一時ファイルが残る、キャッシュ肥大。→
duで場所特定、安全に消せる範囲を確認して定期整理。
「とにかく消す」ではなく、「増え続ける原因を止めて、自動で減る」に寄せるのがコツです。
影響:仕組みを整えると、何が変わるか
- 早めの通知で、営業時間中に落ち着いて対応できる
- 「どこが重いか」を手順化でき、復旧が速い
- ログ整理が自動化され、放置でも満杯になりにくい
- 手順を残せば、誰でも同じように回せる
放置すると、ある日突然「全部が書けない」障害に化けます。じわじわ進むぶん、気づく仕組みさえあれば防げます。
明日やること:まず df -h を1回見る
- サーバーで
df -hとdf -iを実行し、今の使用率と inode を見る。 - 満杯に近い場所があれば、
du -xh -d 1 -x <その場所> | sort -hで重いディレクトリを一段だけ特定。 - いちばん重いものが「ログ」なら、
/etc/logrotate.d/を確認し、対象漏れやmissingok/compress/delaycompress/createの要否を点検。 - 監視がなければ、「90%を超えたらメール1通」から始める。
- 削除で容量が戻らない時は
lsof +L1を確認し、該当プロセスを再起動。
この5分で「今うちのディスクは大丈夫か」が分かります。
コンテナ環境の注意点(ひとこと)
- Docker ではコンテナログのローテを有効化(例:
--log-opt max-size・--log-opt max-file)。 - Kubernetes/CRI では、コンテナログのローテ上限設定を確認。
詳細は利用中の公式情報で確認してください。
ディスク満杯を防ぐチェックリスト
最低ライン(優先順位つき:これだけで回る) 1) 現状把握:df -h/df -i と du -xh -d 1 -x で重い場所を特定 2) ためない:アプリ独自ログを含め logrotate 対象化(missingok/compress/必要ならdelaycompress/create、アプリが再オープン可なら postrotate で通知、不可なら慎重に copytruncate) 3) 気づく:使用率90%でメール1通の簡易監視
余力が出たら拡張
- 85%で様子見、90%で対応など段階通知
- 通知経路の分離(夜間は緊急だけ、日中はダッシュボード中心)
- 代替案:経路分離が難しければ、夜間は90%のみ通知・日中は85%をダッシュボード確認に限定
免除条件(省略可)
- 使い捨て検証用VMや短命な一時サーバは段階通知を省略可。ただし「logrotate設定」と「週1の手動
df確認」は残す。
確認項目
-
df -h/df -iで各ディスクの使用率・inodeを把握 -
du -xh -d 1 -xで重い場所を上から特定できる - アプリ独自ログまで
logrotateの対象になっている -
rotate/compress/必要ならdelaycompressとcreateの方針が決まっている - アプリの再オープン有無に応じて
postrotateかcopytruncateを選べている - 削除済みで戻らない容量は
lsof +L1で特定し、該当プロセス再起動で解放できる -
journalctl --disk-usageを確認し、必要なら--vacuum-*で整理 - バックアップは世代管理または外部退避
- 90%でメール1通の簡易監視が入っている(余力があれば段階通知へ)
よければ、こちらも
ディスク監視は、障害を「起きてから」ではなく「起きる前」に止める備えのひとつです。鳴った後の段取りや原因にたどり着くログの見方も、あわせて型にしておくと落ち着けます。
- 監視アラートの鳴らしすぎを減らす|閾値の決め方と運用のコツ
- 500エラーが出たら最初に見る5つのログ|場所と確認の順番
- サイトが重いの切り分け手順|DB・アプリ・ネットワークの順に見る
- 障害対応runbookテンプレート|初動・切り分け・連絡・記録を1枚に

ディスク満杯は、ある日いきなり全部を止めてしまう怖いトラブル。でも、じわじわ進むぶん、気づく仕組みさえあれば防げます。 今日は df -h を1回見るだけで十分です。その小さな確認が、「突然サイトが落ちる夜」を、静かに遠ざけてくれます。
ほかの実務ヒントは記事一覧からどうぞ。保守運用の小さな備えを、メールでも少しずつお届けしています。