Jika satu set file (masing-masing beberapa GB besar) dan masing-masing sedikit berubah setiap hari (di tempat acak, tidak hanya informasi ditambahkan di akhir), bagaimana bisa disalin secara efisien? Maksud saya, dalam arti bahwa hanya bagian yang diubah yang diperbarui, dan bukan keseluruhan file. Itu berarti perbedaan antara menyalin beberapa Kb di sana-sini atau beberapa GB.
9
diff
akan melakukannyadiff
mungkin dapat melaporkan perbedaan, tetapi di sini masalahnya adalah menyalin perbedaan kecil.rsync
lebih baikJawaban:
Program rsync melakukan hal itu. Dari halaman manual:
sumber
rsync
membandingkan potongan file menggunakan checksum bergulir.rsync -av --progress --partial --inplace arch-test1.qcow2.bak arch-test1.qcow2
Anda mungkin menginginkan program cadangan deduplicating modern. Lihatlah BorgBackup .
Ini akan membuat banyak cadangan dari setiap versi file besar Anda, tetapi akan membagikan konten umum antara versi yang berbeda, sehingga total ruang yang digunakan untuk versi tertentu file besar Anda hanya akan sedikit lebih banyak daripada total ruang disk untuk satu file versi, dengan asumsi bahwa versi yang berbeda hanya berbeda sedikit.
sumber
Jika Anda dibatasi IO dengan cara apa pun, gunakan sistem file seperti BTRFS atau ZFS yang secara langsung mendukung cadangan tambahan tanpa harus menemukan perbedaan dalam file, seperti apa yang
rsync
harus dilakukan.Penggunaannya
rsync
akan lambat dan sangat intensif IO.Karena jika aplikasi apa pun yang menulis perubahan pada file dengan cara apa pun terbatas IO, menggunakan
rsync
akan mengambil siklus IO yang signifikan jauh dari aplikasi itulah alasan mengapa file itu ada. Dan jika proses atau sistem cadangan Anda terbatas pada IO,rsync
akan membuat siklus IO menjauh dari bandwidth cadangan yang tersedia.Hanya Google "rsync lambat". Sebagai contoh: rsync sangat lambat (faktor 8 hingga 10) dibandingkan dengan cp pada menyalin file dari nfs-share ke dir lokal
sumber