符号链接实际上会影响磁盘使用吗?


21

我读过很多网站,在Linux中,符号链接(软链接,符号链接)就像引用另一个文件的指针,该文件可能位于任何地方(例如Windows快捷方式)。但是,当我检查其中有符号链接的文件夹的磁盘使用情况时,我的文件管理器所说的与du报告之间不匹配。但是,如果键入du -L-L, --dereference; dereference all symbolic links从手册页),du -L文件管理器报告的输出和大小是相同的

我的问题是:如果我有一个软链接到一个大文件,例如在我的单独home分区中,我会遇到任何问题吗?

范例

我的/var/tmp文件夹现在是空的。让我们创建一个文件:

$ cat /some/file.txt > file.txt
$ du -ac
164 ./file.txt
168 .
168 total

我的文件管理器(在本例中为Thunar)报告

大小:1件,总计163.0 kB

行。现在,让我们在其中创建一个非常大的文件/tmp并对其进行符号链接:

$ cat /dir/really_big.txt > /tmp/heavy.txt
$ du -a | grep heavy.txt
408 ./heavy.txt
$ ln -s /tmp/heavy.txt heavy.txt
$ du -ac
164 ./file.txt
0   ./heavy.txt
168 .
168 total

现在一切都很好。但是,如果我打开文件管理器:

大小:2件,总计570.3 kB

最后,

$ du -acL
164 ./file.txt
408 ./heavy.txt
576 .
576 total

如果所在的分区/var/tmp大1 GiB,并且我在其中创建了一个1 GiB文件的链接,那我的硬盘会死吗?我知道这du将输出168和Thunar 1 GiB,但我不知道哪个是正确的。


您确定某个程序没有以例如Mib报告,而另一程序以MB为报告?
HandyGandy 2010年

不,这不是单位问题。
astrojuanlu

Answers:


34

当然,符号链接确实会占用空间,但是只是存储名称和目标所需要的空间以及其他元数据的一些字节。符号链接占用的空间不依赖于目标占用的空间(毕竟,甚至不需要目标存在)。

Plain du报告磁盘上目录树所占用的空间。du -L报告如果所有符号链接都替换为其目标的目录树占用的空间。前者通常是有用的信息。例如,这是删除树后要恢复的空间,(大约)它是备份树所需的空间。

du目录树上的“显示”(通常)比文件总大小多一点。那是由于两件事。首先,du还要计算目录,这需要一点空间来存储文件名和元数据。其次,du计算文件占用的磁盘空间,该磁盘空间可能与文件大小不同:最常见的影响是文件占用了整数个块(在典型的Linux安装中为4kB),因此一个1字节的文件可以在du输出中显示为4kB;但是压缩(例如几乎每个unix文件系统上的稀疏文件提供的原始格式)会使文件大小大于磁盘使用率。

从您提供的数字看来,Thunar通过符号链接来报告目录树中文件大小总和。这实际上是用一种微妙的方式说的-它声称总大小为570.3 kB,而不是磁盘使用量为570.3 kB。从用户界面或文档中看不出来的是,Thunar在计算尺寸时遵循符号链接。

哪个是“正确的”是主观的。du报告磁盘使用情况。Thunar通过符号链接报告总大小。创建符号链接对磁盘使用的影响可以忽略不计,但是根据定义,它确实会更改Thunar报告的总大小跟随符号链接。


我已经对问题进行了编辑,所以我认为现在已经很清楚了,但是谢谢您的回答。
astrojuanlu

@ Juanlu001:我已经相应更新了答案。简而言之,du显示磁盘使用情况,而Thunar显示其他内容。
吉尔(Gilles)'所以

当您创建解析符号链接的备份时,区别非常重要。如果您知道在树下有多个符号链接可以解析到树外的位置,则可能要这样做,但是树外的其余内容对您而言并不重要。
梅尔(Mel)

3

我认为默认情况下,您的文件管理器会尝试获取软链接指向的文件的大小,而du给您目录的大小和软链接本身的大小,而不是它们指向的文件的大小。

澄清,

`du`    -> size of directory + size of all the softlinks  
`du -L` -> size of directory + size of all the files that the softlinks are pointing to.

我不确定这是否是您要的内容,但如果是,那么我相信这可能是您的问题的答案。


抱歉,没有回答我的问题:您说的我已经知道了。我刚刚编辑了它。
astrojuanlu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.