当文件被修改和保存时,内部会发生什么?

What happens internally when a file is modified and saved?

修改和保存文件后内部会发生什么? OS 会分配一个新的内存块并复制整个数据还是只复制修改部分后的位?

每种方法都有不同的方法,请记住我们有不同的文件系统。例如在 ntfs 中当你写一个文件并且它使用例如六个簇时它就像你的文件系统中的那样:

123456

如果你使用 1 个簇添加一个新文件,它会像那样

1234561

所以现在你删除第一个文件:

      1

并且您将使用 3 个集群编写一个新文件

123   1 

现在你想写一个有 7 个簇的文件

12312314567

例如,如果你想复制另一个文件夹中的文件,它将被重新写入文件系统中的新簇中,但如果你想剪切它,你将只修改 INDEX,这就是为什么剪切文件如此之快的原因复制动作。

因此,如果您修改文件,在大多数情况下,部分或全部内容将加载到缓冲区中,然后当您保存更改时,该缓冲区将写入硬盘,替换受影响的簇并写入新的簇。但这取决于不同的软件使用不同的方法。

文件是按块操作的。磁盘上的一个块就像内存中的一个字节。只能以块为单位读写。 512 字节曾经是正常的块大小,但现在 4096 更常见。

OS会将整个块读入内存;改变任何字节;然后将整个块写入磁盘。

簇是文件分配的单位。它们是块的倍数。磁盘硬件通常不知道集群。较大的簇大小可减少系统分配开销,但对于大量小文件而言效率低下。您可以在集群中读取和写入单个块。