覆盖文件时写入的扇区?

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,它也可以在硬盘上使用)

【讨论】:

以上是关于覆盖文件时写入的扇区?的主要内容,如果未能解决你的问题,请参考以下文章

5G NR — 基站的扇区小区跟踪区注册区服务区

IT小技巧之数据恢复

在linux内核级别,如何读取和写入一个硬[重复]的扇区

读取引导磁盘上的扇区

不要忽视被遗忘的角落的文件

如何确定 Windows 中的扇区大小?