2012-01-08 10 views
1

サイズが5 MBのファイルがあるとします。私はCの書き込みモードでそれを開き、ちょうど5MBの迷惑データでそれを埋めます。以前に使用されていたディスクセクタと同じディスクセクタが上書きされるのですか、OSは新しいデータセクタを選択しますか?ファイルを上書きするときに書き込まれるセクタは?

+2

必ずしもそうである必要はありません。なぜそれは重要ですか?これは純粋に理論上の質問ですか、あるいはあなたが解決しようとしている問題がありますか?ファイルシステムは、抽象化を意図しています。 –

答えて

4

ファイルシステムによって異なります。

古典的には、答えは「はい、同じセクターが新しいデータで上書きされる」でしょう。

ジャーナルファイルシステムでは、答えが異なる場合があります。フラッシュドライブシステムでは、その答えはほぼ確実に「ノー」になります。現在の書かれたセクターを消耗させないために、新しいセクターが書かれます。

3

ファイルシステムは、それが望むすべてのことを行うことができます。しかし、どんな実際のファイルシステムでも、同じセクターにデータを書き戻します。

イメージもしそうでなければ。あなたがファイルに書き込むたびに、ファイルシステムは新しい空きセクタを見つけ、そのセクタに書き込んだり、新しいセクタを指すようにファイルのファイルシステムメタデータを更新する必要があります。これはまた、恐ろしいファイルの断片化を引き起こします。なぜなら、隣接する5MBファイルの中央に単一のセクタを書き込むと、断片化するためです。同じセクターに書き戻すほうがはるかに簡単です。

それはフラッシュのウェアレベリングをサポートするように設計されたので、私は考えることができる唯一の例外はJFFS2です。

これで、ファイルシステムは同じセクタに書き込みますが、ディスクハードウェアは必要な場所に書き込むことができます。実際には、SSD /フラッシュドライブでは、wear levelingを処理するためのハードウェアは、ほぼ別のセクタにデータを書き込むことが保証されています。しかし、それはOS /ファイルシステムに対して透過的です。 (ハードドライブでも可能です(sector sparing

関連する問題