Linuxでinodeが枯渇したときの確認方法|df -i・findで原因を調べる

Linuxサーバーでは、ディスク容量がまだ残っているのに「No space left on device」と表示され、ファイルを作成できなくなることがあります。

このような場合に確認したいのがinodeの使用状況です。

inodeが枯渇すると、ディスク容量そのものには余裕があっても、新しいファイルやディレクトリを作成できなくなることがあります。

特に、ログ・キャッシュ・メール・一時ファイルなどの小さなファイルが大量に作られる環境では注意が必要です。

ここでは、df -iでinodeの使用状況を確認し、findなどを使って原因となっているディレクトリを調べる手順を紹介します。

inodeとは?

inode(アイノード)は、Linuxのファイルシステムがファイルやディレクトリを管理するために使用する情報です。

ファイルのサイズや所有者、権限、更新日時などの情報を管理しており、ファイルそのもののデータとは別に扱われます。

そのため、ディスク容量だけでなく、作成できるファイル数にもファイルシステム側の上限があります。

例えば、小さなファイルを大量に作成すると、ディスク容量には余裕があってもinodeを使い切ることがあります。

この状態が「inode枯渇」です。

ディスク容量とinode不足は何が違う?

まず、通常のディスク容量はdf -hで確認できます。

df -h

一方、inodeの使用状況はdf -iで確認します。

df -i

表示例は次のようになります。

Filesystem      Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1      6553600 6553500     100  100% /

ここで注目するのがIUse%です。

確認項目コマンド確認する内容
ディスク容量df -hストレージ容量の使用率
inodedf -iファイル・ディレクトリ数の使用率
大量のファイルfindどこにファイルが集中しているか

例えばdf -hでは50%程度なのに、df -iでIUse%が100%に近い場合、inode不足を疑います。

まずdf -iでinodeの使用状況を確認する

最初に次のコマンドを実行します。

df -i

ルートファイルシステムだけを確認したい場合は、次のようにします。

df -i /

IUse%が非常に高い場合は、ファイル数が多すぎないかを調べます。

ただし、inode使用率が高いというだけで、すぐにファイルを削除するのは避けてください。

どのディレクトリが原因なのかを確認してから対処することが重要です。

inodeを大量に使っているディレクトリを探す

ルートディレクトリから、各ディレクトリに存在するファイル数を確認できます。

例えば次のコマンドです。

sudo find /var -xdev -type f | wc -l

これは/var以下にあるファイル数を数えます。

/varにはログやキャッシュなどが保存されるため、inode不足の原因を調べる際に確認する価値があります。

さらに、ディレクトリごとのファイル数を確認する場合は、次のような方法があります。

sudo find /var -xdev -type f -printf '%h\n' | sort | uniq -c | sort -nr | head

大量のファイルが存在する場所を絞り込むのに役立ちます。

ただし、サーバー上のファイル数が非常に多い場合、findの実行自体に時間がかかることがあります。

本番環境では負荷にも注意してください。

小さなファイルが大量にある場合

inode不足では、1つの巨大なファイルが原因とは限りません。

例えば、

/var/log/app/
    log-000001
    log-000002
    log-000003
    ...

のように、小さなファイルが何十万、何百万と作られているケースがあります。

1ファイルあたりのサイズが小さくても、ファイル数が増えればinodeを消費します。

そのため、

「ディスク使用量が少ないから問題ない」

とは限りません。

/var以下を確認する

Linuxでは、ログやキャッシュなどが/var以下に保存されることがあります。

まず、どのディレクトリにファイルが集中しているのか確認します。

sudo find /var -xdev -type f | wc -l

さらにログ関連を確認する場合は、

sudo find /var/log -xdev -type f | wc -l

とします。

ログファイルが増え続けている場合は、単純に削除するのではなく、ログローテーションが正常に動作しているかも確認してください。

例えばlogrotateを利用している環境では、設定や実行状況を確認します。

systemctl status logrotate

環境によってはtimerやcronから実行されている場合もあるため、実際の構成に合わせて確認します。

Docker環境ではコンテナ関連も確認する

Dockerを利用しているサーバーでは、コンテナやログ、アプリケーションが大量のファイルを生成している場合があります。

