Заставьте rsync пропускать файлы одинакового размера

Заставьте rsync пропускать файлы одинакового размера

Я использую следующую команду для копирования большого количества больших видеофайлов на внешние диски.

rsync -Ph --inplace /Volumes/Production/Prefix* Prefix

У нас был сбой питания, и копирование было прервано. С rsync не проблема просто перезапустить его, но проблема в том, что ему требуется довольно много времени, чтобы вернуться к тому, с чего он был. Он проходит по каждому файлу и выглядит так, будто считывает весь файл. Его скорость, как сообщается, примерно в 3-5 раз выше обычной, пока он не доходит до точки, когда снова начинает копировать.

Что именно он делает в это время? Читает ли он весь файл и сравнивает его с исходным? Или делает что-то еще необычное? Есть ли способ заставить rsync пропускать завершенные файлы быстрее? Например, указать ему проверять только файлы с другим размером или что-то в этом роде?

решение1

Причина вашей проблемы в том, что вы не добавляете -t(или -a, который встраивается -tи куча других опций) напредыдущийзапустите rsync.

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

Поведение сравнения Rsync

По умолчанию rsync пропускает существующий файл назначения, если время его последнего изменения и размер файла совпадают с таковыми у исходного файла.

Оправляясь от этого

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

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

Объяснение опций

  • Сравнение rsync по умолчанию: если размер файла и время последнего изменения совпадают, пропустить.

  • --size-only: если размеры файлов совпадают, пропустить.

  • --ignore-times: никогда не пропускать. Файл времении размерыигнорируются.

  • --checksum: если размеры файлов совпадают, вычислить контрольную сумму обоих файлов и, если они совпадают, пропустить.

Параметр --size-onlyувеличивает вероятность пропуска файлов, а параметры --ignore-timesи --checksumуменьшают вероятность пропуска файлов.

решение2

rsyncесть вариант: --size-onlyкоторый делает то, что вам нужно.

решение3

Rsync проверяет mod-time и размер файлов по умолчанию. Если вы добавите --checksum, то он будет сравнивать со всем файлом (т.е. независимо от mod-time и соответствия размера).

решение4

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

Если вы делаете копии, где отметка времени может/должна совпадать: всегда включайте -a.

Сейчас (хотя и давно) вы можете попробовать добавить--ignore-times

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