メンテナンス・トラブルシュート - ディスク・ファイル・メモリ - inode が枯渇する
- 1. 概要
- 2. 参考サイト
- 3. inode の数をディレクトリ単位で調査する
1. 概要
実際に現象が発生したのは、CentOS なのですが、調査するのに使ったコマンドは FreeBSD にそのまま使えそうなので、記録しておきます。
対象のマシンで何かのスクリプト(最終的に cp で発生したようですが)を実行したときに
cp: cannot create regular file `/パス/ファイル名': デバイスに空き領域がありません
と出力されたのです。
df コマンドで見てみると(実際のマシンではないので値は全然違います)
> df -H
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 306G 33G 249G 12% /
devfs 1.0k 1.0k 0B 100% /dev
実際のマシンで、ディスク容量そのものには充分な空きがありました。
あれこれ試した結果
> df -i -H
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/ada0p2 306G 33G 249G 12% 767k 38M 2% /
devfs 1.0k 1.0k 0B 100% 0 0 100% /dev
と inode を見たときに実際のマシンでは %iused が 100% になっていて、ファイルが何も作られない状況にあったのです。
inode をこんな感じで意識したことはなかったなぁ。
で、あわくって調べるわけです。
2. 参考サイト
inode が何者かについては「i ノード(inode)とは」が大変参考になります。
かいつまんでいうとファイルおよびディレクトリ1つにつき1つ分のエリアを使用するもので、ディスクの容量とフォーマットによって最大数が決まってくるもの・・・。
これを調べることに関しては「Linux で inode が枯渇した場合にどうやって調査するか - astamuse Lab」が大変参考になります。
3. inode の数をディレクトリ単位で調査する
ここは、参考サイトまるまるでコマンドを使用して(この時点でコマンドの意味を理解していない)
> find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -nr
523439 usr
131480 var
2614 boot
2099 root
491 etc
243 tmp
146 rescue
134 sbin
73 lib
45 bin
8 libexec
1 entropy
1 COPYRIGHT
1 .sujournal
1 .rnd
1 .profile
1 .cshrc
ルートディレクトリの下のファイルの数をディレクトリ単位で集計して、多い順にソートしているようです。
では、ここで /usr が多いのがわかったので /usr 以下を見るには、以下のようにして調べるようです。
> find /usr -xdev -type f | cut -d "/" -f 3 | sort | uniq -c | sort -nr
201471 ports
173173 local
72544 src
39800 home
15498 share
15219 obj
2324 lib
1811 include
506 lib32
485 bin
294 sbin
272 libexec
31 libdata
13 tests
なるほど、法則はわかりました。
> find /パス -xdev -type f | cut -d "/" -f 3 | sort | uniq -c | sort -nr
↑ ↑
パスを指定 パスの階層+2の値を指定
って指定していけば、ディレクトリ単位でファイル数(≒inode の数)が調べられます。
|
|