Perbedaan antara rsync pada remote dan rsync lokal pada sshfs yang terpasang?

12

Apakah ada perbedaan jika saya menjalankan rsync dengan remote host (ssh: //) sebagai sumber / tujuan atau menggunakan jalur lokal untuk berbagi direktori yang dipasang melalui sshfs?

Mungkinkah ada perbedaan berkaitan dengan keamanan atau kecepatan penyalinan tanpa penggunaan sakelar, cukup gunakan mode arsip rsync dan path host jarak jauh (ssh). Sama dengan sshfs mount hanya dengan sumber dan tujuan (tidak ada perubahan sandi, hanya default).

galq
sumber

Jawaban:

17

SSHFS nyaman, tetapi tidak cocok dengan rsync atau lebih umum dengan alat sinkronisasi.

Masalah terbesar adalah bahwa SSHFS sebagian besar membunuh optimasi kinerja rsync. Khususnya, untuk file menengah ke besar, ketika rsync melihat bahwa file telah dimodifikasi, ia menghitung checksum pada bagian-bagian file di setiap sisi untuk mentransfer hanya bagian-bagian yang telah dimodifikasi. Ini adalah optimasi hanya jika bandwidth jaringan secara signifikan lebih kecil dari bandwidth disk, yang biasanya terjadi. Tetapi dengan SSHFS, bandwidth "disk" sebenarnya adalah bandwidth jaringan, jadi rsync harus membaca seluruh file untuk menentukan apa yang akan disalin. Bahkan, dengan salinan lokal (yang terkait dengan rsync, bahkan jika salah satu sisi menggunakan SSHFS), rsync hanya menyalin seluruh file.

SSHFS juga merusak kinerja jika ada banyak file kecil. Rsync perlu memeriksa setidaknya metadata setiap file untuk menentukan apakah sudah dimodifikasi. Dengan SSHFS, ini membutuhkan perjalanan pulang-pergi jaringan untuk setiap file. Dengan rsync atas SSH, kedua belah pihak dapat bekerja secara paralel dan mentransfer informasi secara massal, yang jauh lebih cepat.

Dalam hal pembatasan akses, SSHFS memerlukan akses SFTP, sedangkan rsync membutuhkan kemampuan untuk menjalankan kode (khususnya, program rsync) melalui shell. Jika pengguna tidak memiliki akun shell, Adalah mungkin dan umum untuk memberikan akun dengan shell khusus yang hanya memungkinkan menjalankan beberapa program termasuk sftp-serverdan rsync. Lihat Apakah Anda membutuhkan shell untuk SCP?

Jika Anda hanya menyalin file baru dan tidak ada jumlah file yang sangat besar, tidak ada perbedaan kinerja yang berarti.

SSHFS membuat koneksi SSH ketika sistem file di-mount dan mempertahankan koneksi itu sampai tidak di-mount. Rsync membuat koneksi baru setiap kali Anda menjalankannya, tetapi Anda dapat menggunakan fitur multiplexing dan piggyback pada satu koneksi utama untuk menghindari otentikasi setiap kali.

SSHFS adalah sistem file FUSE dan karenanya hanya mendukung metadata Unix tradisional dan ACL. Rsync dapat mentransfer atribut yang diperluas (Anda harus menggunakan rsync -aAX, perhatikan bahwa dataran -ahanya mempertahankan metadata Unix tradisional).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Misalnya saya punya satu file terkompresi di direktori SSHFS yang terpasang dan file itu disalin ke direktori lokal saya. Kemudian file itu diperbarui pada direktori yang di-mount dan saya ingin menyalin hanya bagian yang diperbarui ke direktori lokal saya menggunakan rsync --no-whole-file /mounted/file.tar.gz /home/local/file.tar.gz. Ketika saya gunakan rsyncuntuk operasi ini, selama perhitungan checksum untuk mentransfer hanya bagian-bagian yang telah dimodifikasi, apakah rsyncharus membaca seluruh file, yang akan menyebabkan data lengkap untuk diunduh alih-alih hanya bagian yang diperbarui? @Gilles
alper
1
@alper Ketika Anda menggunakan rsync di atas sshfs, rsync harus membaca seluruh file. Tidak dapat mengetahui apa yang perlu diperbarui jika tidak. Tidak ada cara untuk mengoptimalkan dengan mentransfer hanya checksum karena tidak ada cara untuk menghitung checksum di server.
Gilles 'SO- stop being evil'
Apakah akan sama jika lokasi target adalah folder yang dipasang daripada sshfskoneksi? Silakan lihat: unix.stackexchange.com/q/544404/198423 @Gilles
alper
4

Untuk menjawab pertanyaan utama Anda: ya ada perbedaan. Dengan sshfsada koneksi yang ada untuk memungkinkan akses ke file jarak jauh melalui saluran aman dan dengan rsync di atas ssh, saluran aman itu diatur untuk berbicara dengan instance rsync jarak jauh .

Untuk menjawab pertanyaan sekunder Anda: rsync atas ssh akan lebih cepat untuk sebagian besar, jika tidak semua contoh, karena rsync pada sistem jarak jauh memberikan lebih banyak kecerdasan dalam menemukan file yang tidak perlu disinkronkan, tetapi terutama karena itu berjalan secara paralel dengan Anda rsync lokal untuk mengumpulkan informasi itu.

Keamanan kedua cara ini, dengan asumsi konfigurasi yang sama dari parameter ssh (panjang kunci, algoritma) sama. Apa standarnya untuk sistem sumber dan tujuan Anda, tergantung pada kombinasi distribusi pada sistem tersebut.

Anthon
sumber