web-dev-qa-db-ja.com

FATファイルシステムがリンクをサポートしないのはなぜですか?

FATファイルシステムは、クラスターのリンクリスト(リンクファイルアロケーション)を介してファイルを表します。

それらには、アドレス可能なクラスターと同じ数のエントリを持つ1つ以上のテーブル(ファイルアロケーションテーブル)用の領域がディスク上にあります。各エントリは次のようになります。

  • ファイルのリンクリスト内の次のクラスターへのポインター
  • リンクリストの最後のクラスターを示すマーカー
  • 未使用のマーカー
  • 悪いマーカー

シンボリックリンクの場合、FATはextファイルシステムのようにファイルパスをポイントしたり保存したりすることはできないと思います。私が考えることができる最も近いことは、リンクリストの先頭を指すことです。これには、何らかのメンテナンスが必要になります。

ハードリンクの場合、FATファイルシステムにはファイル間で「共有」できるファイルノードがありません。また、ファイルへのリンクの数を追跡する方法もありません。

1
juancho

ファイルシステムの場合、答えは「そのように設計されていないため」だと思います。つまり、メインファイルシステムとしてそれを使用したオペレーティングシステムのいずれも、シンボリックリンクのアイデアを望まなかったり、必要としたり、思いついたりしなかったため、実装されませんでした。

ファイルシステムの実装/ドライバーに関しては、理論的にはシンボリックリンクのサポートを追加できますが、ファイルシステムには、通常のファイルではなく、ファイルをリンクとしてマークする方法が必要です(リンクテキストは通常​​のファイルデータのように保存できます) )。この機能は実装されていないため、既存の方法はありません。ファイルをリンクとしてマークするには、 ディレクトリエントリ のフィールドを選択する必要がありますが、その場合、実装は他の実装と互換性がありません。少なくとも、他のシステムはおそらくリンクのサポートを追加することを気にしないので、それらはサポートされません。

また、FATはかなり古いファイルシステムであり、ほとんどの場合、相互運用性が有用であると考えられる場合にのみ使用されることに注意してください。そのことを念頭に置いて、既存の標準への変更は悪い考えであり、真剣に使用するために、すべてのオペレーティングシステムには、とりわけリンクをサポートするより優れたファイルシステムがあります。

ハードリンクは、他のメタデータとは異なる場所にファイル名を置くことに大きく依存しているため、さらに困難です。 Unixタイプのファイルシステムでは、iノードはほとんどのメタデータを保持し、ディレクトリにはiノードへのポインタのみが含まれます。 FATでは、ディレクトリエントリに名前の他のすべてのメタデータが含まれているため、複数のハードリンクを持つファイルのメタデータを保持する場所は1つではありません。それに。

2
ilkkachu