SSHFS jest wygodny, ale nie współpracuje dobrze z rsync lub bardziej ogólnie z narzędziami do synchronizacji.
Największym problemem jest to, że SSHFS w dużej mierze zabija optymalizacje wydajności rsync. W szczególności, dla średnich i dużych plików, gdy rsync widzi, że plik został zmodyfikowany, oblicza sumy kontrolne na częściach pliku po każdej stronie, aby przesłać tylko te części, które zostały zmodyfikowane. Jest to optymalizacja tylko wtedy, gdy przepustowość sieci jest znacznie mniejsza niż przepustowość dysku, co zwykle ma miejsce. Ale w przypadku SSHFS przepustowość „dysku” jest w rzeczywistości przepustowością sieci, więc rsync musiałby odczytać cały plik, aby ustalić, co skopiować. W rzeczywistości, z lokalną kopią (która jest, jeśli chodzi o rsync, nawet jeśli jedna ze stron jest na SSHFS), rsync po prostu kopiuje cały plik.
SSHFS ma również negatywny wpływ na wydajność, jeśli istnieje wiele małych plików. Rsync musi sprawdzić przynajmniej metadane każdego pliku, aby ustalić, czy został zmodyfikowany. W przypadku SSHFS wymaga to podróży w obie strony do sieci dla każdego pliku. Dzięki rsync przez SSH obie strony mogą pracować równolegle i przesyłać informacje zbiorczo, co jest znacznie szybsze.
Jeśli chodzi o ograniczenia dostępu, SSHFS wymaga dostępu SFTP, podczas gdy rsync wymaga zdolności do uruchamiania kodu (w szczególności programu rsync) przez powłokę. Jeśli użytkownik nie ma konta powłoki, jest możliwe i powszechne zapewnienie konta specjalnej powłoki, która pozwala na uruchomienie tylko kilku programów, w tym sftp-server
i rsync
. Zobacz Czy potrzebujesz powłoki dla SCP?
Jeśli kopiujesz tylko nowe pliki i nie ma bardzo dużej liczby plików, nie ma znaczącej różnicy wydajności.
SSHFS ustanawia połączenie SSH, gdy system plików jest podłączony, i zachowuje to połączenie, dopóki nie zostanie odmontowane. Rsync tworzy nowe połączenie za każdym razem, gdy go uruchomisz, ale możesz użyć funkcji multipleksowania i funkcji piggyback na jednym głównym połączeniu, aby uniknąć uwierzytelnienia za każdym razem.
SSHFS jest systemem plików FUSE i dlatego obsługuje tylko tradycyjne unikatowe metadane i ACL. Rsync może przenosić atrybuty rozszerzone (musisz użyć rsync -aAX
, pamiętaj, że zwykły -a
zachowuje tylko tradycyjne metadane uniksowe).
rsync --no-whole-file /mounted/file.tar.gz /home/local/file.tar.gz
. Kiedy używamrsync
do tej operacji, podczas obliczania sumy kontrolnej w celu przesłania tylko zmodyfikowanych części, czyrsync
powinien czytać cały plik, który doprowadzi do pobrania pełnych danych zamiast tylko zaktualizowanej sekcji? @Gillessshfs
połączenie? Zobacz: unix.stackexchange.com/q/544404/198423 @GillesAby odpowiedzieć na twoje główne pytanie: tak, istnieją różnice. Przy
sshfs
istniejącym połączeniu umożliwiającym dostęp do zdalnych plików przez bezpieczny kanał, a przy rsync przez ssh, ten bezpieczny kanał jest skonfigurowany do komunikowania się ze zdalną instancją rsync .Aby odpowiedzieć na drugie pytanie: rsync przez ssh będzie szybszy w większości, jeśli nie we wszystkich instancjach, ponieważ rsync w systemie zdalnym zapewnia większą inteligencję w wyszukiwaniu plików, które nie wymagają synchronizacji, ale przede wszystkim dlatego, że działa równolegle z twoim lokalny rsync, aby zebrać te informacje.
Bezpieczeństwo obu sposobów jest takie samo, zakładając, że podobna konfiguracja parametrów ssh (długość klucza, algorytmy) jest taka sama. Domyślne ustawienia dla systemu źródłowego i docelowego zależą od kombinacji dystrybucji w tych systemach.
źródło