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)番号
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