Дедупликация идентичных файлов с использованием жестких ссылок [закрыто]
-
19-09-2019 - |
Вопрос
У меня есть пара одинаковых файлов, хранящихся более чем в одном месте на моем жестком диске.Я полагаю, что могу сэкономить много дискового пространства, жестко связав их так, чтобы они указывали на один и тот же файл.Меня немного беспокоят возможные катастрофические побочные эффекты.
Я думаю, это не влияет на разрешения, поскольку они хранятся в соответствующих каталогах, как и имя файла, верно? (Обновлять:Видимо, я ошибся, разрешения общие, как показывает Карл в своем ответе)
Наибольшую озабоченность вызывают изменения в одном файле, которые непреднамеренно приводят к изменению других файлов.Тогда файлы, доступные только для чтения, должны быть безопасными.И файлы, которые можно изменить, тоже в порядке, если вместо обновления существующего файла записывается новый файл.Я считаю, что большинство приложений работают таким образом, но, вероятно, не все.
Есть ли что-нибудь еще, что следует учитывать?
Я использую 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 с помощью Настройки машины времени.Вы можете исключить на уровне каталога или файла.