SSHFS удобен, но он плохо сочетается с rsync или, в более общем смысле, с инструментами синхронизации.
Самая большая проблема заключается в том, что SSHFS в значительной степени убивает оптимизацию производительности rsync. В частности, для средних и больших файлов, когда rsync видит, что файл был изменен, он вычисляет контрольные суммы по частям файла с каждой стороны, чтобы передать только те части, которые были изменены. Это оптимизация, только если пропускная способность сети значительно меньше, чем пропускная способность диска, что обычно имеет место. Но с SSHFS пропускная способность «диска» фактически является пропускной способностью сети, поэтому rsync должен будет прочитать весь файл, чтобы определить, что копировать. На самом деле, с локальной копией (что касается rsync, даже если одна из сторон находится в SSHFS), rsync просто копирует весь файл.
SSHFS также отрицательно влияет на производительность, если в нем много небольших файлов. Rsync должен проверить хотя бы метаданные каждого файла, чтобы определить, был ли он изменен. С SSHFS это требует сетевого обхода для каждого файла. При использовании rsync через SSH обе стороны могут работать параллельно и передавать информацию в больших объемах, что намного быстрее.
С точки зрения ограничений доступа, SSHFS требует доступа SFTP, тогда как rsync требует возможности выполнять код (в частности, программу rsync) через оболочку. Если у пользователя нет учетной записи оболочки, можно и обычно предоставлять учетную запись со специальной оболочкой, которая позволяет запускать только несколько программ, включая sftp-server
и rsync
. См. Нужна ли оболочка для SCP?
Если вы копируете только новые файлы, а количество файлов не очень велико, разница в производительности отсутствует.
SSHFS устанавливает соединение SSH при монтировании файловой системы и сохраняет это соединение до тех пор, пока оно не будет отключено. Rsync устанавливает новое соединение каждый раз, когда вы его запускаете, но вы можете использовать функцию мультиплексирования и контрейлерных операций на одном главном соединении, чтобы избежать аутентификации каждый раз.
SSHFS является файловой системой FUSE и поэтому поддерживает только традиционные метаданные Unix и ACL. Rsync может передавать расширенные атрибуты (вам нужно использовать rsync -aAX
, обратите внимание, что обычный -a
сохраняет только традиционные метаданные Unix).
rsync --no-whole-file /mounted/file.tar.gz /home/local/file.tar.gz
. Когда я используюrsync
эту операцию, при вычислении контрольной суммы для переноса только частей, которые были изменены,rsync
нужно ли читать весь файл, что приведет к загрузке полных данных вместо только его обновленного раздела? @Gilles