Вопрос или проблема
Передача данных с помощью 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 останавливается после пробуждения ноутбука из спящего режима, является распространенной проблемой, которая может возникнуть из-за временной потери сетевого соединения. Это связано с тем, что закрытие крышки ноутбука приводит к его переходу в спящий режим, что может вызвать задержки и ошибки в процессе передачи файлов.
Решение проблемы в вашем случае может быть двусторонним:
-
Использование параметров 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
- Если ваша предыдущая сессия rsync была прервана, можно начать новую передачу файлов, добавив параметры
-
Настройки системы:
- Чтобы избежать подобных ситуаций в будущем, вы можете изменить настройки управления питанием вашего ноутбука. Например, в большинстве систем можно настроить, чтобы при закрытии крышки происходило не переход в спящий режим, а просто отключение дисплея. Это позволит продолжить активные процессы, включая rsync.
- Также рекомендуется следить за состоянием Wi-Fi-соединения. Убедитесь, что соединение автоматически восстанавливается после выхода из спящего режима.
-
Учёт уже переданных файлов:
- Важно отметить, что rsync по умолчанию будет пропускать файлы, которые уже были успешно переданы, если их размер или время изменения не изменилось. Поэтому добавление
--partial
и--append
не вызовет повторной передачи уже завершенных файлов.
- Важно отметить, что rsync по умолчанию будет пропускать файлы, которые уже были успешно переданы, если их размер или время изменения не изменилось. Поэтому добавление
Кроме того, используя --append
, вы можете увериться, что в случае новых или изменённых файлов, процесс передачи будет происходить более эффективно, так как rsync только обновит измененные части, вместо полной перезаписи.
Ваша новая команда должна успешно продолжить передачу, как только вы возобновите её после внесения указанных выше изменений.