通常、iノードテーブルのサイズを変更できないのはなぜですか?


19

Unixファイルシステムには通常iノードテーブルがあり、このテーブルのエントリ数は通常、ファイルシステムの作成時に固定されています。これにより、十分なディスク容量を持つユーザーが空き容量がないという混乱したエラーメッセージを表示することがあり、問題を特定した後でも、それをどうするかについての簡単な解決策はありません。

しかし、(私には)ユーザーとシステム管理者に完全に透過的にiノードをオンデマンドで割り当てることにより、この混乱を回避することが非常に望ましいと思われます。あなたがかわいいハックに夢中なら、inodeテーブル自体をファイルにすることさえできます。したがって、ディスク上の空きスペースを見つける既存のコードを再利用できます。運がよければ、この結果を明示的に達成しようとせずに、ファイル自体の近くにiノードが存在することになるかもしれません。

しかし、誰も(私が知っている)実際にこれを行っていないので、おそらく私が見逃しているキャッチがあります。それが何であるか考えていますか?


4
NTFSのマスターファイルテーブルの前身であるVMSで、マスターファイルディレクトリとファイルのインデックス-11を再発明しました。
-JdeBP

MFTの前駆体を再発明しましたか?クール!
マークVY

回答:


26

iノードテーブルをファイルにしたとしましょう。次の質問は...そのファイルに関する情報をどこに保存しますか?したがって、MS-DOSパーティションテーブルのような「実際の」iノードと「拡張」iノードが必要になります。つまり、必要なのは1つだけです(または、おそらく数日です。たとえば、ジャーナルをファイルにすることもできます)。しかし、実際には、特別な場合、異なるコードがあります。そのファイルの破損も悲惨なものになります。また、ジャーナリングの前に、たとえば電源が切れたときなどに書き込まれているファイルが重度の損傷を受けたことがよくあったことを考慮してください。あなたのファイル操作はたくさんする必要があります、より堅牢な対の電源障害/クラッシュの/ etc。たとえばext2の場合よりも

従来のUnixファイルシステムでは、Xブロックごとにiノードブロック(またはブロックのグループ)を配置する、より単純な(より堅牢な)ソリューションが見つかりました。次に、簡単な算術でそれらを見つけます。もちろん、(ファイルシステム全体を再構築せずに)さらに追加することはできません。また、停電時に書き込みを行っていたiノードブロックを紛失/破損した場合でも、ファイルシステムのかなりの部分よりもはるかに優れているのは、わずかなiノードだけです。

より現代的な設計では、Bツリーバリアントのようなものを使用します。btrfs、XFS、ZFSなどの最新のファイルシステムは、iノードの制限を受けません。


2
「iノードの制限を受けない」と言うとき、それは新しいiノードが完全に舞台裏で割り当てられることを意味しますか、または誰かが「expand-table-now-please」のようなコマンドを実行する必要がありますか?
マークVY

3
@MarkVYは完全に舞台裏で(iノードが実際に使用されている場合)。
デロベルト

さて、私の知識は明らかに時代遅れになっています。詳細な回答ありがとうございます。電力損失などの場合に何が起こるかは考えもしませんでした。そのため、「ファイルに追加」がファイルシステムのアトミックな操作でない限り、私のかわいいハックはかなり危険です。あなたが主張することは、昔はかなりまれでした。
マークVY

XFSとbtrfsが非常にまれに軽度のファイルシステムの破損に苦しんでいることを覚えています-zfsもですか?一部の人にとってはリスクではありませんが、重要なデータや動的割り当てのコストにとってはリスクになる可能性があります。このショップのXFSにとって、その重大な問題は、何らかの方法でファイルシステムを縮小できないことでした。
user2066657

Btrfsはiノードの制限に苦しむことはありませんが、同様に混乱する症状を引き起こすまったく異なる障害に苦しんでいます(基本的には、ブロックグループの非効率な使用のために、まだ十分なデータスペースが利用できる一方でメタデータスペースが不足しています)。これにより、df十分な空き領域が報告されたときにディスクフルエラーが報告されるだけでなく、ファイルを削除するにはメタデータ領域を割り当てる必要があるため、ファイルを削除しても修正できません。
マーク

17

多くのファイルシステムには、動的に割り当て可能なiノードテーブル(またはそれに相当するもの)(XFS、BTRFS、ZFS、VxFS ...)があります。

しかし、元のUnix UFSにはファイルシステムの作成時に修正されたiノードがあり、それに由来するファイルシステム(Linux EXT、Solaris UFS)はしばしばスキームを継続していました。堅牢で実装が簡単です。非常に多くのユースケースが適しているため、1つの問題を回避するためだけに新しいファイルシステムを設計するのは簡単ではありません。


しかし、コンピューティングの多くの進歩は、正当化するのが容易ではない問題を解決する人々によってなされました。
user253751

2
しかし、また、解決が容易ではない解決策の多くの進歩:)初期の「複雑な」ファイルシステム-NT時代NTFS、reiserfs-は、失敗したときに破滅的に失敗する方法がありました
。...-rackandboneman

6

iノードを動的に割り当てるファイルシステムがあります:少なくとも、Veritas VxFS(= HP-UXのデフォルトファイルシステム、およびSolarisで利用可能な選択肢の1つ)とXFS(RHEL 7の標準ファイルシステムタイプ)が機能しますそのように。BtrfsとIBMのJFSも。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.