まずDockerの使用状況を確認します。

docker system df

ただし、このコマンドで容量が少なく見えても、inode不足の原因がないとは限りません。

ホスト側のファイルシステムについて、

df -i

を確認し、Docker関連ディレクトリに大量のファイルが存在していないか調べます。

Dockerのログ設定やアプリケーションのログ出力方法によっても状況は変わるため、原因を確認してから不要なデータを整理してください。

inode不足の原因を見つけたらどうする?

原因が分かったら、不要なファイルを整理します。

例えば、明らかに不要な古い一時ファイルが大量にある場合は、保存期間や削除条件を確認したうえで整理します。

一方で、

  • アプリケーションのデータ
  • データベース関連ファイル
  • システムファイル
  • 現在使用中のログ
  • Dockerの実行環境に必要なファイル

などを確認せずに削除するのは危険です。

特に、

sudo rm -rf /var/*

のような大規模な削除は避けてください。

「inodeを空ける」という目的だけでファイルを消すのではなく、なぜ大量に作られたのかまで確認することが重要です。

inode不足を防ぐには?

inode枯渇を繰り返さないためには、ファイルが大量に増える仕組みを見直す必要があります。

例えば次のような対策があります。

  • ログローテーションを確認する
  • 不要な一時ファイルを定期的に整理する
  • アプリケーションのログ出力を見直す
  • キャッシュの保存期間を確認する
  • Dockerのログ設定を確認する
  • 大量の小さなファイルを生成する処理を調査する
  • 定期的にdf -hとdf -iを監視する

特にサーバー監視を設定している場合は、ディスク容量だけでなくinode使用率も監視対象にすると異常を早く発見できます。

「No space left on device」が出たら何を確認する?

ファイルを作成できない、パッケージをインストールできないなどの問題が発生した場合は、次の順番で確認すると切り分けやすくなります。

1. ディスク容量を確認

df -h

2. inodeを確認

df -i

3. ファイルが大量にある場所を調べる

sudo find /var -xdev -type f | wc -l

4. 原因となっているサービスを確認

ログ、キャッシュ、Docker、アプリケーションなど、ファイルを大量に生成しているサービスを調べます。

5. 不要なデータを安全に整理する

削除前に、ファイルの用途・保存期間・サービスへの影響を確認します。

6. 再発防止を行う

ログローテーションやアプリケーション設定、監視方法などを見直します。

まとめ

Linuxで「No space left on device」が発生した場合、ディスク容量だけを確認して終わりにするのは危険です。

df -h

で容量を確認したうえで、

df -i

を実行し、inodeの使用率も確認してください。

ディスク容量には余裕があるのにinode使用率が100%に近い場合は、大量の小さなファイルが作られていないかを調べる必要があります。

原因を特定する際はfindなどを使ってファイル数の多いディレクトリを絞り込み、ログ・キャッシュ・Docker・アプリケーションなど、実際にファイルを生成している仕組みを確認します。

不要なファイルを見つけても、すぐに削除するのではなく、そのファイルが何のために存在するのかを確認してから整理することが大切です。

inodeが100%になるとどうなりますか?

新しいファイルやディレクトリを作成できなくなる場合があります。ディスク容量が残っていても、ファイルを作成するために必要なinodeが不足するとエラーが発生することがあります。

df -hでは余裕があるのに「No space left on device」が出るのはなぜですか?

inodeが枯渇している可能性があります。

df -i

を実行し、IUse%を確認してください。

inode不足の原因はどうやって調べますか?

大量のファイルが存在するディレクトリを探します。

例えば/var以下を調べる場合は、

sudo find /var -xdev -type f | wc -l

などを使えます。

inode不足ならファイルを削除すれば解決しますか?

不要なファイルを整理することで改善する場合がありますが、原因を確認せずに削除するのは危険です。

特にシステムファイルやデータベース、Docker関連ファイルなどは、削除によってサービスが停止する可能性があります。

inode使用率も監視したほうがいいですか?

はい。サーバーを継続的に運用する場合は、ディスク容量だけでなくinode使用率も監視すると、ファイル数の増加による障害を早めに発見できます。

類似投稿