哪些文件属性存储在目录条目中,哪些存储在 inode 中?

哪些文件属性存储在目录条目中,哪些存储在 inode 中?

我想对旧文件进行一些重复数据删除,用硬链接替换重复项。

为了最大限度地减少元数据的丢失,我想将每个新硬链接的目录条目属性设置为它替换的重复项的属性,但不更改获取新链接的 inode 的任何 inode 属性。

我应该设置和不应该设置哪些属性?

理想情况下,我希望看到一个表格,显示尽可能多的文件系统中的内容。我对 ext3、ext4、HFS+、XFS 和 Btrfs 特别感兴趣。

答案1

您所要求的功能在我所知的任何文件系统中都无法实现,因为它们的实现方式如下所述。我不明白您为什么要关心元数据?

首先,目录条目中唯一的数据是文件名和 inode 编号。

其次,当您使用以下名称创建两个或多个文件名时,就会产生硬链接:相同的inode 编号。

inode 存储其他所有内容,例如 atime 和 mtime 以及其他元数据,包括指向文件数据块的“指针”。

如果你有两个文件,它们的内容相同,但是 inode 不同,则 inode 中的大部分元数据都会不同,例如提到的 atime 和 mtime 会不同,全部数据块指针。

要使用硬链接减少存储使用量,您需要删除其中一个重复文件,这也会“关闭” inode,从而丢失所有元数据。然后,使用刚删除的文件的名称和目录位置创建指向剩余现有文件的链接。

“新”文件链接现在将具有全部与您刚刚链接的 inode 信息相同。唯一的区别是目录层次结构中的位置和使用的名称,这些信息存储在目录条目中,而不是 inode 中。

所有这些都是通过用于创建文件、链接和目录的系统调用来处理的,并且不能由任何用户或软件(包括“root”)直接修改。您可以读取它,并将数据存储在单独的文件中,但目录层次结构的轻松关联将丢失。

相关内容