@tooljpさんをフォロー

iノード数の確認コマンド、上限に関して 【Redhat Enterprise Linux 6】

iノード (Index Node) とは Unix 系のOSで使用されるファイルの管理方式です。ファイルは実データとiノードで管理されています。iノードでは主に以下の情報が管理されています。

iノードには最大の上限数があるため、iノードを使い切ると実際にディスクに空き容量があっても新規にファイルを作成できなくなります。

1.ファイル作成とiノード数の増減

iノード数を確認するには df -i コマンドを使用します。以下の例ではファイル作成の前と後でのiノード数の増減を確認しています。

(1)df -i で現在の iノード 数を確認します。/ (システムのルートパーティション)の iノード の使用数は85867 、空き数は1195253であることが分かります。
(2)touch コマンドでファイルを1個新規に作成しています。
(3)再度 df -i で現在の iノード 数を確認します。iノード の使用数は85868 、空き数は1195252であることが分かります。使用数が1増えて、空きが1つ減っているのが分かります。

# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 1281120 85867 1195253 7% /
tmpfs 256395 3 256392 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
/dev/sda6 128016 71 127945 1% /tmp
/dev/sda3 128000 2673 125327 3% /var
# touch test
# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 1281120 85868 1195252 7% /
tmpfs 256395 3 256392 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
/dev/sda6 128016 71 127945 1% /tmp
/dev/sda3 128000 2673 125327 3% /var

2.ファイルを大量作成し iノードを使い切る

ここでは以下のシェルを使用して大量の小さなファイルを作成し、iノードを使い切る場合の動作を確認します。

このシェルでは1バイトのファイルを1,300,000個作成します。

#!/bin/sh

CNT=1

while [[ $CNT -le 1300000 ]];
do
dd if=/dev/zero of=test_$CNT bs=1 count=1 > /dev/null 2>&1
CNT=`expr $CNT + 1`
done

exit 0

(1)df -i で現在の iノード 数を確認します。/ (システムのルートパーティション)の iノード の使用数は85868 、空き数は1195252であることが分かります。
(2)上記のシェルで大量の1バイトのファイルを作成します。
(3)再度 df -i で現在の iノード 数を確認します。iノード の使用数は1281120 、空き数は0であることが分かります。シェル実行前の空きが1195252であるためiノードの空きが足らずすべてのファイルは作成できていません。

# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 1281120 85868 1195252 7% /
tmpfs 256395 3 256392 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
/dev/sda6 128016 75 127941 1% /tmp
/dev/sda3 128000 2671 125329 3% /var
# ./test.sh
# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 1281120 1281120 0 100% /
tmpfs 256395 3 256392 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
/dev/sda6 128016 81 127935 1% /tmp
/dev/sda3 128000 2673 125327 3% /var

この状況で touch コマンドやリダイレクトでファイルを実行しても"No space left on device" エラーが発生してファイルは作成できていません。

# touch test.txt
touch: cannot touch `test.txt': No space left on device
# echo test > test.txt
bash: test.txt: No space left on device
# dd if=/dev/zero of=test_$CNT bs=1 count=1
dd: opening `test_': No space left on device

作成したファイルをすべて削除します。大量のファイルを rm コマンドで削除するとエラーが発生するので、xargs コマンドを使用して削除します。
以下の通りiノード数の空きが1195252に回復していることが分かります。

# find ./ -name 'test_*' | xargs rm
# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 1281120 85868 1195252 7% /
tmpfs 256395 3 256392 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
/dev/sda6 128016 84 127932 1% /tmp
/dev/sda3 128000 2673 125327 3% /var

[redhat linux 技術ドキュメント トップ]
[FAQ CENTER トップ]