Ссылается ли rsync на конкретные файлы или только на файлы с одинаковыми именами?

Ссылается ли rsync на конкретные файлы или только на файлы с одинаковыми именами?

Я написал небольшой скрипт резервного копирования rsync для моего недавно замененного компьютера (с внутреннего жесткого диска на внешний жесткий диск).

Когда у меня появился новый компьютер, я скопировал файлы (со старого внутреннего HD на новый внутренний HD). Та же структура файлов, имена файлов и т. д.

Мне интересно, могу ли я просто запустить скрипт резервного копирования на новом компьютере, который теперь подключен к старому внешнему жесткому диску.

Потенциальная проблема, которую я предвижу, будет связана с тем, ссылается ли rsync на конкретные файлы или только на имена файлов.

Помню, я где-то читал о том, что у файловых систем есть определенные идентификаторы (серийный номер или что-то в этом роде) «под капотом» для каждого файла, и изменение имени не меняет этот номер.

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

Просто rsync работает с использованием жестких/мягких ссылок, а я не настолько эксперт в этом вопросе, чтобы знать подробности или их последствия...

Любая помощь приветствуется!

MacOS Ventura 13.4.1, APFS (файловая система)

решение1

вкратце

Не о чем беспокоиться. Сделайте так, чтобы ваш сценарий использовалrsync --dry-run --verbose …и посмотрите сами. Если это выглядит разумно, продолжайте использовать оригинальный сценарий (без --dry-run).


Номера инодов

Помню, я где-то читал о том, что у файловых систем есть определенные идентификаторы (серийный номер или что-то в этом роде) «под капотом» для каждого файла, и изменение имени не меняет этот номер.

Инодномера. Собственные файловые системы в Unix/Linux обычно используют эту концепцию (а macOS — это Unix). Файловые системы, которые внутренне не используют inode, выглядят так, как будто они их используют, поэтому с ними можно обращаться аналогичным образом. Так что да, у файлов есть серийные номера, ls -iвыводит их.

Итак, если rsync ссылается на этот номер, а не просто на имя файла…

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

Вы правы, если rsyncпопытаться основываться на номерах inode, это может посеять хаос. Этого не происходит. AFAIKнет стандартного интерфейса для доступа к файлам по номерам инодов. И вы (или rsync) не можете запросить определенный номер при создании нового файла. Для файловых систем, которые не используют иноды и только выглядят так, как будто они их используют, номера инодов могут быть сгенерированы на лету, и во многих (всех?) случаях нет гарантии, что точно такие же номера будут связаны с точно такими же файлами после того, как вы размонтируете и снова смонтируете такую ​​файловую систему.

Все это означает, что программы не должны заботиться о номерах инодов, если только они не должны иметь дело с внутренностями самой файловой системы. Номера инодов являются внутренними для файловой системы. Программы, такие как cpили rsyncдолжны работать на другом уровне абстракции, и они работают. Другой уровень абстракции — это дерево каталогов с именами путей.

Один из сценариев, когда номера инодов «просачиваются» и (безопасно) используются такими программами, — это когда программа хочет обнаружить жесткие ссылки. Жесткие ссылки на файлы — это два или более имен путей, ведущих к одному файлу (номер инода). Программы могут сравнивать номера инодов и таким образом определять, какие имена путей ведут к одному и тому же файлу. Жесткие ссылки работают только в пределах одной файловой системы; файлы, которые имеют одинаковые номера инодов, но существуют в разных файловых системах, не связаны, программы учитывают это.

Например, rsyncвы можете использовать опцию --hard-links/ -H:

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

[…]

Обратите внимание, что rsync может обнаруживать только жесткие ссылки между файлами, находящимися внутри набора для передачи. […]

(источник:man 1 rsync)

rsync -Hпытается обнаружить жесткие ссылки в источнике и создать жесткие ссылки в месте назначения. Но даже тогда номера инодов в месте назначения не будут иметь ничего общего с номерами инодов в источнике. Когда rsync -Hзамечает, что некоторые имена путей в источнике ведут к одному и тому же номеру инода в той же файловой системе, то он попытается сделать так, чтобы соответствующие имена путей в месте назначения вели кнекоторыйодин номер inode; другими словами, он попытается создать файлы с жесткой ссылкой. Каким именно будет это число, выходит за рамки (и возможностей) rsync. Инструменту не нужно заботиться о числе, поскольку даже интерфейс для создания жестких ссылок ( link(2)) использует имена путей, а не номера inode.


Могу ли я просто запустить скрипт резервного копирования?

Я скопировал файлы (со старого внутреннего HD на новый внутренний HD). Та же структура файлов, имена файлов и т. д. Мне интересно, могу ли я просто запустить скрипт резервного копирования на новом компьютере, который теперь подключен к старому внешнему HD.

Ты можешь.Номера инодов в новом источнике могут быть (и, скорее всего, есть) совершенно другими, чем номера инодов в старом источнике, но это не имеет никакого значения. Достаточно идентичной структуры каталогов источника.

Помните, что есть--dry-run/-n.Чтобы быть в безопасности, создайте копию вашего скрипта и заставьте его использовать rsync --dry-run --verbose …или около того; запустите его и проанализируйте вывод. Проблемы, с которыми вы столкнетесь (если таковые возникнут), не будут иметь ничего общего с номерами inode.

Связанный контент