Apa perbedaan `scp` dari` rsync`?


241

Sebuah artikel tentang pengaturan blog Ghost mengatakan digunakan scpuntuk menyalin dari mesin lokal saya ke server jarak jauh:

scp -r ghost-0.3 root@*your-server-ip*:~/

Namun, Railscast 339: Dasar-Dasar Chef Solo digunakan scpuntuk menyalin ke arah yang berlawanan (dari server jarak jauh ke mesin lokal):

scp -r root@178.xxx.xxx.xxx:/var/chef .

Dalam Railscast yang sama, ketika penulis ingin menyalin file ke server jauh (arah yang sama seperti contoh pertama), ia menggunakan rsync:

rsync -r . root@178.xxx.xxx.xxx:/var/chef

Mengapa menggunakan rsyncperintah jika scpakan menyalin di kedua arah? Bagaimana scpberbeda dari rsync?


selain lebih sederhana dan selalu terenkripsi, tidak ada yang menunjukkan bahwa scp dapat melakukan lebih baik daripada "rsync -aA". saya lebih suka "rsync -aAX --delete sumber dest". checkout bsync untuk sinkronisasi dua arah.
Tomachi

Jawaban:


345

Perbedaan utama antara alat-alat ini adalah bagaimana mereka menyalin file.

scppada dasarnya membaca file sumber dan menulisnya ke tujuan. Ia melakukan salinan linear biasa, secara lokal, atau melalui jaringan.

rsyncjuga menyalin file secara lokal atau melalui jaringan. Tetapi menggunakan algoritma transfer delta khusus dan beberapa optimasi untuk membuat operasi jauh lebih cepat. Pertimbangkan panggilannya.

rsync A host:B
  • rsyncakan memeriksa ukuran file dan stempel waktu modifikasi A dan B , dan melewati pemrosesan lebih lanjut jika cocok.

  • Jika file tujuan B sudah ada, algoritma transfer delta akan memastikan hanya perbedaan antara A dan B yang dikirim melalui kabel.

  • rsyncakan menulis data ke file sementara T , dan kemudian mengganti file tujuan B dengan T untuk membuat update tampilan "atom" untuk proses yang mungkin menggunakan B .

Perbedaan lain di antara mereka menyangkut doa. rsyncmemiliki sejumlah opsi baris perintah, yang memungkinkan pengguna menyesuaikan perilakunya. Ini mendukung aturan filter yang kompleks, berjalan dalam mode batch, mode daemon, dll. Hanya scpmemiliki beberapa switch.

Singkatnya, gunakan scpuntuk tugas sehari-hari Anda. Perintah yang Anda ketik sesekali pada shell interaktif Anda. Ini lebih mudah digunakan, dan dalam kasus itu rsyncoptimasi tidak akan banyak membantu.

Untuk tugas berulang, seperti cronpekerjaan, gunakan rsync. Seperti yang disebutkan, pada banyak pemanggilan akan mengambil keuntungan dari data yang sudah ditransfer, berkinerja sangat cepat dan menghemat sumber daya. Ini adalah alat yang sangat baik untuk menjaga dua direktori disinkronkan melalui jaringan.

Juga, ketika berhadapan dengan file besar, gunakan rsyncdengan -Popsi. Jika transfer terputus, Anda dapat melanjutkannya di tempat terhenti dengan menerbitkan kembali perintah. Lihat jawaban Sid Kshatriya .


14
Anda mengatakan untuk menggunakan scp untuk tugas sehari-hari Anda. Dari penjelasan Anda dan OP, tampak bahwa antarmuka untuk dua alat ketika digunakan tanpa opsi identik. Jika rsync memiliki implementasi yang unggul dan antarmuka yang sama, mengapa tidak selalu menggunakan rsync?
Alex

5
Antarmuka mereka tidak sama, bahkan tanpa opsi. Rsync memiliki interpretasi khusus tentang garis miring pada argumen sumber (menyinkronkan direktori itu sendiri dengan isinya). Mungkin punya gotcha lain, saya tidak yakin.
Rafa

2
Juga, saya kira scpkemungkinan besar akan tersedia pada sistem seperti Unix, sehingga Anda mencegah "perintah tidak ditemukan" yang mengganggu sekarang dan kemudian.
Rafa

2
@ erikb85 rsync memiliki flag -P yang akan menampilkan progress bar dan memungkinkan melanjutkan dari transfer yang diselesaikan sebagian. digitalocean.com/community/tutorials/…
Ben

1
Perbedaan antarmuka lain antara scpdan rsync: rsync -adibandingkan scp -rpuntuk mempertahankan waktu modifikasi dan izin.
Rafa

71

rysnc dapat berguna untuk berjalan pada koneksi yang lambat dan tidak dapat diandalkan. Jadi, jika unduhan Anda batal di tengah file besar rysnc akan dapat melanjutkan dari tempat sebelumnya ketika dipanggil lagi.

Menggunakan rsync -vP username@host:/path/to/file .

Opsi -P menyimpan file yang diunduh sebagian dan juga menunjukkan kemajuan.

Seperti biasa cek man rsync


32

Perbedaan b / w scp dan rsync pada parameter yang berbeda

1. Kinerja melebihi latensi

  • scp : scp relatif kurang mengoptimalkan dan kecepatan

  • rsync : rsync relatif lebih mengoptimalkan dan kecepatan

https://www.disk91.com/2014/technology/networks/compare-performance-of-different-file-transfer-protocol-over-latency/

