2011-12-01 561 views
7

我已经通过了一些文档。它们在硬链接或软链接占用文件系统中的任何空间方面都有很大的差异。任何人都可以为我解决这个问题吗?做硬链接或软链接在文件系统中占用任何空间?

对于硬链接,我发现这一点:

我在我的主目录的文件C1这是我在同directory.both C1和B1硬链接与D1具有当我做一个“LS 11字节size.Now -lrt“列出的所有文件(不包括d隐藏的课程文件)的总字节数为64字节。现在当我删除hardlink d1并再次执行ls -lrt时,它会给我60个字节。这并不意味着硬链接会占用硬盘空间,但很多docs.negate这个事实,为什么?

我可以检查相同的方式创建一个软链接的文件,然后删除它,但由于我的软链接只有2字节大小,我不认为删除它会有一个显着的影响, ls -lrt的输出。

那么这是什么?

回答

6

是的。他们都占据了空间,因为他们仍然有目录条目。

硬链接条目(实际上,[通常]共享inode的“普通条目”)需要空间,而链接条目必须以某种方式存储链接路径(文本本身)。由于确切的文件系统实现(例如块/树大小以及符号链接存储方式)确定的分配/布局规则,所需的实际空间略有不同。

然而,空间的数量是最小并且可能[几乎总是]与文件本身中的数据关系不一致。

+2

扩展您的最后一句话:...除非它是一个包含许多小文件的系统,并且您没有足够的inode。在某些文件系统上,这是一个现实的场景,我已经遇到了它,尽管没有与符号或硬链接结合使用。 – 0xC0000022L

10

当然,他们占据的空间(一点点):

  • 硬链接的文件有多个目录条目。每个条目占用目录本身的空间,但从此以后,它们共享相同的结构:inode和数据区域是共享的。但我不确定这是如何计算的;也许目录条目总是占用一定数量的倍数。

  • 符号链接还占用目录条目的空间,另外还有一个inode,它包含关于链接属性以及链接目标本身的信息。

随着小尺寸(文件中的11个字节的数据)的开销计算比真实的数据了。然而,对于更大的文件,这种少量字节的小开销可以忽略不计。

1

简而言之,硬链接是对文件系统中inode的引用。有些实用程序会错误地读取它。它不会占用任何磁盘空间。

+3

从什么时候inodes *不占用空间? ... – 0xC0000022L

+3

inode确实占用了空间先生,我100%同意,但对于所说的inode的引用在整个磁盘空间方面是非常可以忽略的。我希望这清除了我的答案。 –

+0

这根本就是错的。链接是需要存储在“某个地方”的一条信息。根据您的文件系统,这个处理方式稍有不同,但需要存储。 –

6

ls是错的!

它重复计算硬链接文件多次。 ls -l只会将每个条目的块编号加起来,不管它有多少个硬链接。

(使用ls -1si显示每个文件的inode号以及块利用率)

尝试du -Ssb .代替。这会以字节为单位给你正确的磁盘使用量。除非你使用-l开关,这将重现ls的行为。