Если вы будете делать жесткие ссылки, обратите внимание на права на этот файл. Обратите внимание, что владелец, группа, режим, расширенные атрибуты, время и ACL (если вы используете это) хранятся в INODE. Отличаются только имена файлов, поскольку они хранятся в структуре каталогов, а другие указывают на свойства INODE. По этой причине все имена файлов, связанные с одним и тем же узлом, имеют одинаковые права доступа. Вы должны предотвратить изменение этого файла, потому что любой пользователь может повредить файл другим. Это просто. Достаточно, любой пользователь ставит другой файл с тем же именем. Номер инода затем сохраняется, а исходное содержимое файла уничтожается (заменяется) для всех жестко связанных имен.
Лучший способ - дедупликация на уровне файловой системы. Вы можете использовать BTRFS (очень популярный в последнее время), OCFS или подобное. Посмотрите на страницу: https://en.wikipedia.org/wiki/Comparison_of_file_systems , особенно в таблице Характеристики и дедупликация данных столбца. Вы можете нажать на нее и отсортировать :)
Специально посмотрите на файловую систему ZFS. Это доступно как FUSE, но таким образом это очень медленно. Если вам нужна нативная поддержка, посмотрите на страницу http://zfsonlinux.org/ . Затем вы должны исправить ядро, а затем установить zfs tools для управления. Я не понимаю, почему Linux не поддерживает в качестве драйверов, это путь для многих других операционных систем / ядер.
Файловые системы поддерживают дедупликацию двумя способами: дедупликацию файлов или блоков. ZFS поддерживает блокировку. Это означает, что одно и то же содержимое, которое повторяется в одном и том же файле, может быть дедуплицировано. Другой способ - это время, когда данные дедуплицируются, это может быть онлайн (zfs) или автономно (btrfs).
Обратите внимание, дедупликация потребляет оперативную память. Вот почему запись файлов на том ZFS, смонтированный с помощью FUSE, приводит к резкому снижению производительности. Это описано в документации. Но вы можете онлайн включить / выключить дедупликацию на томе. Если вы видите, что какие-либо данные должны быть дедуплицированы, вы просто включаете дедупликацию, переписываете какой-либо файл в любой временный и, наконец, заменяете. после этого вы можете отключить дедупликацию и восстановить полную производительность. Конечно, вы можете добавить в хранилище любые кеш-диски. Это может быть очень быстрый поворот дисков или SSD дисков. Конечно, это могут быть очень маленькие диски. В реальной работе это замена оперативки :)
В Linux вы должны позаботиться о ZFS, потому что не все работают должным образом, особенно когда вы управляете файловой системой, делаете снимок и т. Д., Но если вы конфигурируете и не меняете его, все работает правильно. Другим способом, вы должны изменить linux на opensolaris, он изначально поддерживает ZFS :) Что очень хорошо в ZFS, так это то, что он работает как файловая система, так и менеджер уровней, похожий на LVM. Вам не нужно это, когда вы используете ZFS. Смотрите документацию, если вы хотите узнать больше.
Обратите внимание на разницу между ZFS и BTRFS. ZFS старше и более зрелая, к сожалению, только под Solaris и OpenSolaris (к сожалению, задушена оракулом). BTRFS моложе, но в последнее время очень хорошо поддерживается. Я рекомендую свежее ядро. ZFS имеет дедупликацию онлайн, что приводит к замедлению записи, потому что все рассчитывается онлайн. BTRFS поддерживает автономную дедупликацию. Тогда это экономит производительность, но когда хосту нечего делать, вы периодически запускаете инструмент для дедупликации. И BTRFS изначально создан под Linux. Может быть, это лучше ПС для вас :)