Differenze tra rsync su remoto e rsync local su sshfs montato?


12

C'è qualche differenza se eseguo rsync con host remoto (ssh: //) come sorgente / destinazione o utilizzo il percorso locale per condividere la directory montata tramite sshfs?

Potrebbero esserci differenze per quanto riguarda la sicurezza o la velocità di copia senza alcun utilizzo degli switch, basta mettere in pausa la modalità archivio rsync e il percorso host remoto (ssh). Lo stesso con sshfs monta solo con sorgente e destinazione (nessuna modifica di cifratura, solo di default).

Risposte:


17

SSHFS è conveniente, ma non si adatta bene con rsync o più in generale con gli strumenti di sincronizzazione.

Il problema più grande è che SSHFS uccide in gran parte le ottimizzazioni delle prestazioni di rsync. In particolare, per file medio-grandi, quando rsync vede che un file è stato modificato, calcola i checksum su parti del file su ciascun lato al fine di trasferire solo le parti che sono state modificate. Questa è un'ottimizzazione solo se la larghezza di banda della rete è significativamente inferiore alla larghezza di banda del disco, che di solito è il caso. Ma con SSHFS, la larghezza di banda del “disco” è in realtà la larghezza di banda della rete, quindi rsync dovrebbe leggere l'intero file per determinare cosa copiare. In effetti, con una copia locale (che è, per quanto riguarda rsync, anche se uno dei lati è su SSHFS), rsync copia semplicemente l'intero file.

SSHFS è anche dannoso per le prestazioni se ci sono molti piccoli file. Rsync deve controllare almeno i metadati di ogni file per determinare se è stato modificato. Con SSHFS, ciò richiede un round trip di rete per ciascun file. Con rsync su SSH, le due parti possono lavorare in parallelo e trasferire informazioni in blocco, che è molto più veloce.

In termini di restrizioni di accesso, SSHFS richiede l'accesso SFTP, mentre rsync richiede la possibilità di eseguire il codice (in particolare, il programma rsync) tramite una shell. Se l'utente non ha un account shell, è possibile e comune fornire un account con una shell speciale che consenta di eseguire solo alcuni programmi tra cui sftp-servere rsync. Vedi Hai bisogno di una shell per SCP?

Se stai solo copiando nuovi file e non c'è un numero molto grande di file, non c'è alcuna differenza significativa di prestazioni.

SSHFS stabilisce una connessione SSH quando il filesystem è montato e mantiene tale connessione fino a quando non viene smontata. Rsync effettua una nuova connessione ogni volta che la esegui, ma puoi utilizzare la funzione multiplexing e il piggyback su una singola connessione principale per evitare di eseguire l'autenticazione ogni volta.

SSHFS è un filesystem FUSE e supporta quindi solo metadati e ACL tradizionali Unix. Rsync può trasferire attributi estesi (è necessario utilizzare rsync -aAX, si noti che una pianura -aconserva solo i metadati Unix tradizionali).


Ad esempio, ho un singolo file compresso nella directory SSHFS montata e quel file viene copiato nella mia directory locale. Successivamente quel file viene aggiornato nella directory montata e voglio copiare solo la sua sezione aggiornata nella mia directory locale usando rsync --no-whole-file /mounted/file.tar.gz /home/local/file.tar.gz. Quando utilizzo rsyncper questa operazione, durante il calcolo del checksum per trasferire solo le parti che sono state modificate, rsyncdovrei leggere l'intero file, il che porterà a scaricare i dati completi anziché solo la sua sezione aggiornata? @Gilles
alper,

1
@alper Quando usi rsync su sshfs, rsync deve leggere l'intero file. Non può sapere che cosa deve essere aggiornato altrimenti. Non c'è modo di ottimizzare trasferendo solo i checksum perché non c'è modo di calcolare i checksum sul server.
Gilles 'SO- smetti di essere malvagio' il

Sarebbe lo stesso se la posizione di destinazione è una cartella montata anziché una sshfsconnessione? Si prega di consultare: unix.stackexchange.com/q/544404/198423 @Gilles
Alper

4

Per rispondere alla tua domanda principale: sì, ci sono differenze. Con sshfsuna connessione esistente per consentire l'accesso ai file remoti su un canale sicuro e con rsync su ssh, quel canale sicuro è impostato per comunicare con un'istanza rsync remota .

Per rispondere alla tua domanda secondaria: rsync su ssh sarà più veloce per la maggior parte, se non per tutte le istanze, perché rsync sul sistema remoto fornisce più intelligenza nella ricerca di file che non necessitano di sincronizzazione, ma principalmente perché funziona in parallelo al tuo rsync locale per raccogliere tali informazioni.

La sicurezza di entrambi i modi è, assumendo la stessa configurazione dei parametri ssh (lunghezza della chiave, algoritmi) lo stesso. Quali sono le impostazioni predefinite per il sistema di origine e di destinazione, dipende dalle combinazioni di distribuzioni su tali sistemi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.