ニクニクドットミー

カッコいいおっさんを目指すエンジニアの厳かなブログ

iノードを学ぶ

Desktop

iノードとはファイルシステム上でファイルやディレクトリを管理するためのデータです。

iノード番号というものがあり、これは限りがあります。この限界を超えてしまうとファイルやディレクトリが作成できなくなってしまうのです。 このiノード番号はパーティションサイズにより限界値が決まります。

iノードで管理されるもの

iノード番号、UID(ユーザID)、GID(グループID)、パーミッション、ファイルサイズ、ファイル作成時間、更新日時、実際のデータの位置(ディスク上の物理的な場所)、そのファイル自身への参照数を管理しています。

確かめてみる

vagrantでubuntu14.04を立ち上げてみて、iノードを見てます。


# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda1      2621440 69573 2551867    3% /
none             62719     2   62717    1% /sys/fs/cgroup
udev             61480   401   61079    1% /dev
tmpfs            62719   328   62391    1% /run
none             62719     1   62718    1% /run/lock
none             62719     1   62718    1% /run/shm
none             62719     2   62717    1% /run/user
vagrant           1000     0    1000    0% /vagrant
vagrant_data      1000     0    1000    0% /vagrant_data

各フィールドの意味

フィールド名意味
Inodesそのデバイスで作成できる、inodeの限界値
IUsed現在のinode 使用量
IFree残り作成できるinode数
IUse%inodeの使用率(%)

/dev/sda1はiノードが2621440あって、現在69573使っていて残りは2551867みたいですね。 残り2551867はファイルやディレクトリが作成できます。

次にiノード番号を見てみます。 hoge.txtを作りました。


# ls -li
total 0
284 -rw-r--r-- 1 root root 0 Sep 25 04:33 hoge.txt

一番左がiノード番号ですので、284これがhoge.txtのiノード番号です。

そういえば、ファイルを作る前は/dev/sda1はiノードの残りが、2551867でした。 hoge.txtを作った後はどうなったか見てみます。


# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda1      2621440 69574 2551866    3% /

ちゃんと1減ってますね。

iノードを枯渇させてみる

iノードが少ないパーティションを用意してみました。


Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda5         2560    11    2549    1% /mnt

iノードの空きが2549あるので、2549個ファイルを作ってみます。


touch {1..2549}.txt

Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda5         2560  2560       0  100% /mnt

見事iノードが100%になりました。この状態でファイルを作ろうとすると。。。


touch hoge.txt
touch: cannot touch ‘hoge.txt’: No space left on device

空き容量が無いとエラーになりました。実際に容量をみてみると余裕はあります。


df -h /mnt
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda5       8.7M  147K  7.9M   2% /mnt

まとめ

  • iノードがiノード番号、UID(ユーザID)、GID(グループID)、パーミッション、ファイルサイズ、ファイル作成時間、更新日時、実際のデータの位置(ディスク上の物理的な場所)、そのファイル自身への参照数を管理している
  • パーティションサイズによってiノードの限界値が決まる
  • ディスク容量だけ注視するのではなく、iノードの数にも気をつける
  • 大量にファイルが作成される場合は、iノードの数に気をつける

参考サイト

iノード(inode)とは iノードってなに? iノードの理解を深める