Все файлы с одинаковым содержимым на моем компьютере теперь жестко связаны. (Мои данные полностью дублированы. Это следствие того, как я скопировал свои данные со старого компьютера.)
Какие подводные камни мне нужно знать сейчас, когда определенные действия над одним файлом могут незаметно повлиять на ряд других файлов?
Я знаю, что удаление файла, над которым я работаю, не является проблемой (при условии, что я удалил его специально). Это не влияет ни на один из других жестко связанных файлов, и я не вижу, чтобы действие удаления привело к неожиданным побочным эффектам.
Перемещение или переименование файла не является проблемой. Я не вижу неожиданных последствий.
Я не думаю, что копирование жестко связанных файлов является проблемой, но я не настолько уверен в каких-либо неожиданных последствиях в этом отношении. Что я видел, так это то, что при создании копии (на тот же диск) файла с жесткой связью с помощью cp
копия остается жесткой (т. Е. Номер инода в копии не изменяется). Копирование в другую файловую систему, очевидно, нарушает жесткую ссылку. (Полагаю, одна ловушка забывает об этом, учитывая, что на моем компьютере 3 жестких диска.)
Изменение разрешений влияет на все связанные файлы. Пока что это оказалось полезным. (Я сделал большое количество жестко связанных файлов только для чтения.)
Кажется, ни одна из вышеперечисленных операций не приводит к каким-либо серьезным неожиданным последствиям.
Однако, как указал мне Дэниел Бек в комментарии, редактирование или изменение файла иногда могут быть проблемой. Это зависит от инструмента и, возможно, типа редактирования. (Например, редактирование небольших текстовых файлов с использованием sed, похоже, всегда разрывает ссылку, а использование nano - нет.) Это дает шанс, что редактирование одного файла может повлиять на все жестко связанные файлы (то есть изменить исходный индекс).
Мое предлагаемое решение - сделать все жестко связанные файлы доступными только для чтения (и это уже в большинстве случаев). Если я не могу сделать это для некоторых файлов, я откажусь от этих конкретных файлов. Есть ли проблема с этим подходом только для чтения?
Я предполагаю, что если я зайду, чтобы отредактировать файл и обнаружу, что он доступен только для чтения, я не забуду отсоединить это имя файла, делая его доступным для записи. Таким образом, одна ловушка может быть забыть это правило. В этом случае мне придется положиться на свои резервные копии.
Я прав в приведенных выше утверждениях? И что еще мне нужно знать?
Кстати, я бегу Kubuntu 12.04. Я также использую btrfs. (У меня есть 2 SSD и 1 HDD на ПК. Я также добавлю внешний жесткий диск USB. Я также подключен к сети и подключаю некоторые общие ресурсы NFS. Я не предполагаю, что какие-либо из этих последних битов имеют отношение к вопросу, но я добавляю их на всякий случай.)
Кстати, поскольку у меня есть несколько дисков (с отдельными файловыми системами), чтобы отсоединить любой файл, все, что мне нужно сделать, это скопировать его на другой диск, а затем переместить его обратно. Тем не менее, использование sed также работает (в моем тестировании). Вот мой сценарий:
sed -i 's/\(.\)/\1/' file1
Удивительно, но это даже не связывает файлы нулевого байта. В моем тестировании он также работает с нетекстовыми файлами без каких-либо специальных опций. (Но я понимаю, что опция --binary
может понадобиться в Windows, MS-DOS и Cygwin.) Тем не менее, копирование на другой диск и перемещение назад может быть лучшим способом отсоединения. Для моего варианта использования команда unlink
самом деле не "unlink", а "удаляет".