2. Penanganan gangguan

  • scp : alat baris perintah scp tidak dapat melanjutkan unduhan yang dibatalkan dari koneksi jaringan yang hilang

  • rsync: Jika sesi rsync di atas itu sendiri terputus, Anda dapat melanjutkannya sebanyak yang Anda inginkan dengan mengetikkan perintah yang sama. rsync akan secara otomatis memulai kembali transfer di tempat yang ditinggalkannya.

http://ask.xmodulo.com/resume-large-scp-file-transfer-linux.html

3. Contoh Perintah

scp

$ scp source_file_path destination_file_path

rsync

$ cd /path/to/directory/of/partially_downloaded_file
$ rsync -P --rsh=ssh userid@remotehost.com:bigdata.tgz ./bigdata.tgz 

The -Ppilihan adalah sama dengan --partial --progress, memungkinkan rsync untuk bekerja dengan file sebagian download. The --rsh=sshpilihan memberitahu rsync untuk penggunaan ssh sebagai remote shell.

4. Keamanan:

scp lebih aman. Anda harus menggunakannya rsync --rsh=sshuntuk membuatnya seaman scp.

dokumen manual untuk mengetahui lebih lanjut:

bagan kinerja


Terima kasih atas jawaban baru ini, terutama untuk bagian keamanan.
zhihong

pada banyak sistem ssh digunakan secara default. serverfault.com/questions/378939/do-you-need-e-ssh-for-rsync
qwr

2
Tentang Keamanan, dari catatan rilis openSSH 8.0 : The scp protocol is outdated, inflexible and not readily fixed. We recommend the use of more modern protocols like sftp and rsync for file transfer instead.
downtheroad

6

Salah satu fitur utama rsyncover scp(di samping algoritma delta dan enkripsi jika digunakan w / ssh) adalah secara otomatis memverifikasi apakah file yang ditransfer telah ditransfer dengan benar. Scp tidak akan melakukan itu, yang kadang-kadang dapat menyebabkan korupsi ketika mentransfer file yang lebih besar. Jadi secara umum rsync adalah salinan dengan jaminan .

Centos manpages menyebutkan ini sebagai akhir dari --checksumdeskripsi opsi:

Perhatikan bahwa rsync selalu memverifikasi bahwa setiap file yang ditransfer direkonstruksi dengan benar di sisi penerima dengan memeriksa checksum seluruh file yang dihasilkan saat file ditransfer, tetapi verifikasi setelah transfer otomatis tidak ada hubungannya dengan opsi ini sebelum- the-transfer "Apakah file ini perlu diperbarui?" memeriksa.


5

Ada perbedaan bagi saya yang scpselalu dienkripsi dengan ssh (secure shell), sementara rsynctidak harus dienkripsi. Lebih khusus lagi, rsynctidak melakukan enkripsi apa pun dengan sendirinya; masih mampu menggunakan mekanisme lain (ssh misalnya) untuk melakukan enkripsi.

Selain keamanan, enkripsi juga memiliki dampak besar pada kecepatan transfer Anda, serta overhead CPU. (Pengalaman saya adalah bahwa rsyncsecara signifikan bisa lebih cepat daripada scp.)

Lihat pos ini untuk mengetahui kapan rsyncenkripsi diaktifkan.


1

scp terbaik untuk satu file.
ATAU kombinasi tar& kompresi untuk set data yang lebih kecil seperti pohon kode sumber dengan sumber daya kecil ( yaitu : gambar, sqlite dll ).


Namun , ketika Anda mulai berurusan dengan volume yang lebih besar katakan:

  • folder media (40 GB)
  • backup basis data (28 GB)
  • perpustakaan mp3 (100 GB)

Menjadi tidak praktis untuk membangun file zip / tar.gz untuk ditransfer dengan scp pada saat ini lakukan pada batas fisik server yang di-host.

Sebagai latihan, Anda dapat melakukan beberapa senam seperti pipa tarke dalam sshdan mengarahkan hasil menjadi jauh berkas. (menyimpan kebutuhan untuk membangun swap atau klon sementara alias zip atau tar.gz)

Namun ,

rsync menyederhanakan proses ini dan memungkinkan Anda untuk mentransfer data tanpa menggunakan ruang disk tambahan.

Juga ,

Pembaruan berkelanjutan (cron?) Menggunakan perubahan minimal vs salinan kloning penuh mempercepat migrasi data besar dari waktu ke waktu.

tl; dr
scp == skala kecil (dengan ruang untuk membuat file terkompresi pada drive yang sama)
rsync== skala besar (dengan kebutuhan untuk membuat cadangan data besar dan tidak ada ruang tersisa)


-1

lebih baik berpikir dalam konteks praktis. Di tim kami, kami gunakan rsync -aPuntuk mengganti host cassandra yang buruk di cluster kami. Kami tidak dapat melakukan ini dengan scp (lambat dan tidak ada kemajuan pelestarian).


Tidak benar-benar membawa apa pun yang belum disebutkan dalam jawaban lain. Ditambah lagi, kita seharusnya tidak menjawab pertanyaan di luar topik.
Dan Cornilescu

1
@DanCornilescu ini menggambarkan use case dalam skenario nyata, yang memudahkan orang lain untuk memahami perbedaannya. Saya tidak melihat jawaban serupa lainnya
del bao

2
Lihat -P dijelaskan dan kelambatan / catatan terkait kecepatan dalam jawaban Sid dan Rafa.
Dan Cornilescu
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.