Viblo CTF
+1

inode枯渇問題に対処する

inodeの枯渇問題について調べる機会があったのでまとめてみた。

どんなOSにも必ずFilesystemとうものが存在していてFilesystemの基本的な役割の中にデータの管理というものがあります。

データというものはハードディスク上にバラバラに存在していますが、そのデータをひとまとめのデータとしてファイルという形で提供する事がFilesystemの中のinodeの役割です。

ここで起きているinodeの枯渇問題とは何か

inodeは上記したようにハードディスク上に散在したデータを管理しています。そのための管理情報をinodeは保持をしています。

  • ファイルの長さ
  • デバイスID
  • ファイル所有者のユーザID
  • ファイルのグループID
  • ファイルシステム内でファイルを識別する inode 番号
  • ファイルモード(ファイルパーミッション)
  • 最終 inode 更新時(ctime)、最終ファイル更新時(mtime)、最終参照時(atime) を示すタイムスタンプ群
  • その inode を指すハードリンクがいくつあるかを示す参照カウント

このinodeを保存するinodeテーブルというものが存在して、それのテーブルの容量は決まっています。それの容量を超えてinodeを追加する事はできません。

つまり,いくらハードディスクの容量が余っていたとしてもinodeを管理するテーブルの容量が満杯だとファイルがどこにあるかを記憶できないので結果的にファイルを作る事ができません。

これがinode枯渇問題です。

Ubuntu(9.10~)やCentOS(5.6~6.6)でデフォルトで設定されているfilesystemはext4ですがext4は最初に設定したinodeの容量を後から変更する事が出来ません。

ext4でinodeを格納する容量(Free inode)を増やしたければfilesystemを新たに作る事でしか対応出来ません。以下のコマンドがファイルシステムを作成するコマンドです。

$ mke2fs -i Byte -t filesystem

mk2fsというコマンドは新たにファイルシステムを作るコマンドです

  • iオプションはbyte per nodeといいinodeが管理できるファイルの大きさを指定しています。小さいファイルばかり扱っていてfree inodeが枯渇している場合はこの値を小さくして相対的にfree inodeを増やす事で対応します。

オプションのiを利用してinodeに関するオプションを指定する事で枯渇問題に対処する事ができます。


All Rights Reserved