Вопрос или проблема
Я считаю, что в руководстве по rsync говорится, что инкрементальные передачи файлов выполняются при передаче файлов между файловыми системами. Однако вывод rsync ниже показывает, что дельта-передача отключена, когда я передаю файлы с диска в облачное файловое хранилище, смонтированное в директории. Почему дельта-передача не включена для этой передачи через границу файловой системы и как это можно принудительно включить?
$ tail -f out.log
[отправитель] расширение массива указателей file_list до 1024 байт, перемещение выполнено
[отправитель] скрытие директории home/user/cloudDrive из-за шаблона cloudDrive/
[отправитель] расширение массива указателей file_list до 1024 байт, перемещение не выполнено
[отправитель] расширение массива указателей file_list до 1024 байт, перемещение не выполнено
[отправитель] расширение массива указателей file_list до 1024 байт, перемещение не выполнено
[отправитель] расширение массива указателей file_list до 1024 байт, перемещение не выполнено
[отправитель] расширение массива указателей file_list до 1024 байт, перемещение не выполнено
[отправитель] расширение массива указателей file_list до 1024 байт, перемещение не выполнено
создана директория /home/user/cloudDrive/folder/2024-09-27T00:06:05+02:00
дельта-передача отключена для локальной передачи или --whole-file
Дельта-передачи используются при передаче файлов по сети с использованием протокола rsync, потому что именно тогда rsync экономит сетевую полосу и ускоряет процесс.
Для локальных файловых систем в этом нет смысла, и сетевая файловая система ведет себя как локальная: rsync все равно должен читать весь файл, даже для дельта-передачи, так что лучше выполнить полную передачу.
Если вы можете запустить rsync на облачном сервисе, то протокол rsync позволяет вам запросить у удаленного rsync получение контрольной суммы файла, и удаленный rsync прочитает весь файл, создаст его контрольную сумму и отправит результат.
Ответ или решение
Rsync действительно предназначен для оптимизации передачи данных, и его алгоритм дельта-передачи позволяет минимизировать объем передаваемой информации при копировании файлов. Однако, когда речь идет о копировании с локального диска на облачное хранилище, существуют определенные характеристики, которые влияют на работу rsync и его способность выполнять дельта-передачу.
Во-первых, важно понять, что rsync применяет дельта-передачу в основном в сценариях, которые включают сетевые передачи между двумя системами. При этом, rsync использует свои алгоритмы, чтобы определить, какие части файла изменились и передает только эти изменения, что экономит полосу пропускания и увеличивает скорость передачи. Однако при копировании между локальным диском и облачным хранилищем, которое смонтировано в виде локальной файловой системы, rsync рассматривает этот процесс как "локальный", даже если фактически хранилище находится в облаке.
Основные причины, почему дельта-передача отключена при копировании с локального диска в облачное хранилище:
-
Локальная природа работы: Облачные файловые системы часто выступают как локальные в точке доступа, и rsync ведет себя так, будто происходит передача файлов между локальными дисками. Таким образом, дельта-передача не активируется, так как нет необходимости оперировать изменениями между разными системами.
-
Чтение файлов: При передаче rsync необходимо будет прочитать весь файл из локальной файловой системы, чтобы передать его в облачное хранилище. В этом случае, даже если дельта-передача была бы активна, rsync должен был бы сначала полностью прочитать файл, чтобы определить, какие части нужно отправить.
-
Отсутствие поддержки протокола: Если rsync не запущен как служба на облачном сервере (что крайне маловероятно для большинства облачных хранилищ), то не будет возможности использовать протокол rsync для выполнения дельта-передачи на удаленном сервере. Таким образом, оба конца передачи не могут взаимодействовать с использованием алгоритмов экономии данных.
Чтобы "принудить" rsync выполнять дельта-передачу, вы можете использовать следующие подходы:
-
Запуск rsync на удаленной стороне: Если у вас есть возможность запускать rsync на сервере облачного хранилища, вы сможете активировать дельта-передачу за счет проверки контрольных сумм файлов. Это требует доступа к облачному серверу, что может быть ограничено для некоторых сервисов.
-
Использование параметра
--inplace
: Этот параметр позволяет rsync обновлять существующие файлы на месте, не создавая временные копии. Однако имейте в виду, что это может не решить проблему с отсутствием дельта-передачи, но позволит сократить объем используемого дискового пространства. -
Копирование на другую локальную файловую систему и затем загрузка в облако: Сначала используйте rsync для копирования на локальную файловую систему, а затем загрузите результаты в облачное хранилище через интерфейс или специализированные утилиты, предоставляемые облачным провайдером.
В итоге, rsync не может выполнять дельта-передачу при копировании на облачные хранилища, смонтированные как локальная файловая система из-за специфических особенностей работы и понимания, что такие передачи являются локальными. Если у вас есть доступ к удаленному rsync, это может помочь, но в большинстве случаев необходимо рассмотреть альтернативные подходы.