Действительно ли символические ссылки имеют значение в использовании диска?


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 кБ

Отлично. Теперь давайте создадим действительно большой файл /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 кБ

И наконец:

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

Если раздел, в котором /var/tmpнаходится файл, имеет размер 1 ГБ и я создаю в нем ссылку на файл размером 1 ГБ, die умрет ли мой жесткий диск? Я знаю, что duвыдаст 168 и Thunar 1 GiB, но я не знаю, какой из них правильный.


Вы уверены, что одна программа не сообщает, например, в Mib, а другая в MB?
HandyGandy

Нет, это не проблема юнитов.
astrojuanlu

Ответы:


34

Конечно, символические ссылки занимают место, но занимают место, необходимое для хранения имени и цели, а также несколько байтов для других метаданных. Пространство, занимаемое символической ссылкой, не зависит от пространства, занимаемого целью (в конце концов, цель даже не обязана существовать).

Обычный duотчет о пространстве, занимаемом деревом каталогов на диске. du -Lсообщает о пространстве, которое заняло бы дерево каталогов, если бы все символические ссылки были заменены их целью. Первый обычно полезная информация; например, это пространство, которое вы восстановите, если удалите дерево, и это (приблизительно) пространство, необходимое для резервного копирования дерева.

duв дереве каталогов отображается (как правило) немного больше, чем сумма размеров файлов. Это связано с двумя вещами. Во-первых, duтакже подсчитываются каталоги, которые занимают немного места для хранения имен файлов и метаданных. Во-вторых, duподсчитывается дисковое пространство, занимаемое файлом, которое может отличаться от размера файла: наиболее распространенный эффект заключается в том, что файлы занимают целое число блоков (4 КБ в обычной установке Linux), поэтому 1-байтовый файл может показать как 4kB на выходе du; но сжатие (например, примитивная форма, предоставляемая разреженными файлами практически на каждой файловой системе unix) может сделать размер файла больше, чем его использование на диске.

Из приведенных вами чисел видно, что Thunar сообщает сумму размеров файлов в дереве каталогов, следуя символическим ссылкам . На самом деле он говорит это тонким способом - он утверждает, что общий размер составляет 570,3 КБ, а не то, что использование диска составляет 570,3 КБ. Что совершенно не очевидно из пользовательского интерфейса или документации, так это то, что Thunar следует по символическим ссылкам при вычислении размера.

Какой из них «правильный», это субъективный вопрос. duсообщает об использовании диска. Тунар сообщает общий размер по символическим ссылкам. Создание символической ссылки оказывает незначительное влияние на использование диска, но по определению действительно изменяет общий размер после символических ссылок, о которых сообщает Thunar.


Я отредактировал свой вопрос, поэтому я думаю, что теперь все понятно, но спасибо за ответ.
astrojuanlu

@ Juanlu001: я обновил свой ответ соответственно. Короче, duпоказывает использование диска, в то время как Thunar показывает что-то еще.
Жиль "ТАК - перестань быть злым"

Разница важна при создании резервных копий, которые разрешают символические ссылки. Вы можете захотеть сделать это, если знаете, что у вас есть несколько символических ссылок под деревом, которые разрешают места вне дерева, но остальная часть материала вне этого дерева для вас не важна.
Мел

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.