Почему существует несоответствие между Finder и rsync при работе с точечными файлами?

Начиная с двух файлов

      ~/foo/bar1.txt
~/foo/bar2.txt

в корневом томе моего Mac я копирую папку~/foo(он большой; это всего лишь пример), чтобы/Volumes/Kiwi. По прошлому опыту я знаю, что Finder намного быстрее, чем , поэтому я просто использую Finder для этой первоначальной копии. Это создаст следующие файлы.

      /Volumes/Kiwi/foo/bar1.txt
/Volumes/Kiwi/foo/bar2.txt

Теперь я хотел бы поддерживать постоянное резервное копирование с помощью , а не через Finder (поскольку оно будет инкрементным). (Я знаю и использую Time Machine; TM делает свое дело, и я хотел бы сделать свою собственную избыточную копию.)

Если я отредактирую~/foo/bar1.txtчтобы смоделировать изменение (но не ), а затем запустить

      rsync --dry-run -avz  ~/foo/  /Volumes/Kiwi/foo/

все хорошо. указывает на то, что толькоbar1.txtбудет скопировано, а неbar2.txt.

Но если Finder также скопировал файл~/foo/._bar3.txt, скопирует этот файл, даже если я его не трогал. Почему?

Это не так уж важно. повторно копировать не буду, но все же. Расхождение между Finder иrsync -avzвызывает недоумение. Я делаю что-то глупое, начиная с Finder, а затем переключаясь на ?

Подробности

Формат SSD

Внешний диск отформатирован с использованием карты разделов GUID и APFS.

Версия `rsync`

Я использую:

      > rsync --version
rsync  version 2.6.9  protocol version 29

что, поскольку я получаю

      $ which rsync
/usr/bin/rsync

это тот, который пришел с Вентурой. Есть ли альтернативаrsync(Homebrew, MacPorts, ..) что будет вести себя по-другому?

1 ответ

Короткий ответ: не беспокойтесь об этом. Это не настоящие копируемые файлы; это просто артефакт того, как версия rsync от Apple обрабатывает сложные метаданные файлов по протоколу (rsync v2), который не поддерживает их изначально.

Длинный ответ: файловые системы Apple всегда поддерживали (и использовали) различные формы сложных и нестандартных метаданных файловой системы. Сегодня это в основном «расширенные атрибуты», но раньше они включали такие вещи, как коды типа и создателя, флаги Finder и ветки ресурсов.

При работе с файловыми системами, форматами архивов, протоколами передачи файлов и т. д., которые не поддерживают сложные метаданные (а иногда даже какие-либо метаданные), инструменты Apple, как правило, используют формат AppleDouble , который разбивает метаданные на отдельный файл с расширением «._». " префикс. Вы часто будете видеть, как они появляются (если вы ищете невидимые файлы), когда копируете файлы Mac в файловую систему FAT или exFAT, архивируете их в файлы tar или zip и т. д.

Версия rsync от Apple использует тот же метод для передачи сложных метаданных. Если вы используетеrsync -E(или--extended-attributes), процесс отправки преобразует метаданные исходных файлов в AppleDouble, передает их как псевдофайл «._», а получатель декодирует их обратно в метаданные и проверяет правильность установки целевого файла.

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

Наконец, rsync версии 3 поддерживает сложные метаданные (при условии, что вы скомпилировали его с правильными патчами и используете-Xи возможно--fileflagsпараметры), но его формат отличается от того, который использует пользовательская версия Apple (и Apple не может обновиться до версии 3 по причинам лицензирования). Поэтому, если вы выполняете перенос между компьютером, использующим версию Apple, и компьютером, на котором работает rsync v3, у вас могут возникнуть проблемы с совместимостью.

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