想象有一个大小为 5 MB 的文件。我在 C 中以写入模式打开它,然后用正好 5 MB 的垃圾数据填充它。以前使用的相同磁盘扇区会被覆盖,还是操作系统会为新数据选择新的磁盘扇区?
问问题
227 次
2 回答
4
这取决于文件系统。
传统上,答案是“是的,相同的扇区将被新数据覆盖”。
对于日志文件系统,答案可能会有所不同。对于闪存驱动器系统,答案几乎肯定是“不”;将写入新扇区以避免磨损当前写入的扇区。
于 2012-01-08T05:07:49.980 回答
3
文件系统可以做它想做的任何事情。但是任何真正的文件系统都会将数据写回相同的扇区。
图片如果没有。每次您写入文件时,文件系统都必须找到一个新的空闲扇区,写入该扇区,然后更新文件系统元数据以使文件指向新扇区。这也会导致可怕的文件碎片,因为在连续 5MB 文件的中间写入单个扇区会导致它碎片。所以写回同一个扇区要容易得多。
我能想到的唯一例外是JFFS2,因为它旨在支持闪存上的磨损均衡。
现在文件系统将写入同一个扇区,但磁盘硬件可以写入任何它想要的地方。事实上,在 SSD/闪存驱动器上,处理磨损均衡的硬件几乎可以保证将数据写入不同的扇区。但这对操作系统/文件系统是透明的。(由于扇区备用,硬盘驱动器上也有可能)
于 2012-01-08T05:15:52.793 回答