kazmax - Linux で自宅サーバー

iノード(inode)とは

ext2や、ext3、ext4というファイルシステムの上で、ファイルやディレクトリを管理するためのデータの事をiノード(inode)といいます。ファイルには、実データの他に、作成者、グループ、作成日時、サイズ等々の属性的な情報が存在しますが、この属性的な情報の部分をiノード(inode)はデータとしてもちます。

ファイルシステムを作成した時に、ファイルの実際のデータが記録されるデータ領域とともにiノード(inode)領域というものが作成され、この領域へiノード(inode)の情報が書き込まれます。

ここでは、iノード(inode)について説明します。

Last Update : 2013年10月16日

iノード(inode)とは 項目

  1. iノード(inode)番号
  2. iノード(inode)に管理されるもの
  3. iノード(inode)領域の使用状況の確認
  4. ファイル・ディレクトリのiノード(inode)番号の確認

1. iノード(inode)番号

iノード(inode)番号とは、ファイルやディレクトリに割り振られる、重複しない番号の事をいいます。パーティションサイズにより限界値が決められます。

全てのファイル、ディレクトリに対しiノード(inode)番号が割り振られ、全てのiノード(inode)番号に対応するiノード(inode)が存在します。

2. iノード(inode)に管理されるものとは

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

memo

inodeは、ファイルの属性を管理していますが、ファイル名は管理していません。ファイル名は、対応するinode番号と共にディレクトリがリストとして管理しています。

3. iノード(inode)領域の使用状況の確認

iノード(inode)番号には上限があり、この上限を超えるiノード(inode)は作成する事ができません。

例えば、細かいファイルを大量に作成し、iノード(inode)番号を使い切ると、データ領域の容量が余っていても新規にファイルを作成する事はできなくなります。

現在のiノード(inode)領域の使用状況を確認するには、dfコマンド(オプション i )を使います。

# df -i
Filesystem  Inodes   IUsed   IFree IUse% マウント位置
/dev/sda2   363600   85013  278587   24% /
tmpfs       127561       5  127556    1% /dev/shm
/dev/sda1   128016      44  127972    1% /boot
/dev/sdb1     4016      12    4004    1% /mnt/sdb1

各フィールドの意味

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

上記の例の場合、/dev/sda2 というデバイスでは、

  • 全部で363600個のinodeを作成する事ができる。
  • =(イコール)363600個が作成できるファイル、ディレクトリの個数の限界。
  • 現在85013個のファイル/ディレクトリが存在する。
  • 残り278587個のファイル/ディレクトリを作成する事ができる。

ということがわかります。

memo

inodeを限界まで使った場合の挙動について

/dev/sdb1というサイズの小さなパーティションを作成し、inodeを限界まで使った場合の挙動を試してみます。

# df -i /dev/sdb1   ← /dev/sdb1 のinodeの限界値を確認する
Filesystem   Inodes   IUsed   IFree IUse% マウント位置
/dev/sdb1      4016      12    4004    1% /mnt/sdb1  ← /dev/sdb1のinodeの限界値は4016

df コマンドの結果から、/dev/sdb1のinode数の限界値が4016個、残り4004個のファイル/ディレクトリを作成可能という事がわかります。

ここで、/dev/sdb1 にファイルを4004個作成し、inodeを限界まで使ってみます。

# touch {1..4004}.txt ← ファイルを4004個作成する
# df -i /dev/sdb1
Filesystem   Inodes   IUsed   IFree IUse% マウント位置
/dev/sdb1      4016    4016       0  100% /mnt/sdb1 ← IFreeは0。IUse%が100%。

/dev/sdb1 で使用できるinodeをすべて使い切っている状態です。

ディスクの容量を確認してみます。

# df -h /dev/sdb1
Filesystem   Size  Used Avail Use% マウント位置
/dev/sdb1     16M  1.3M   14M   9% /mnt/sdb1  ← 容量にはまだ余裕がある。

/dev/sdb1 のinodeをすべて使いはたした状態ですが、ディスク容量には余裕があります。
ここで、例えば0byteのファイルを作成しようとすると以下のようになります。

# touch test.txt
touch: cannot touch `test.txt': デバイスに空き領域がありません

容量に余裕があっても、inodeを限界まで使っているとファイルが作成できなくなる事がわかります。

4. ファイル・ディレクトリのiノード(inode)番号の確認

ファイル・ディレクトリのiノード(inode)番号を確認するには、ls コマンド(オプション i )を使います。

$ ls -li
合計 0
 5740 -rw-rw-r--. 1 user1 group1 0  9月 14 16:57 2013 test0.txt ← inode番号は、 5740
15118 -rw-rw-r--. 1 user1 group1 0  9月 14 16:57 2013 test1.txt ← inode番号は、15118
15123 -rw-rw-r--. 1 user1 group1 0  9月 14 16:57 2013 test2.txt ← inode番号は、15123
Linuxファイルシステム 関連記事
Linux 基礎知識 関連記事