好的,我知道这是一个关于linux的相对新手问题,但是在任何情况下都涉及硬链接,如果我创建到现有文件的硬链接,然后删除原始文件,那么数据仍然保存在新文件下,正确吗?
那么在这种情况下,当我创建第二个文件时,它实际上增加了硬盘驱动器上使用的空间吗?假设我们有 file1 = 原始 file2 = 到文件 1 的硬链接。
当您实例化 file2 创建它时,它确实会增加磁盘上使用的空间(这意味着您使用的空间加倍,因为您现在有 2 个几乎相同的文件,显然我知道它们共享相同的索引节点,而 file2 需要一点空间来存储它的元数据)?
那么当您删除文件时,磁盘空间才真正恢复,直到 inode 被释放,对吗?
很抱歉问初学者问题,我只是需要澄清一些事情。
答案1
由于 inode 相同,file1 和 file2 将引用相同的数据(因此也引用相同的元数据),因此不需要数据的副本
在 file1 和 file2 都被删除之前,引用的 inode 不会被释放
可能更清楚的一件事是,如果我创建file1
,然后硬链接file2
到file1
,然后要求你告诉我哪个文件是原始文件,你就无法可靠地做到这一点
简而言之,创建硬链接只需创建第二个dir_entry
与原始数据相同的数据 - 硬链接占用的额外空间就是其大小dir_entry
答案2
两个链接(名称)将指向同一个文件(索引节点)。它们不会占用双倍的空间。
直到最后一个链接被删除,并且之前可能打开该文件的任何进程关闭该文件为止,数据(文件/索引节点)才会被释放。
答案3
硬链接只是一个文件名别名,即file2和file1指向同一个磁盘inode。
创建硬链接确实会增加磁盘空间,但数量取决于实际数据。如果文件只存储像“a”这样的字节,那么文件名会占用更多的磁盘空间。但是,通常文件名字符串比文件中的数据短得多。因此,硬链接磁盘空间可以忽略不计。