6

Я пытался выяснить, как возобновить частичные передачи в rsync (в Windows, используя cygwin) без использования опции --inplace .

Я вижу, что rsync создает "частичные" файлы в каталоге назначения с такими именами, как . [Filename] .2dxZ1a, и поэтому, насколько я понимаю, если бы я использовал опцию --partial , rsync увидит файл, подобный этому, и возобновит передачу в этот файл. Но я обнаружил, что если я использую опцию --partial и процесс rsync заканчивается, то когда я снова запускаю команду rsync, она удаляет эти частичные файлы. Возможно, эта опция работает при кратковременном прерывании передачи, но не тогда, когда процесс заканчивается и начинается заново.

В дополнение к этой опции мне действительно понравилась --partial-dir , ожидая, что если я --partial-dir=".rsync" (с или без окружающих кавычек), rsync создаст каталог .rsync в каталог назначения и перенести файлы в [dir]/. rsync , переместив их в [dir] после завершения передачи (и удалив [dir]/. rsync, когда он больше не нужен). Но, похоже, rsync полностью игнорирует эту опцию и просто создает свои временные файлы в целевом каталоге, как обычно (и удаляет их при перезапуске).

Итак, мне интересно: я делаю что-то не так или я просто не правильно понимаю эти опции?

Моя команда: rsync -rt --log-file="rsync.log" --partial-dir=".rsync" --del rsync://rsync-server:port/module/ /cygdrive/local/path/

2 ответа2

7

Я запускал эту команду из планировщика задач Windows. Когда я взял команду и запустил ее из консоли (командной строки), параметры работали как надо *.

Единственная разница между выполнением команд произошла, когда я попытался их завершить. В консоли, нажав Ctrl+C , rsync завершился с ошибкой

rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at ...

В планировщике задач Windows при щелчке правой кнопкой мыши запущенной задачи и выборе « Конец» выдается ошибка.

rsync: read error: Connection reset by peer (104)

Таким образом, я могу только предположить, что способ, которым планировщик задач Windows завершает процесс, отличается от способа, которым rsync ожидает завершить *, и это приводит к завершению rsync без выполнения процедур выхода.


* - Я узнал больше о том, как --partial и --partial-dir .

С помощью --partial rsync создает временный файл, как я видел, но когда rsync заканчивается (ожидаемым образом), он переименовывает этот временный файл в обычное имя файла (например, переименовывает . [Имя файла] .2dxZ1a в [имя файла]), а затем при следующем запуске копирует частичный файл в новый временный файл (например, копирует [имя файла] в . [имя файла] .34cae2).

С помощью --partial-dir rsync заполняет временный файл, затем при закрытии перемещает временный файл в каталог, который вы указываете как обычное имя файла (например, переименовывает . [Имя файла] .2dxZ1a в [частичный- каталог ]/[имя файла]), Затем при следующем запуске он копирует файл из [partal-dir] в новый временный файл в каталоге назначения.

2

Похоже, у вас есть правильные идеи, но без знания всей вашей команды невозможно сказать. Для меня эти параметры работают, как ожидалось, когда я убиваю rsync (с помощью ctrl-C) и перезапускаю его (GNU/Linux с rsync 3.0.6). Стоит помнить, что если вы используете --wholefile или любой другой параметр, который подразумевает --wholefile (см. Справочную страницу rsync), то --partial (-dir) не будет работать, и вы можете увидеть описанные вами симптомы. Также, если он не может найти или создать каталог, указанный в --partial-dir, он будет игнорировать его. Другая возможность заключается в том, что --partial на самом деле работает для вас, но вы не можете сказать и думать, что он начинается заново, даже если это не так - я ожидаю, что он удалит временные файлы после завершения передачи и обновления фактического файла , Вы можете отслеживать это с помощью --progress - он начнется с 0%, но затем очень быстро перейдет к тому проценту, который уже был перенесен, и продолжит оттуда. Для файлов меньшего размера процесс может быть слишком быстрым, чтобы увидеть многое, поэтому попробуйте что-нибудь большее (100 МБ или более, в зависимости от скорости соединения с пунктом назначения). Надеюсь это поможет. Изменить: Я обнаружил, что --partial-dir, кажется, создает временный файл в каталоге назначения во время передачи, так же, как с --partial. Только когда передача прекращается, она перемещается в указанную вами директорию с частичными файлами, поэтому изначально кажется, что она ничем не отличается от --partial.

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