iノード (Index Node) とは Unix 系のOSで使用されるファイルの管理方式です。ファイルは実データと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 トップ]