
Я использую следующую команду для копирования большого количества больших видеофайлов на внешние диски.
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