В Ubuntu я хочу скопировать большой файл со своего жесткого диска на съемный диск rsync
. По какой-то другой причине операция не может быть завершена за один запуск. Поэтому я пытаюсь выяснить, как использовать, rsync
чтобы возобновить копирование файла с того места, где он остановился в прошлый раз.
Я пытался использовать опцию --partial
или --inplace
, но вместе с тем --progress
, я нашел rsync
с --partial
или --inplace
фактически начинается с начала, а не с того, что было оставлено в прошлый раз. rsync
Ранняя остановка вручную и проверка размера полученного файла также подтвердили то, что я нашел.
Но с --append
rsync начинается с того, что осталось в прошлый раз.
Я в замешательстве, как я увидел на странице руководства --partial
, --inplace
и, --append
похоже, связан с возобновлением копирования с того, что осталось в прошлый раз. Кто-то может объяснить разницу? Почему не работает --partial
или не --inplace
работает для возобновления копирования? Правда ли, что для возобновления копирования rsync
должна работать --append
опция?
Кроме того, если частичный файл был оставлен mv
или cp
не rsync, rsync --append
правильно ли возобновится копирование файла?
--append
заставляетrsync
поверить, что, если два соответствующих файла имеют разную длину, то более короткий файл идентичен начальной части более длинного. Так что, да, если вы начнете копировать большой файлcp
и прервите процесс копирования, тоrsync --append
скопируете только оставшуюся часть файла. ( Примечание: еслиcp
прерывается грохотом системы, существует небольшая вероятность того, что содержимое файлов и метаданные не синхронизирована, то есть, файл поврежден В этом случае работает.rsync
Еще раз , не--append
должно решить эту проблему.)--partial
без--append
.--append
и--append-verify
имеет опасный случай сбоя: когда файл получателя имеет тот же размер или больше, но имеет другие данные. Я предлагаю решение, основанное на этом--no-whole-file
.Знайте, что
--append
подразумевает--inplace
, что подразумевает--partial
.При использовании просто
--partial
вы должныrsync
оставить частичные переводы и возобновить их при последующих попытках.При использовании
--append
вы должныrsync
оставить как частичные файлы, так и возобновить их в следующий раз. После передачиrsync
следует проверять только контрольную сумму передаваемых данных.--append-verify
включает в себя весь файл в проверке контрольной суммы, включая любую часть, переданную в предыдущей передаче.С либо
--append
или--append-verify
неудачная контрольная проверка должна вызвать файл , чтобы быть повторно переданы полностью (используя--inplace
)Вы должны иметь возможность возобновить
mv
или выполнитьcp
операцию,rsync
но вы можете использовать эту--append-verify
опцию для спокойствия.Обратите внимание, что использование
--append
приводитrsync
к копированию только тех файлов, размер которых на получателе меньше размера отправителя (независимо от отметок времени) или отсутствует на получателе. По документации на эту опцию:Больше информации на странице руководства
источник
--append
и--append-verify
иметь опасный случай сбоя: когда файл получателя имеет тот же размер или больше, но имеет другие данные. Я предлагаю решение, основанное на этом--no-whole-file
.--checksum
следует использовать. Я не могу найти его в явном виде, но логически любой из вариантов возобновления должен подразумевать,--no-whole-file
потому что он--whole-file
должен быть несовместимым.--append-verify
пропустит файлы одинакового или большего размера с разными датами , которые могут быть «неожиданными». Нет необходимости во--checksum
всех файлах, так какrsync
в любом случае будет выполняться проверка всей файловой суммы, но только для того, что она передает.--checksum
сообщаетrsync
контрольной сумме файлы перед отправкой, что гарантирует передачу всех измененных файлов независимо от их размера / времени. У вас есть источник неожиданного--append-verify
поведения, поскольку то, что вы описываете, не соответствует документации или моему (ограниченному) опыту?--append-verify
ссылается на--append
который гласит:If a file needs to be transferred and its size on the receiver is the same or longer than the size on the sender, the file is skipped.
Даже если файл должен быть передан из-за--checksum
, он все равно может быть пропущен.Дэвид Шварц прав,
--partial
(или лучше-P
) делает то, что вы хотите. Я проверил это на 37G-файле, который был остановлен на ~ 8g, по сети. rsync быстро просканировал первые части фрагмента (показывая прогресс по ходу дела благодаря-P
), а затем возобновил передачу в конец файла фрагмента.источник
--whole-file
описанием опции.--no-W
(который на самом деле работает!)--no-W
если вы не понимаете, что именно это означает для локальных файлов. См. Unix.stackexchange.com/a/181018/100397Вы делали это правильно,
--partial
делает то, что вы хотите. Похоже, что он начинается с начала, потому что он всегда начинается с начала списка фрагментов данных файла, которые необходимо скопировать.--append
Вариант опасно и приведет к повреждению файла , если данные не совпадают по какой - то причине.источник
--append
продолжаются со смещения байта).По умолчанию
rsync
включается--whole-file
при переносе с локального диска на локальный диск. Это перезапустит прерванную передачу с самого начала, вместо проверки уже имеющихся частей.Чтобы отключить это, используйте:
Комбинируя это с одним
--inplace
или--partial
позволит возобновить передачу позже.Мой псевдоним для использования
rsync
для копирования:Предупреждение : будьте осторожны при использовании, так
--append-verify
как он пропустит все файлы назначения того же размера или больше.источник
rsync
сравнивает исходные и соответствующие файлы назначения перед передачей, чтобы отправить только те части, которые были изменены (дельта-передача).--no-whole-file
говоритrsync
сделать то же самое для локального копирования. Документация не предполагает, что это повлияет на возобновление частичной передачи отдельных файлов.rsync
пропустит файлы с одинаковым размером и временными метками. Ни то,--append-verify
ни другое не--no-whole-file
должно изменить это поведение, но оно--checksum
должно работать либо для душевного спокойствия за счет дискового ввода-вывода--append-verify
пропустит файлы одинакового или большего размера с разными датами , которые могут быть «неожиданными». Нет необходимости во--checksum
всех файлах, так какrsync
в любом случае будет выполняться проверка всей файловой суммы, но только для того, что она передает.