覆盖文件时写入的扇区?
Posted
技术标签:
【中文标题】覆盖文件时写入的扇区?【英文标题】:Sectors written when over-writing a file? 【发布时间】:2012-02-05 05:25:45 【问题描述】:假设有一个大小为 5 MB 的文件。我在 C 中以写入模式打开它,然后用正好 5 MB 的垃圾数据填充它。以前使用的相同磁盘扇区会被覆盖,还是操作系统会为新数据选择新的磁盘扇区?
【问题讨论】:
不一定。为什么这有关系?这是一个纯粹的理论问题,还是您正在尝试解决一些问题?文件系统旨在成为一种抽象。 【参考方案1】:这取决于文件系统。
通常,答案是“是的,相同的扇区将被新数据覆盖”。
对于日志文件系统,答案可能会有所不同。对于闪存驱动器系统,答案几乎肯定是“不”;将写入新扇区以避免磨损当前写入的扇区。
【讨论】:
【参考方案2】:文件系统可以做它想做的任何事情。但是任何真正的文件系统都会将数据写回相同的扇区。
图片如果没有。每次您写入文件时,文件系统都必须找到一个新的空闲扇区,写入该扇区,然后更新文件系统元数据以使文件指向新扇区。这也会导致可怕的文件碎片,因为在连续 5MB 文件的中间写入单个扇区会导致它碎片。所以写回同一个扇区要容易得多。
我能想到的唯一例外是JFFS2,因为它旨在支持闪存上的磨损均衡。
现在文件系统将写入同一个扇区,但磁盘硬件可以写入任何它想要的地方。事实上,在 SSD/闪存驱动器上,处理wear leveling 的硬件几乎可以保证将数据写入不同的扇区。但这对操作系统/文件系统是透明的。 (由于sector sparing,它也可以在硬盘上使用)
【讨论】:
以上是关于覆盖文件时写入的扇区?的主要内容,如果未能解决你的问题,请参考以下文章