在文件开头添加内容是否会导致更新所有数据块?

在文件开头添加内容是否会导致更新所有数据块?

在 Unix 文件系统 (UFS) 中,文件被表示为 inode 结构,该结构具有 15 个引用直接块或间接块的指针。

以下面的图像为例。

索引节点结构

Data右侧表示的每个块都包含实际的文件数据。它的大小data block通常是4096,是在文件系统创建时决定的。

对于40MB的大文件来说,它会占用近1K的数据块。在这种情况下,如果我们将数据附加到该文件中,我发现它只会影响最后一个块,或者如果最后一个数据块中没有空间,它将创建新的数据块。

但是,如果我们在文件开头添加一些数据(大约 200 字节),是否会对下面的数据块产生级联效应,并导致将每个数据块的最后 200 字节移动(或推送)到下一个数据块?

同样,当我们删除第一个数据块的前200个字节时,是否会对较低的数据块产生级联效应?

或者UFS或一般文件系统是否有一种有效的方法来处理这种情况,可能是为每个数据块保留一些缓冲区空间?

提前致谢。

答案1

大多数文件系统不支持在文件开头插入数据,并且 Unix 没有相应的 API。在大多数操作系统中,修改文件的唯一方法是覆盖段(例如更改aaaaaaaaaaaaabbbaaaa)、在末尾追加数据(例如更改aaaaaaaaaaaaaaaaaaaacccc)或截断文件(例如更改aaaaaaaaaaaaaaa)。

如果要在文件的开头添加数据,请使用附加数据创建一个新文件,然后复制旧文件的内容。

对于原始 Unix 和大多数(如果不是全部)现代 Unix(更普遍的是大多数操作系统)来说都是如此。

相关内容