Linuxファイルシステムにおけるiノードについて

8月 27, 2009

前回の投稿Linuxファイルシステムにおけるスーパーブロックとは?で、ファイルシステム
の管理領域であるスーパーブロックに、iノード数や空きノード数が格納されるということ
を書いた。Linux他、UNIX系OSのファイルシステムにおいてiノードは重要な概念。
ということで、勝手におさらいします。

iノードはLinuxのファイルシステムにおいて、ファイルの属性や管理情報を格納している
管理領域(インデックス)となる。この管理領域はファイルのデータ(中身)とは別に
保存されている。
ファイルのデータはデータブロックに、属性情報はiノードブロックに格納される。

ここでファイル保存時にどちらかの書込みが失敗すると、整合性がとれなくなる。
整合性のチェックにはfsck、ですね。

iノードブロックに格納される情報は以下となる。

・ファイル種別
・ファイルサイズ
・アクセス権
・所有者
・リンク
・ディスク上の保存場所(ブロック番号)


使用可能なiノード数はファイルシステム作成時にあらかじめ決定され、後から追加する
ことはできない。iノードはファイルやディレクトリを作るたびに1つずつ使われて行くため
(ファイルをディスクに保存するたびに、重複しないiノード番号が割当られる)、大量に
ファイルを作成・保存していくうちにiノードが枯渇してしまう可能性がある。
こうなるとディスクに空き容量があったとしても新規にファイルを保存できなくなるため、
iノードの使用状況にも注意が必要となる。

iノードの使用状況はdf -i コマンドで確認することができる。
また、ls -i コマンドでファイルのiノード番号を確認できる。

ハードリンクを作成すると元ファイルとリンク先ファイルは同じiノードを持っている、
というのは基本中の基本。
(これに対してシンボリックリンクは、リンク先の情報をiノードではなくパス名、
つまり保存先で保持する仕組みになっている)

…などなど、教科書的なことしか書いていないけど(というかそのまんま)、iノード数
が上限に達して新たにファイルを保存できなくなってしまった、という事例には実際に
遭遇したことがある。

紆余曲折あったものの、最終的には不要なファイルを徹底的に削除して再起動したらOK、
だったような。
ついついディスクの空き容量だけに注目しがちだけど、iノードの監視も忘れないように、
ってことですね!

追記:ReiserFS、XFSは動的iノードという仕組みが導入されているため、iノード枯渇
という事象は基本的におきないらしい。

関連記事
Linuxファイルシステムにおけるスーパーブロックとは?
tune2fs -lとdumpe2fs
Linux: mkfsコマンドなど
fsckとe2fsckの違いって?
LVMとfsck
fsckの”-f”オプションって?

Categories: Linux

No Responses so far | Have Your Say!

Comments are closed.