Я скопировал много файлов во многих папках (~54 ГБ) из ext4 в другую с помощью cp ~/1 ~/2 -d -r -v -i
bash. Затем я хотел проверить, что все файлы были скопированы правильно, поэтому я запустил rsync --delete -vturOn ~/1 ~/2
, но rsync хотел скопировать все файлы. Почему так?
PS: Я хотел использовать cp
с -a
, но -d
по ошибке использовал.
Редактировать: Ответздесьзаставило меня использовать --itemize-changes
флаг, который показывает мне >f..t......
для всех файлов. На странице руководства указано, что t
средства времени модификации различны, тип-файлы — это файл ( f
), а атрибуты элемента только изменяются ( .
). Это правильно? Так что все, что будет изменено, — это время модификации?
Редактировать: Я запустил rsync
(без -n
), и, несмотря на то, что t
время изменения было разным, он снова скопировал все файлы (реальное содержимое файлов), что неожиданно, поскольку rsync в любом случае должен делать diff-копию, на что следует обратить внимание?
Редактировать: Остановил синхронизацию и перезапустил без -t
параметра. Теперь детализированные изменения показывают 'T' вместо t
. Похоже, мне придется скопировать все файлы через rsync по крайней мере один раз, если я захочу использовать rsync для этих файлов в будущем.
Редактировать: Я удалил целевые файлы и скопировал все заново с помощью rsync с -van
параметрами.
решение1
Из документации rsync:
Rsync находит файлы, которые необходимо перенести, с помощью алгоритма «быстрой проверки» (по умолчанию), который ищет файлы, размер или время последнего изменения которых изменились.
Кроме того, если и источник, и цель являются локальными, по умолчанию rsync
запускается с опцией.--whole-file
-W, --whole-file
С этой опцией алгоритм дельта-передачи rsync не используется, и вместо этого весь файл отправляется как есть. Передача может быть быстрее, если эта опция используется, когда пропускная способность между исходной и целевой машинами выше, чем пропускная способность к диску (особенно когда «диск» на самом деле является сетевой файловой системой). Это значение по умолчанию, когда и источник, и назначение указаны как локальные пути, но только если не действует опция пакетной записи.
Я не уверен, но, похоже, вам понравится эта --checksum
опция.
-c, --checksum skip based on checksum, not mod-time & size
Обратите внимание, что для вычисления контрольной суммы требуется прочитать как исходный, так и целевой файлы с диска.
Подробнее об этом: