覆盖文件时写入的行业?
问题描述:
想象一下,有一个大小为5 MB的文件。我用C语言在写模式下打开它,然后用恰好5 MB的垃圾数据填充它。以前使用的磁盘扇区是否会被覆盖,或操作系统是否会为新数据选择新的磁盘扇区?覆盖文件时写入的行业?
答
这取决于文件系统。
传统上,答案是'是的,相同的部门将被新数据覆盖'。
对于带日记的文件系统,答案可能会有所不同。对于闪存驱动器系统,答案几乎肯定是'不';将编写新的部门以避免磨损当前书面部门'。
答
文件系统可以做任何希望的事情。但是任何真正的文件系统都会将数据写回相同的扇区。
图片如果没有。每次写入文件时,文件系统都必须找到新的空闲扇区,写入该扇区,然后更新文件的文件系统元数据以指向新扇区。这也会导致可怕的文件碎片,因为在连续的5MB文件中间写入单个扇区会导致碎片。所以只需要回写相同的部分就容易多了。
我能想到的唯一例外是JFFS2,因为它被设计用于支持闪存上的损耗均衡。
现在文件系统会写入同一个扇区,但磁盘硬件可以在任何地方写入。事实上,在SSD /闪存驱动器上,处理wear leveling的硬件几乎可以保证将数据写入不同的扇区。但是这对OS /文件系统是透明的。 (这可能在硬盘驱动器以及由于sector sparing)
不一定。为什么这有关系?这是一个纯粹的理论问题,还是有一些问题想要解决?文件系统旨在成为抽象。 – 2012-01-08 05:09:11