Bagaimana cara mencadangkan satu file besar dengan perubahan kecil?


9

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.


Binary diff? Saya pikir itu hal tetapi saya tidak berpikir diffakan melakukannya
kucing

@ kucing: diffmungkin dapat melaporkan perbedaan, tetapi di sini masalahnya adalah menyalin perbedaan kecil.
Quora Feans

Nah, saya berpikir hanya menyalin diffs - rsynclebih baik
cat

Jawaban:


25

Program rsync melakukan hal itu. Dari halaman manual:

Ia terkenal dengan algoritma delta-transfer-nya, yang mengurangi jumlah data yang dikirim melalui jaringan dengan hanya mengirim perbedaan antara file sumber dan file yang ada di tujuan. Rsync banyak digunakan untuk backup dan mirroring dan sebagai perintah penyalinan yang ditingkatkan untuk penggunaan sehari-hari.


Bahkan, rsync sebenarnya berjalan saat menulis jawaban ini, mencadangkan semua yang ada di mesin ini ke server file saya (dengan zfs).
hlovdal

Untuk keperluan pencadangan, saya ingin merekomendasikan rdiff-backup ( nongnu.org/rdiff-backup ). Saya menggunakannya untuk mencadangkan empat mesin yang berbeda, selama beberapa tahun sekarang, dengan hasil yang baik.
Thomas Padron-McCarthy

Wikipedia memiliki penjelasan yang bagus tentang bagaimana rsyncmembandingkan potongan file menggunakan checksum bergulir.
Adam Katz

Saya mencoba rsync untuk "mengembalikan" kembali ke gambar hard disk VM lama di mana hanya beberapa file di dalamnya telah diubah, sayangnya rsync tampaknya menyalin seluruh file lagi (mengambil ~ 3 menit menulis ~ 300MB / s)? rsync -av --progress --partial --inplace arch-test1.qcow2.bak arch-test1.qcow2
feedc0de

8

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.


5

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 rsyncharus dilakukan.

Penggunaannya rsyncakan lambat dan sangat intensif IO.

Karena jika aplikasi apa pun yang menulis perubahan pada file dengan cara apa pun terbatas IO, menggunakan rsyncakan mengambil siklus IO yang signifikan jauh dari aplikasi itulah alasan mengapa file itu ada. Dan jika proses atau sistem cadangan Anda terbatas pada IO, rsyncakan 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


Ini memiliki manfaat tambahan untuk mempertahankan semua metadata tanpa harus memeriksanya, dan selalu mengetahui bahwa salinan cadangan Anda sama baiknya dengan salinan asli. rsync tidak masalah untuk penggunaan umum, tetapi jika Anda memiliki sistem file modern, bodoh jika mengabaikan kelebihannya.
user121391
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.