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