Дедупликация идентичных файлов с использованием жестких ссылок [закрыто]

StackOverflow https://stackoverflow.com/questions/1719109

Вопрос

У меня есть пара одинаковых файлов, хранящихся более чем в одном месте на моем жестком диске.Я полагаю, что могу сэкономить много дискового пространства, жестко связав их так, чтобы они указывали на один и тот же файл.Меня немного беспокоят возможные катастрофические побочные эффекты.

Я думаю, это не влияет на разрешения, поскольку они хранятся в соответствующих каталогах, как и имя файла, верно? (Обновлять:Видимо, я ошибся, разрешения общие, как показывает Карл в своем ответе)

Наибольшую озабоченность вызывают изменения в одном файле, которые непреднамеренно приводят к изменению других файлов.Тогда файлы, доступные только для чтения, должны быть безопасными.И файлы, которые можно изменить, тоже в порядке, если вместо обновления существующего файла записывается новый файл.Я считаю, что большинство приложений работают таким образом, но, вероятно, не все.

Есть ли что-нибудь еще, что следует учитывать?

Я использую OS X/HFS+.

Это было полезно?

Решение

Не используйте жесткие ссылки, если вы хотите, чтобы изменения в одном файле не отражались в других файлах.В этом вся суть жестких ссылок — несколько записей каталога для тот же файл (те же блоки на диске).Изменение разрешений для одного из имен жесткой ссылки приводит к изменению их обоих:

$ touch file
$ ln file link
$ ls -l
total 0
-rw-r--r--  2 owner group  0 Nov 11 16:44 file
-rw-r--r--  2 owner group  0 Nov 11 16:44 link
$ chmod 444 file
$ ls -l
total 0
-r--r--r--  2 owner group  0 Nov 11 16:44 file
-r--r--r--  2 owner group  0 Nov 11 16:44 link

Из ln справочная страница:

Жесткая ссылка на файл неотличима от исходной записи каталога;любые изменения в файле фактически не зависят от имени, используемого для ссылки на файл.

Другие советы

Я написал небольшой скрипт, чтобы сделать именно это.Меня бы беспокоили разрешения только в том случае, если ваша резервная копия охватывала нескольких пользователей или системные файлы.

У меня была куча старых резервных копий на компакт-дисках и DVD-дисках, на многих из которых было много избыточных данных.Вместо того, чтобы просеивать всю эту информацию и удалять дубликаты, я пошел по маршруту Time Machine и установил жесткие связи между всеми совпадающими файлами (для действительного совпадения содержимого я взял контрольную сумму SHA1 для всех них).

Теперь все мои резервные тома выглядят так же, как и в противном случае, и большинство избыточных файлов ушли в прошлое.Единственная проблема заключается в том, что многие медиафайлы хранят метаданные в содержимом файла, поэтому каждая версия немного отличается.Видеть Эта статья для кода Python.Никаких гарантий!!!

Убедитесь, что вы делаете mdimport your_backup_dir/ после:Spotlight и Finder немного нервничают, когда вы выполняете масштабные манипуляции с данными.Таким образом я дедуплицировал свою папку резервных копий объемом 240 ГБ, и это заняло около 45 минут.

Также обратите внимание, что большинство приложений OSX разрывают ваши жесткие ссылки и сохраняют их в новом индексном дескрипторе, большинство приложений UNIX, вероятно, сохраняют жесткие ссылки (кроме emacs, как я слышал).

Жесткие ссылки, как правило, не являются лучшей практикой.старые добрые программные/символические ссылки (ln -s) тоже должны работать.

Если вашей основной целью является «дедупликация резервных копий Time Machine», как вы упомянули в одном из комментариев, то другим вариантом, позволяющим избежать некоторых ваших проблем, будет удаление дубликатов из Time Machine с помощью Настройки машины времени.Вы можете исключить на уровне каталога или файла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top