为什么 Nautilus 显示的文件及其硬链接比文件本身还大?

为什么 Nautilus 显示的文件及其硬链接比文件本身还大?

当我创建一个硬链接指向一个 2 KB 文件(称为fun),Nautilus 将这个硬链接(称为fun-hard)显示为一个大小相同的文件。这两个文件指向同一个索引节点因此它们的组合属性也应该只显示 2 KB。但是 Nautilus 却显示它们的总大小为 4 KB。为什么?

答案1

当然,如果您创建指向文件的硬链接,则原始文件和硬链接都指向同一个 inode。事实上,两者是等价的 - 对于系统来说,没有“原始”和“链接”之类的东西。它们只是指向同一个 inode 的两个访问点。因此,它们加在一起占用的空间不会比只有一个访问点时多(除了文件系统中最微小的信息,其中存储了两个指向某个 inode 的指针,而不是只有一个)。

当您使用低级文件系统实用程序(例如)时,您可以轻松确认这一点du。例如,这里我有一个包含一首歌曲的目录(FOSS 耶!,由 Ben Kerensa 演唱的一首关于 Ubuntu 的精彩歌曲)约 2.1 MB:

$ ls -li 
total 2124
6424897 -rw-rw-r-- 1 malte malte 2162937 Aug  7 12:53 FOSS Yeaaaah!.mp3
$ du -ch * # display size of all files, and total size
2.1M    FOSS Yeaaaah!.mp3
2.1M    total
$ du -h . # display size of current directory
2.1M    .

当我创建一个硬链接时,比如说Link.mp3,到文件,du实际上识别出两个文件名都指向同一个文件,并且只显示其中一个:

$ ln FOSS\ Yeaaaah\!.mp3 Link.mp3
$ ls -li
total 4248
6424897 -rw-rw-r-- 2 malte malte 2162937 Aug  7 12:53 FOSS Yeaaaah!.mp3
6424897 -rw-rw-r-- 2 malte malte 2162937 Aug  7 12:53 Link.mp3
$ du -ch *
2.1M    FOSS Yeaaaah!.mp3
2.1M    total
$ du -h .
2.1M    .

(它只显示按字母顺序排列的第一个 - 如果我命名了硬链接A.mp3,那么du就会显示那个)。

您遇到的行为很可能是您用来显示文件大小的软件中的错误或不准确之处。如果是 Nautilus(典型 Ubuntu 安装中的标准文件浏览器),那么我可以确认该行为。请参阅此错误报告:

https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/644403

它可能只是“一个功能,而不是一个错误”——因为 Nautilus 试图让普通用户的操作变得简单,所以它只是忽略了硬链接。这可能并不总是最好的主意。引用错误报告:

Nautilus 试图让事情变得简单。这就是为什么它不提供创建硬链接的方法。但如果事情已经很复杂——如果硬链接已经存在——那么忽略它们本身也会导致问题。

总之,如果您使用硬链接,最好依靠终端而不是某些文件浏览应用程序。

相关内容