2013-11-13 5 views
41

У меня есть резервная система, которая создает каталоги, названные в честь временных меток Unix, а затем создает инкрементные резервные копии с использованием системы жестких ссылок (-link-dest in rsync), поэтому обычно первая резервная копия очень большая, а затем более поздние резервные копии представляют собой доли большой.Считывание жестких ссылок на файлы?

Это мой выход из моих текущих резервных копий:

[email protected]:/media/awesomeness_drive# du -sh lantea_home/* 
31G lantea_home/1384197192 
17M lantea_home/1384205953 
17M lantea_home/1384205979 
17M lantea_home/1384206056 
17M lantea_home/1384206195 
17M lantea_home/1384207349 
3.1G lantea_home/1384207678 
14M lantea_home/1384208111 
14M lantea_home/1384208128 
16M lantea_home/1384232401 
15G lantea_home/1384275601 
43M lantea_home/1384318801 

Все кажется правильным, однако, взять, к примеру, последний каталог, lantea_home/1384318801:

[email protected]:/media/awesomeness_drive# du -sh lantea_home/1384318801/ 
28G lantea_home/1384318801/ 

Я последовательно получить такое поведение, почему каталог, рассмотренный 28G второй командой du?

Примечание. Выходные данные остаются неизменными с флагами -P и -L.

ответ

104

Hardlinks являются настоящими ссылками на один и тот же файл (представленный его inode). Нет никакой разницы между «оригинальным» файлом и жесткой ссылкой, указывающей на него. Оба файла имеют одинаковый статус, и являются ссылкой на этот файл. Удаление одного из них позволяет другому оставаться неповрежденным. Удаление последней жесткой ссылки приведет к удалению файла и освобождению дискового пространства.

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

Таким образом, в сущности, каталог может иметь du размер 28G, каталог B может иметь размер 29G, но вместе они по-прежнему занимают только 30G и если вы спросите du размера А и В, вы получите это число.

Disc usage by several directories when hardlinks are involved.

+3

Думаю, я не дал достаточно кредитов, я бы не подумал об этом. Благодаря! –

+7

Удивительно четкое изображение, стоит тысячи слов. – Rmano

+5

И поскольку 'du' учитывает только первую жесткую ссылку на тот же индекс, с которым он сталкивается, мне нравится давать ему каталоги в строке: ' $ du -hc --max-depth = 0 dirA dirB 29G/dirA 1G/dirB 30G total' – tuk0z

8

И с переключателем «-l» им подсчитывает жесткие ссылки в каждом подкаталоге тоже, так что я могу видеть, насколько велика все резервная, а не только приращение дельты.

+4

Немного больше объяснений может помочь программистам-разработчикам понять, как это работает. – Daenarys

+0

Это реальный ответ –