Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
Linuxサーバーを運用していると、「ディスクの空き容量が足りない!」という事態に遭遇することがあります。ログファイルが肥大化したり、一時ファイルが溜まったりと原因はさまざまです。ディスク使用率が100%に達すると、新しいファイルの書き込みができなくなるだけでなく、アプリケーションが正常に動作しなくなったり、システム自体が不安定になったりするといった深刻な問題が発生する可能性があります。
この記事では、そんな時に役立つディスク容量を確認・整理するための基本コマンドに焦点を当てて解説します。
dfコマンドでディスク全体の空き容量を確認する方法duコマンドでファイルやディレクトリごとの容量を調べる方法ncduコマンドでディスク使用状況を対話的に分析する方法dfコマンド「まずはシステム全体の空き容量がどれくらいか知りたい」というときに使うのがdfコマンドです。dfは"disk free"の略で、ファイルシステムの使用状況を表示します。
df -h:人間が読みやすい形式で表示df -h
| オプション | 意味 |
|---|---|
-h |
人間が読みやすい形式 (Human readable) で表示 (例: GB, MB) |
この状況で困ったらコレ:Webサーバーが突然500エラーを出すようになり、調べてみるとディスク容量が0%になっていた。まずはどのファイルシステムで容量がひっ迫しているかを確認したい。
dfコマンドの出力例Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 797M 1.6M 795M 1% /run
/dev/sda1 97G 92G 5.0G 95% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sdb1 400G 100G 300G 25% /var/log
tmpfs 797M 0 797M 0% /run/user/1000
Use%が使用率を示しています。上記の例では/dev/sda1が95%使用されており、容量がひっ迫していることがわかります。
dfコマンドの出力には、/devやtmpfsといった仮想ファイルシステムも含まれるため、実際のディスクの空き容量だけを知りたい場合は、-xオプションで除外できます。
df -h -x tmpfs -x devtmpfs
| オプション | 意味 |
|---|---|
-x <fs_type> |
指定したファイルシステムタイプを除外して表示 |
-T |
ファイルシステムタイプも表示 |
このコマンドは、一時的にメモリ上に作成されるtmpfsやデバイスファイルシステムであるdevtmpfsを除外して表示するため、物理ディスクの状況を把握しやすくなります。
duコマンド特定のディレクトリやファイルの容量を知りたい場合はduコマンド(disk usage)を使います。dfが「ファイルシステム全体」を見るのに対し、duは「個別のファイルやディレクトリ」に焦点を当てます。
du -sh <ディレクトリ/ファイル名>:指定したものの合計サイズを表示du -sh /var/log
【ポイント】パーミッションエラーが出る場合
duコマンドは、アクセス権がないディレクトリやファイルがあると、その内容を読み込めずにエラーとなることがあります。システムファイルを調査する場合など、通常ユーザーでアクセスできない領域を調べたい場合は、sudoをつけて実行することで、権限の問題を回避できます。
sudo du -sh /var/log
| オプション | 意味 |
|---|---|
-s |
合計サイズのみを表示 (summarize) |
-h |
人間が読みやすい形式 (Human readable) で表示 |
この状況で困ったらコレ:df -hで/var/logの容量がひっ迫していることがわかった。次に/var/logディレクトリ内で何が容量を食っているのかを特定したい。
du -shの出力例92G /var/log
これで/var/logディレクトリ全体で92GBを消費していることがわかります。さらに詳細に調べたい場合は、-sオプションを外し、-aオプション (all files)
を付けることで、すべてのファイルとディレクトリのサイズを表示できます。
sudo du -ah /var/log | sort -rh | head -n 10
このコマンドは/var/log以下の全ファイル・ディレクトリのサイズを人間が読みやすい形式で表示し(du -ah)、結果をサイズが大きい順に並べ替え(sort -rh)、上位10件を表示します(head -n 10)。これにより、どのファイルやディレクトリが容量を大きく占めているかを効率的に見つけられます。
--max-depth数万ファイルやサブディレクトリがある巨大なディレクトリの場合、du -ahでは出力が多すぎて見づらくなることがあります。その際は、--max-depthオプションを使って、表示するディレクトリの深さを制限できます。
sudo du -h --max-depth=1 /var/log | sort -rh
このコマンドは、/var/logの直下のディレクトリ(深さ1)の合計サイズを表示し、サイズが大きい順に並べ替えます。これにより、どのサブディレクトリが容量を多く占めているかを効率的に特定できます。
ncduコマンドdfやduで大まかな傾向は掴めますが、より詳細に、かつ対話的にディスク使用状況を調べたい場合はncdu(NCurses Disk Usage)が非常に便利です。ncduはディスクの使用状況をツリー形式で表示し、ディレクトリ間の移動やファイルの削除が可能です。
ncduコマンドのインストール(必要な場合)多くのディストリビューションではデフォルトでインストールされていないため、事前にインストールが必要です。
# Debian/Ubuntu系
sudo apt update
sudo apt install ncdu
# CentOS/RHEL系
sudo yum install epel-release
sudo yum install ncdu
ncduコマンドの実行sudo ncdu /
/はルートディレクトリを指定していますが、特定のディレクトリを深く掘り下げたい場合はそのパスを指定します(例: sudo ncdu /var/log)。
この状況で困ったらコレ:du -ahで上位10個は見つけたが、さらに深い階層にある大量の小さなファイルが容量を食っている可能性がある。対話的に掘り下げていきたい。
ncduの主な操作ncduを使うことで、どこに不要なファイルが隠れているのかを視覚的に、かつ効率的に特定し、その場で削除まで行えます。
ncdu利用ncduは非常に便利ですが、数TBもあるような超巨大なディレクトリをスキャンする場合、初期の集計に時間がかかることがあります。そのため、最初はディスクを圧迫していることが分かっているサブディレクトリ(例: /var/logなど)を指定して実行してみると効率的です。
容量を食っているファイルやディレクトリを特定できたら、不要なものを削除して空き容量を確保しましょう。
/var/log以下に、不要になった古いログファイルがないか確認します。/tmpやユーザーのホームディレクトリ内の一時ファイルを削除します。特に/var/tmpや/var/cacheも一時ファイルやキャッシュの保存場所として使われることが多いので確認してみると良いでしょう。sudo apt cleanに加えて、不要になった依存関係のパッケージを削除するsudo apt autoremoveも有効です。sudo yum clean all または sudo dnf clean allfindコマンド特定の期間より古いファイルを自動で削除したい場合、findコマンドが非常に強力です。例えば、7日より前のログファイルを一括削除したい場合は以下のように実行できます。
sudo find /var/log -type f -name "*.log" -mtime +7 -delete
| オプション | 意味 |
|---|---|
-type f |
ファイルのみを対象とする |
-name "*.log" |
ファイル名が.logで終わるものに限定 |
-mtime +7 |
最終更新日時が7日よりも前のもの |
-delete |
見つかったファイルを削除する(注意して使用!) |
findコマンドは非常に強力なので、-deleteオプションを実行する前に、まずは-printオプションなどで削除対象のファイルを確認することをお勧めします。
sudo find /var/log -type f -name "*.log" -mtime +7 -print
さらに、削除対象のファイルリストをバックアップしておくと、万が一の際に復旧のヒントになります。
sudo find /var/log -type f -name "*.log" -mtime +7 -print > old-logs.txt
このfindコマンドをcronと組み合わせることで、定期的に不要ファイルを自動削除する運用も可能です。
ファイルを削除したのにdfコマンドの表示上、ディスク容量が解放されないことがあります。これは、実行中のプロセスがそのファイルをまだ開いている(保持している)場合に発生します。ファイル自体は削除されても、プロセスがファイルを閉じない限り、そのファイルが占めていた領域は解放されません。
このような場合は、lsofコマンドを使って、削除したファイルを開いているプロセスを特定できます。
sudo lsof | grep deleted
また、より直接的に「削除されたにもかかわらず、まだプロセスに参照されているファイル」を一覧で確認するには、+L1オプションが便利です。
sudo lsof +L1
このコマンドで表示されたプロセスを再起動するか、可能であれば停止することで、ディスク容量が解放されます。Webサーバーやデータベースサーバーなどでよく見られる現象です。
注意: 重要なファイルを誤って削除しないよう、操作は慎重に行いましょう。特に、システムが利用しているファイルやディレクトリの削除は、システムの不安定化や起動不能につながる可能性があります。
この記事では、Linux環境でディスク容量を確認し、整理するための基本的なコマンドdf、du、そして便利なncduについて解説しました。さらに、findコマンドによる自動削除のヒントや、ファイルを削除しても容量が解放されない場合のトラブルシューティングにも触れました。これらのコマンドと知識を使いこなすことで、ディスク容量不足の問題に迅速に対応し、サーバーを安定して運用できるでしょう。
この記事が、あなたのLinux管理の一助となれば幸いです。
ご覧いただきありがとうございました。
次回はログファイルの場所と見方について解説します。