3

Я скопировал множество файлов из многих папок (~ 54 ГБ) из папки ext4 в другую с помощью команды cp ~/1 ~/2 -d -r -v -i в bash. Затем я хотел убедиться, что все файлы были скопированы правильно, поэтому я запустил rsync --delete -vturOn ~/1 ~/2 , но rsync хотел скопировать все файлы. Почему это?

PS: я намеревался использовать cp с -a , но использовал -d по ошибке.

Изменить: ответ здесь заставил меня использовать флаг --itemize-changes который показывает мне >f..t...... для всех файлов. Страница man указывает, что t означает, что время модификации отличается, type-файлы - это файл (f) и только атрибуты элемента изменяются (.). Это правильно? Так что все, что будет изменено, это время модификации?

Редактировать: я запустил rsync (без -n) и, несмотря на разное время изменения t , он снова скопировал все файлы (фактическое содержимое файла), что является неожиданным, потому что rsync все равно должен делать разностное копирование, что должно отмечать?

Редактировать: Остановить синхронизацию и повторно выполнить без параметра -t . Теперь подробные изменения показали 'T' вместо t . Кажется, мне придется копировать все файлы через rsync хотя бы один раз, если я хочу использовать rsync для этих файлов в будущем.

Изменить: Я удалил целевые файлы и снова скопировал все с помощью rsync с параметрами -van .

1 ответ1

3

Из документации rsync:

Rsync находит файлы, которые необходимо передать, используя алгоритм "быстрой проверки" (по умолчанию), который ищет файлы, которые изменились в размере или в момент последнего изменения.

Кроме того, когда источник и цель являются локальными, rsync запускается с --whole-file по умолчанию.

-W, --whole-file

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

Я не уверен, но, похоже, вам может понадобиться опция --checksum .

-c, --checksum              skip based on checksum, not mod-time & size

Обратите внимание, что для этого требуется прочитать исходные и целевые файлы с диска для вычисления контрольной суммы.

Подробнее об этом:

https://superuser.com/a/118984/219809

https://serverfault.com/a/279346

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .