2012-01-08 87 views
1

想象一下,有一個大小爲5 MB的文件。我用C語言在寫模式下打開它,然後用恰好5 MB的垃圾數據填充它。以前使用的磁盤扇區是否會被覆蓋,或操作系統是否會爲新數據選擇新的磁盤扇區?覆蓋文件時寫入的行業?

+2

不一定。爲什麼這有關係?這是一個純粹的理論問題,還是有一些問題想要解決?文件系統旨在成爲抽象。 – 2012-01-08 05:09:11

回答

4

這取決於文件系統。

傳統上,答案是'是的,相同的部門將被新數據覆蓋'。

對於帶日記的文件系統,答案可能會有所不同。對於閃存驅動器系統,答案几乎肯定是'不';將編寫新的部門以避免磨損當前書面部門'。

3

文件系統可以做任何希望的事情。但是任何真正的文件系統都會將數據寫回相同的扇區。

圖片如果沒有。每次寫入文件時,文件系統都必須找到新的空閒扇區,寫入該扇區,然後更新文件的文件系統元數據以指向新扇區。這也會導致可怕的文件碎片,因爲在連續的5MB文件中間寫入單個扇區會導致碎片。所以只需要回寫相同的部分就容易多了。

我能想到的唯一例外是JFFS2,因爲它被設計用於支持閃存上的損耗均衡。

現在文件系統會寫入同一個扇區,但磁盤硬件可以在任何地方寫入。事實上,在SSD /閃存驅動器上,處理wear leveling的硬件幾乎可以保證將數據寫入不同的扇區。但是這對OS /文件系統是透明的。 (這可能在硬盤驅動器以及由於sector sparing