cp atau rsync, apakah cp benar-benar layak?

8

Saya harap ini tidak dihitung sebagai pertanyaan tanpa jawaban nyata, karena saya tidak bisa menemukan alasan yang baik untuk menggunakan cp(1)lebih rsync(1)di hampir semua keadaan. Haruskah seseorang rsynclebih suka cp? Apakah ada pedoman yang baik untuk penggunaannya?

  • rsync: Mentransfer diff, dapat menggunakan kompresi, dapat digunakan dari jarak jauh (dan aman), dapat dimulai kembali meskipun ada gangguan, bahkan selama transfer file besar tunggal. '

  • cp: Mungkin itu hanya lebih mudah digunakan? Apakah lebih cepat dari rsync?

Soyuz
sumber
4
Kadang-kadang overhead membandingkan jauh lebih banyak upaya daripada hanya menyalin byte secara membabi buta.
bahamat
Pertanyaan yang sama dengan jawaban yang lebih baik: serverfault.com/questions/43014/…
Daniel

Jawaban:

9

cpadalah bagian dari coreutils, oleh karena itu hadir di mana-mana. Selain itu, ini terutama dirancang untuk menyalin file di dalam satu komputer.

rsyncbukan bagian dari coreutils, itu tidak ada bahkan di lingkungan default. Selain itu ia terutama dirancang untuk mentransfer file melalui jaringan. Juga rsyncmemiliki lebih banyak dependensi dibandingkan dengan coreutils, namun perbedaan ini tidak masuk akal.

PS: Omong-omong, penggunaan CPU masih penting pada sistem embedded.

buru-buru
sumber
6

Alasan utama Anda tidak ingin menggunakan rsyncuntuk setiap operasi penyalinan, adalah karena rsyncmenghitung biaya overhead. Sebelum transfer data benar-benar dimulai, rsyncpindai semua file. Kemudian sebelum setiap file, perbandingan dibuat. Overhead ini tidak signifikan, bahkan dengan CPU cepat tersedia pada tahun 2012. Saya melakukan transfer jenis ini sepanjang waktu, dan pada server berukuran cukup baik, setelah Anda mulai berurusan dengan pertunjukan data biaya overhead dapat memakan waktu.

Saya tidak mengatakan jangan gunakan rsync, tidak sama sekali, gunakan rsynckapan saja Anda dapat menghemat waktu transfer. Hanya saja, jangan gunakan rsynckapan cpbisa mencapai hal yang sama.

Apa yang biasanya saya lakukan, pertama-tama membawa data menggunakan metode salin biasa. Kemudian rsyncuntuk perubahan selanjutnya, saat itulah perbedaan tersebut dapat dimanfaatkan.

JM Becker
sumber
Apakah ini harga yang mahal untuk dibayar, mengingat betapa kuatnya prosesor kami saat ini?
Soyuz
3
Besar bersifat subjektif, dan akan berubah tergantung pada jumlah file vs ukuran data vs IO. Poin utama saya adalah, itu tidak signifikan terlepas dari prosesor hari ini. Satu hal yang perlu diingat prosesor hari ini, masih harus berurusan dengan data hari ini.
JM Becker
Sepakat. CPU tidak menjadi lebih cepat dalam ruang hampa. Salah satu alasan terbaik yang kami miliki untuk CPU GHz adalah jaringan gigabit: CPU yang lebih lambat tidak dapat mempertahankan pipa I / O yang besar penuh. Komputer cenderung seimbang seperti yang kita tahu cara membuatnya. Singkirkan daya CPU, dan sebagian kapasitas I / O tidak digunakan. Tingkatkan permintaan I / O, dan CPU lebih banyak berhenti, menunggu I / O.
Warren Young
3

Saya berharap cpuntuk menggunakan CPU lebih sedikit ketika menyalin secara lokal karena tidak menggunakan diffs sedangkan rsyncdapat mengurangi menulis ketika menggunakan diffs. Kompresi harus dihindari secara lokal karena Anda harus tetap membaca dan menulis seluruh file / diff dan itu memerlukan perhitungan tambahan.

scai
sumber
Jadi, semuanya bermuara pada biaya CPU atau biaya I / O
Soyuz
2
@soyuz, itu berlaku untuk data yang telah berubah, mengacu pada data lain. Semakin kecil diff, semakin rsyncdisukai. Tetapi ketika mereka tidak berbeda, rsynchanya membawa overhead tanpa manfaat tambahan.
JM Becker
@ TechZilla, saya pikir maksud Anda, ketika tidak ada kesamaan. Jika tidak ada perbedaan, rsync hanya akan berakhir lebih awal karena tidak ada yang disalin, membuatnya jauh lebih disukai.
Izkata
@Izkata: Setidaknya ada satu cara untuk rsyncmemiliki dua kali I / O overhead untuk dua file yang identik dibandingkan dengan blind cp: waktu modifikasi yang diubah. Anda harus memberi --size-onlyuntuk memperbaikinya. Satu-satunya cara lain yang bisa saya lihat di sekitar ini adalah untuk rsyncmengandalkan checksum sistem file, tetapi untuk sebagian besar filesystem mereka bukan prediktor statistik identitas yang sangat baik.
Warren Young
3

Terlepas dari overhead dalam kasus diff besar atau tidak ada, rsynctampaknya tidak memiliki yang setara cp --reflink=always, yang dapat menyimpan sejumlah besar data jika menyalin dalam sistem file yang mendukungnya (itu menciptakan salinan copy-on-write, jadi data yang sama antara yang asli dan salinan (yang, tentu saja, awalnya semuanya) disimpan hanya sekali). rsyncNamun, lebih baik memperbarui salinan KK, menggunakan --inplace.

Darael
sumber