Armadilloフォーラム

Armadillo410 inodeについて

sankyo_takada

2015年12月24日 10時13分

いつもお世話になっております。
高田と申します。

inodeについて質問があります。
新規でファイルを生成しようとしたところ「No space left on device」というメッセージが表示されファイルが生成できませんでした。
freeでメモリ容量を調べたところまだ余裕がありそうだったので他の要因を調べたところinodeが枯渇しているようです。
「Armadillo実践開発ガイド 第2部」の8.6.2.章を参考にinode数上限を増やしたところ、正常に動作するようになりました。

以下質問です。
過去のメーリスを参考にinode使用数を確認したところ、使用数は「790」でした。
http://lists.atmark-techno.com/pipermail/armadillo/2007-August/001859.h…

このinode使用数をArmadillo上で確認する方法はないでしょうか?
inode数上限を決める際、どの程度まで増やせばいいか指標にしたいためです。

また、inodeは全ファイルに対して存在するという認識ですが、例えば以下のコマンドで全てのファイル数を調べると、
ユーザーランドのmenuconfigで設定したinode数を大きく超えるファイル数となります。
(設定が1280に対して表示されるファイル数は5975になります)
find /. -type f | wc -l
これは、上記コマンドで表示されるファイル数はカーネルとユーザーランドを合わせた全ファイル数であり、
先の手順で調べたinode使用数(今回は790)はユーザーランドのファイル数という認識で合っていますでしょうか?

なお、環境は以下になります。
Armadillo410
Linux2.6.26

初歩的な質問で恐縮ですが、よろしくお願いいたします。

コメント

at_kojiro.yamada

2015年12月24日 14時32分

> inodeについて質問があります。
> 新規でファイルを生成しようとしたところ「No space left on device」というメッセージが表示されファイルが生成できませんでした。
> freeでメモリ容量を調べたところまだ余裕がありそうだったので他の要因を調べたところinodeが枯渇しているようです。
> 「Armadillo実践開発ガイド 第2部」の8.6.2.章を参考にinode数上限を増やしたところ、正常に動作するようになりました。

free コマンドはメモリ使用率を見るものなので、
"No space left on device" のメッセージとは直接は関係ありません。

Armadilloではルートファイルシステムをramfs上に展開して使用しているので
メモリ使用率も無関係ではないのですが、それとは別にファイルシステムとし
てのディスク容量が決まっています。

ファイルシステムのディスク使用量は df コマンドで確認できます。

>
> 以下質問です。
> 過去のメーリスを参考にinode使用数を確認したところ、使用数は「790」でした。
> http://lists.atmark-techno.com/pipermail/armadillo/2007-August/001859.h…
>
> このinode使用数をArmadillo上で確認する方法はないでしょうか?
> inode数上限を決める際、どの程度まで増やせばいいか指標にしたいためです。

ファイルシステムがext2であれば、
tune2fsコマンドでinodeの上限を調べられます。

[Armadillo]# tune2fs -l /dev/ram0
:(略)
Inode count:              1344
:(略)
[Armadillo]# 

> また、inodeは全ファイルに対して存在するという認識ですが、例えば以下のコマンドで全てのファイル数を調べると、
> ユーザーランドのmenuconfigで設定したinode数を大きく超えるファイル数となります。
> (設定が1280に対して表示されるファイル数は5975になります)
> find /. -type f | wc -l
> これは、上記コマンドで表示されるファイル数はカーネルとユーザーランドを合わせた全ファイル数であり、
> 先の手順で調べたinode使用数(今回は790)はユーザーランドのファイル数という認識で合っていますでしょうか?

違います。

1つのinodeに対して複数の名前(ファイル)を関連付けることができるので(ハードリンク)、
ファイル数とinode数が同じになるとは限りません。
そのため、inode使用数 = ファイル数である、
とはそもそも言い切れません。

また、上記コマンドで表示されるのは、ルートディレクトリから辿れる通常ファイルの数です。
/mnt などに別のファイルシステムがマウントされていれば、
それらのファイルシステム上のファイルもカウントされます。

mountコマンドを引数を与えずに実行してみてください。
/dev/ /sys/ などに別のファイルシステムがマウントされているはずです。

at_kojiro.yamada

2015年12月24日 14時53分

