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 rsync
lebih 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?
Jawaban:
cp
adalah bagian dari coreutils, oleh karena itu hadir di mana-mana. Selain itu, ini terutama dirancang untuk menyalin file di dalam satu komputer.rsync
bukan bagian dari coreutils, itu tidak ada bahkan di lingkungan default. Selain itu ia terutama dirancang untuk mentransfer file melalui jaringan. Jugarsync
memiliki lebih banyak dependensi dibandingkan dengan coreutils, namun perbedaan ini tidak masuk akal.PS: Omong-omong, penggunaan CPU masih penting pada sistem embedded.
sumber
Alasan utama Anda tidak ingin menggunakan
rsync
untuk setiap operasi penyalinan, adalah karenarsync
menghitung biaya overhead. Sebelum transfer data benar-benar dimulai,rsync
pindai 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, gunakanrsync
kapan saja Anda dapat menghemat waktu transfer. Hanya saja, jangan gunakanrsync
kapancp
bisa mencapai hal yang sama.Apa yang biasanya saya lakukan, pertama-tama membawa data menggunakan metode salin biasa. Kemudian
rsync
untuk perubahan selanjutnya, saat itulah perbedaan tersebut dapat dimanfaatkan.sumber
Saya berharap
cp
untuk menggunakan CPU lebih sedikit ketika menyalin secara lokal karena tidak menggunakan diffs sedangkanrsync
dapat 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.sumber
rsync
disukai. Tetapi ketika mereka tidak berbeda,rsync
hanya membawa overhead tanpa manfaat tambahan.rsync
memiliki dua kali I / O overhead untuk dua file yang identik dibandingkan dengan blindcp
: waktu modifikasi yang diubah. Anda harus memberi--size-only
untuk memperbaikinya. Satu-satunya cara lain yang bisa saya lihat di sekitar ini adalah untukrsync
mengandalkan checksum sistem file, tetapi untuk sebagian besar filesystem mereka bukan prediktor statistik identitas yang sangat baik.Terlepas dari overhead dalam kasus diff besar atau tidak ada,
rsync
tampaknya tidak memiliki yang setaracp --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).rsync
Namun, lebih baik memperbarui salinan KK, menggunakan--inplace
.sumber