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

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

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

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

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

Я на OS X / HFS+.

4 ответа

Решение

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

$ 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 справочная страница:

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

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

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

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

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

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

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

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

Другие вопросы по тегам