> > 以下質問です。
> > 過去のメーリスを参考にinode使用数を確認したところ、使用数は「790」でした。
> > http://lists.atmark-techno.com/pipermail/armadillo/2007-August/001859.h…
> >
> > このinode使用数をArmadillo上で確認する方法はないでしょうか?
> > inode数上限を決める際、どの程度まで増やせばいいか指標にしたいためです。
>
> ファイルシステムがext2であれば、
> tune2fsコマンドでinodeの上限を調べられます。
>
>

> [Armadillo]# tune2fs -l /dev/ram0
> :(略)
> Inode count:              1344
> :(略)
> [Armadillo]# 
> 

申し訳ありません。
質問は、Armadillo上でのinode使用数の確認方法
でした。

tune2fsコマンドで表示されるものの中に
Free inodes
があります。

Inode count から Free inodes を引き算すれば、
inode使用数を知ることができます。

お世話になっております、高田です。
早々のご回答ありがとうございます。

「No space left on device」が発生した際、Free inodesがゼロとなっていることが確認できました。
inode数上限の決定方法ですが、一般的にはどのように行うものなのでしょうか。
ユーザーアプリがファイルを最も多く処理するであろう機能を実行した際のinode使用数を確認し、+マージンを取るといった感じでしょうか。
ユーザーアプリでは扱うファイル数の上限が決まっており、これを求めることはできるのですが、
ファイル操作を行った場合にOSがinodeを使用する可能性もあると考え、マージンをどの程度とるべきなのかで悩んでいます。

よろしくお願い致します。

齊藤と申します

inodeはファイルシステムでファイルを管理するためのデータ構造で、ファイル1個につき1個消費します。
ただしここで言う「ファイル」はUNIXの世界で言うファイルであり
・データを入れるファイル(レギュラーファイル)
・ディレクトリ
・デバイスノード
・名前つきパイプ
・シンボリックリンク
など全てが「ファイル」です。
また、ハードリンク機能を使うことで一つのファイルが複数のファイル名(パス名)を持つことがあるので、見かけのファイル数(ファイルシステムに存在するファイル名の個数)とinode消費数は異なる事があります。
busyboxのdfが今確認できないのですが、df -i でファイルシステムのinodeの使用状況を表示させることが出来ます。

またファイルシステム上のinodeとは別に、inodeをカーネルがキャッシュするためのinode領域もあります(大昔のUNIXではこれも固定サイズでカーネルconfigパラメータだった)。
今回のトラブルはファイルシステムのinodeを使い果たしたのですね。ファイル操作を行なった場合にOSが使用するのは「カーネルメモリ空間上のinodeキャッシュ」でありますので、今回のトラブルではそっちはほとんど考慮しなくていいです。
システムを運用してたらOSが勝手に作るログファイルもいくつかありますが、それらは誤差でしょう。何ヶ月も連続稼働させるのなら,ログファイルの扱いも(漫然と増え続けないように)カスタマイズした方が良いですけども。

ファイルシステムのinodeはあとから増やすことが出来ないので安全側に降って多めに作るのが通例です。

> ユーザーアプリがファイルを最も多く処理するであろう機能を実行した際のinode使用数を確認し、+マージンを取るといった感じでしょうか。
それで良いと思いますよ。

アプリがファイルを作ってない時点のROMFSの空き容量と空きinode数を調べておいて、
(ファイルシステムの空き容量÷アプリが作るファイルサイズの最小値)個 だけ追加でファイルを作ることがある
想定でinodeを作っておくのがかなり保守的なやりかたかなぁ。

(ファイルシステムの空き容量÷アプリが作るファイルサイズの平均値)×安全率 個 だけ追加でファイルを作ることがある
想定くらいでいいとおもいます。安全率は1.3~2.0あたりかなぁ。

齊藤 様

ご丁寧な回答ありがとうございます。

今回はユーザーアプリが扱うファイル数の上限が決まっておりますので、
ユーザーアプリ起動時の空きinode数と処理する最大ファイル数から上限を設定してみます。

なお、df -iも試してみたのですが、残念ながら対応していないようでした。
また、OSが使用するinodeキャッシュというものがあるんですね。
今回は連続稼働させる装置ではないためログ等の扱いは考慮しませんが、大変参考になります。
ありがとうございました。

高田