Rsync не продолжает передачу после выхода ноутбука из спящего режима

Вопрос или проблема

Передача данных с помощью rsync из локального источника на облачное хранилище, смонтированное с помощью fuse, зависла, и Wi-Fi на ноутбуке перестал работать, поскольку закрытие крышки приостанавливает ноутбук. Wi-Fi восстановлен, но rsync не продолжает передачу файлов.

Я не запускал rsync с опцией -P:

rsync -vva --exclude source dest 1>out.log 2>err.log
$ ps aux | grep rsync
user   738104  0.0  0.0 229708  2560 pts/6    S+   00:06   0:27 rsync -vva --exclude cloudDrive/ /home /home/user/cloudDrive/backup/2024-09-27T00:06:05+02:00
user   738105  0.0  0.0 289016  1876 pts/6    S+   00:06   0:00 rsync -vva --exclude cloudDrive/ /home /home/user/cloudDrive/backup/2024-09-27T00:06:05+02:00
user   738119  0.0  0.0 307384  1476 pts/6    D+   00:06   0:32 rsync -vva --exclude cloudDrive/ /home /home/user/cloudDrive/backup/2024-09-27T00:06:05+02:00
user   749293  0.0  0.0 221632  1536 pts/4    S+   00:16   0:00 tail -f /tmp/rsync_backup_out.log
user   983692  0.0  0.0 221632  1408 pts/7    S+   01:00   0:00 tail -f /tmp/rsync_backup_err.log
user  1199890  0.0  0.0 224692  2304 pts/8    S+   10:27   0:00 man rsync
user  1199899  0.0  0.0 224528   888 pts/8    S+   10:27   0:00 man rsync
user  1263878  0.0  0.0 222436  2176 pts/18   S+   16:41   0:00 grep --color=auto rsync
rsync  версия 3.3.0  версия протокола 31

Обновление:

Я случайно отменил процесс rsync с помощью Ctrl+C, поэтому теперь вопрос: поможет ли использование --partial при следующем запуске rsync пропустить уже переданные файлы и передать только оставшиеся в исходном каталоге?

Rsync всегда пытается пропустить уже переданные файлы. Вам не нужно добавлять какие-либо опции для этого.

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

–partial

По умолчанию rsync удалит любой частично переданный файл, если передача будет прервана. В некоторых случаях более целесообразно сохранить частично переданные файлы. Использование опции –partial говорит rsync сохранить частичный файл, что должно сделать следующую передачу остальной части файла гораздо быстрее.

Этот ответ https://unix.stackexchange.com/a/165417/289865 объясняет, что с опцией –partial или без нее rsync сохраняет частично переданные файлы. С опцией –partial rsync сохраняет файл на месте, тогда как без –partial файл сохраняется во временном файле с аналогичным именем исходного файла. Чтобы возобновить незавершенные передачи файлов, на следующем запуске rsync нужно использовать –append для обновления целевых файлов, которые были частично переданы.

Сначала мне не было ясно, обновляет ли –append только существующие файлы или также копирует исходные файлы, которые не существуют в целевом каталоге, и я помыслал, что, возможно, последнее является поведением по умолчанию для rsync? Теперь я осознал, что следующее отвечает на этот вопрос:

Основываясь на этом из man-страницы

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

rsync всегда будет передавать новые файлы, потому что для файлов, которые не существуют в целевом каталоге (т.е. новых файлов), время изменения исходного файла > None или размер исходного файла > None. Добавление –append просто означает, что для времени изменения исходного файла > времени изменения целевого файла или размер исходного файла > размер целевого файла rsync будет обновлять вместо того, чтобы копировать весь исходный файл.

Ответ или решение

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

Решение проблемы в вашем случае может быть двусторонним:

  1. Использование параметров rsync:

    • Если ваша предыдущая сессия rsync была прервана, можно начать новую передачу файлов, добавив параметры --partial и --append (или --append-verify для дополнительной проверки).
    • Параметр --partial сохраняет частично переданные файлы, а --append позволяет возобновить передачу, начиная с последней переданной части, вместо повторной передачи всего файла.

    Пример команды:

    rsync -vva --partial --append --exclude cloudDrive/ /home /home/user/cloudDrive/backup/2024-09-27T00:06:05+02:00
  2. Настройки системы:

    • Чтобы избежать подобных ситуаций в будущем, вы можете изменить настройки управления питанием вашего ноутбука. Например, в большинстве систем можно настроить, чтобы при закрытии крышки происходило не переход в спящий режим, а просто отключение дисплея. Это позволит продолжить активные процессы, включая rsync.
    • Также рекомендуется следить за состоянием Wi-Fi-соединения. Убедитесь, что соединение автоматически восстанавливается после выхода из спящего режима.
  3. Учёт уже переданных файлов:

    • Важно отметить, что rsync по умолчанию будет пропускать файлы, которые уже были успешно переданы, если их размер или время изменения не изменилось. Поэтому добавление --partial и --append не вызовет повторной передачи уже завершенных файлов.

Кроме того, используя --append, вы можете увериться, что в случае новых или изменённых файлов, процесс передачи будет происходить более эффективно, так как rsync только обновит измененные части, вместо полной перезаписи.

Ваша новая команда должна успешно продолжить передачу, как только вы возобновите её после внесения указанных выше изменений.

Оцените материал
Добавить комментарий

Капча загружается...