Linux硬链接

Linux硬链接

好的,我知道这是一个关于linux的相对新手问题,但是在任何情况下都涉及硬链接,如果我创建到现有文件的硬链接,然后删除原始文件,那么数据仍然保存在新文件下,正确吗?

那么在这种情况下,当我创建第二个文件时,它实际上增加了硬盘驱动器上使用的空间吗?假设我们有 file1 = 原始 file2 = 到文件 1 的硬链接。

当您实例化 file2 创建它时,它确实会增加磁盘上使用的空间(这意味着您使用的空间加倍,因为您现在有 2 个几乎相同的文件,显然我知道它们共享相同的索引节点,而 file2 需要一点空间来存储它的元数据)?

那么当您删除文件时,磁盘空间才真正恢复,直到 inode 被释放,对吗?

很抱歉问初学者问题,我只是需要澄清一些事情。

答案1

由于 inode 相同,file1 和 file2 将引用相同的数据(因此也引用相同的元数据),因此不需要数据的副本

在 file1 和 file2 都被删除之前,引用的 inode 不会被释放

可能更清楚的一件事是,如果我创建file1,然后硬链接file2file1,然后要求你告诉我哪个文件是原始文件,你就无法可靠地做到这一点

简而言之,创建硬链接只需创建第二个dir_entry与原始数据相同的数据 - 硬链接占用的额外空间就是其大小dir_entry

答案2

两个链接(名称)将指向同一个文件(索引节点)。它们不会占用双倍的空间。

直到最后一个链接被删除,并且之前可能打开该文件的任何进程关闭该文件为止,数据(文件/索引节点)才会被释放。

答案3

硬链接只是一个文件名别名,即file2和file1指向同一个磁盘inode。

创建硬链接确实会增加磁盘空间,但数量取决于实际数据。如果文件只存储像“a”这样的字节,那么文件名会占用更多的磁盘空间。但是,通常文件名字符串比文件中的数据短得多。因此,硬链接磁盘空间可以忽略不计。

相关内容