2011-03-07 14 views
11

NTFSファイルシステムに保存されているファイルを読み込んでいて、読み込み中にそのファイルの移動や名前の変更を試みた場合、そのようにはできません。これをEXT3のようなUNIXファイルシステムで試してみると成功し、読み込みを行っているプロセスは影響を受けません。私はファイルを読み書きすることもでき、読み込みプロセスは影響を受けません。これはどのように作動しますか?なぜこの動作がUNIXファイルシステムではサポートされていますが、NTFSではサポートされないのですか?私はハードリンクやinodeと関係があるという曖昧な気持ちがありますが、私は良い説明に感謝します。UNIXコマンドmvとrmはオープンファイルでどのように動作しますか?

答えて

23

Unixのファイルシステムは、ファイルを見つけるための参照カウントと二層アーキテクチャを使用します。

ファイル名は、情報ノードまたはインデックスノード用にinodeと呼ばれるものを指します。 inodeは、ファイルの内容(通常、ディレクトリ、デバイスなど)や所有者などのメタデータと同様に、ファイルの内容を格納します(ポインタ)。

複数のファイル名は同じiノードを参照できます。それらはhard linksと呼ばれます。さらに、file descriptor(fd)はinodeを指します。 fdは、ファイルを開くときにプロセスが取得するオブジェクトのタイプです。

Unixファイルシステムのファイルは、最後の参照がなくなったときに消えます。それ以上の名前(ハードリンク)やfdがそれを参照していないときだけ消えます。したがって、rmは実際にはファイルを削除しません。ファイルへの参照を削除します()。

このファイルシステムの設定は混乱しているように思えるかもしれませんが、NFS(特にNFSの場合)に問題が生じることがありますが、多くのアプリケーションでロックが必要ないという利点があります。また、多くのUnixプログラムは一時ファイルを開いて直ちに削除することで、このような状況を有効に活用しています。終了するとすぐに、クラッシュしても、一時ファイルはなくなります。

+0

開いているファイルを移動できる場所に制限はありますか?例えば。同じファイルシステム内でのみ? –

+0

@van_pozdeevは、異なるファイルシステム間でファイルに 'mv'を実行すると、実際にデータをコピーして元のファイルを削除します。この場合、オープンファイルの' rm'に似ています。 – dsonck92

4

unixでは、ファイル名は単に実際のファイル(iノード)へのリンクです。ファイルを開くと、実際のファイルへの(一時的な)リンクも作成されます。ファイルへのリンクがすべて消えたら(rmとclose())、ファイルは削除されます。

NTFSでは、論理的にファイル名はファイルです。ファイル名からmetainfoファイルへの間接レイヤーはありません。これらは同じオブジェクトです。あなたがそれを開くと、そのファイルは使用中であり、unix上の実際のファイル(inode)が使用中に削除されないのと同様に、削除することはできません。

のUnix: ファイル名 - >のFileInfo - >データ

NTFSファイル: ファイル名/ FileInfoには - >ファイル・データ

関連する問題