По умолчанию, если Вы говорите tar
заархивировать файл с жесткими ссылками и больше чем одну такую ссылку включено среди файлов, которые будут заархивированы, она архивирует файл только однажды и записывает второе (и любые дополнительные имена) как жесткие ссылки. Это означает, что при извлечении того архива жесткие ссылки будут восстановлены.
Если Вы используете --hard-dereference
опция, затем tar
не сохраняет жесткие ссылки. Вместо этого это рассматривает их как независимые файлы, которые просто, оказывается, имеют то же содержание и метаданные. При извлечении архива файлы будут независимы.
Примечание: Это распознает жесткие ссылки первой проверкой числа каналов файла. Это записывает номер устройства и inode каждого файла больше чем с одной ссылкой и использование, что для обнаружения, когда тот же файл архивируется снова. (Когда Вы используете --hard-dereference
, это не делает этого.)
Можно отличить файл с жесткой ссылкой (ссылками) на него из non-hard-linked файла с "числом каналов". Я вижу два способа получить это от командной строки:
% stat original
File: ‘original’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 804h/2052d Inode: 932815 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 500/ bediger) Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
Birth: -
Или
1010 % ls -li
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary
Тем одиноким '2' прежде "bediger" является число каналов. Обратите внимание, что оба имен файлов имеют то же inode число, 932815.
Я уверен, что обе из этих команд получают число каналов от st_nlink поля статистики структуры, которая заполнена a stat()
системный вызов.
Почти я могу сказать, работая tar
с --hard-dereference
средства, что вместо того, чтобы получить единственный файл с двумя отличными именами файлов (как в примере выше), Вы получаете два файла, каждого с единственным именем файла. tar
вероятно, проверяет число каналов на каждом файле, и по умолчанию при извлечении, это создает жесткую ссылку на втором имени файла, которое это имеет для трудно связанных данных файла. При вызове --hard-dereference
на создании архива это, кажется, создает совершенно новый файл для второго имени файла когда вызов извлечения tar
выполнения.