Anda mungkin harus melihat alat terkait rsync:rdiff dan rdiff-backup .rdiff
perintah memungkinkan Anda menghasilkan file tambalan dan menerapkannya ke beberapa file lain.
rdiff-backup
perintah menggunakan pendekatan ini untuk menangani seluruh direktori, tetapi saya menduga Anda sedang bekerja dengan gambar disk file tunggal, jadi rdiff
yang akan digunakan.
xdelta dapat melakukan semua yang Anda inginkan. Peringatan yang adil, jika gambar Anda sangat serupa, Anda bisa mendapatkan tambalan yang sangat besar, karena xdelta menggunakan setengah dari buffer memori yang ditentukan untuk menemukan perbedaan. Informasi lebih lanjut tersedia di halaman wiki TuningMemoryBudget. Meningkatkan ukuran buffer dapat sedikit membantu.
bsdiff adalah opsi lain, tetapi sangat RAM lapar dan sama sekali tidak pantas untuk ukuran gambar disk apa pun.
bsdiff cukup haus memori. Ini membutuhkan
max(17*n,9*n+m)+O(1)
byte memori, di manan
adalah ukuran file lama danm
adalah ukuran file baru. bpatch membutuhkann+m+O(1)
byte.
Jawaban Kanonis
Mengenai rdiff posting, librsync 2.0.1 adalah bacaan yang bagus untuk klarifikasi fungsionalitas perintah, jadi saya telah merujuknya di bawah untuk menyimpan konten ke jawaban ini jika tidak ada yang lain.
Penting untuk mencoba mendapatkan pemahaman yang baik tentang tiga langkah rdiff untuk memperbarui file:tanda tangan , delta , dan tambalan seperti yang dibicarakan di halaman manual rdiff. Saya juga menemukan rdiff
perintah contoh skrip di GitHub yang berguna yang akan saya rujuk dan kutip.
Pada dasarnya...
- Dengan file "awal" atau file dasar [
file1
] dan Anda membuat file tanda tangan dari itu
- Ini biasanya jauh lebih kecil daripada file dasar/asli itu sendiri
- Dengan file tanda tangan Anda membandingkannya dengan file lain [
file2
] mirip dengan file dasar Anda tetapi berbeda (mis. baru-baru ini diperbarui ) dan buat file delta hanya berisi perbedaan antara dua file- Gunakan "hanya perbedaan" atau file delta dan bandingkan dengan file dasar Anda [
file1
] untuk menghasilkan file baru yang berisi perubahan dari file lain [file2
] cocok dengan keduanya.
Perintah Cepat (per rdiff-example.sh
)
rdiff signature file1 signature-file ## signature base file1
rdiff delta signature-file file2 delta-file ## delta differences file2
rdiff patch file1 delta-file gen-file ## compare delta to file1 to create matching file2
contoh-rdiff.sh
# $ rdiff --help # Usage: rdiff [OPTIONS] signature [BASIS [SIGNATURE]] # [OPTIONS] delta SIGNATURE [NEWFILE [DELTA]] # [OPTIONS] patch BASIS [DELTA [NEWFILE]] # Options: # -v, --verbose Trace internal processing # -V, --version Show program version # -?, --help Show this help message # -s, --statistics Show performance statistics # Delta-encoding options: # -b, --block-size=BYTES Signature block size # -S, --sum-size=BYTES Set signature strength # --paranoia Verify all rolling checksums # IO options: # -I, --input-size=BYTES Input buffer size # -O, --output-size=BYTES Output buffer size # create signature for old file rdiff signature old-file signature-file # create delta using signature file and new file rdiff delta signature-file new-file delta-file # generate new file using old file and delta rdiff patch old-file delta-file gen-file # test diff -s gen-file new-file # Files gen-file and new-file are identical
Pengantar
rdiff adalah program untuk menghitung dan menerapkan delta jaringan. Sebuah delta rdiff adalah delta antara file biner, yang menjelaskan bagaimana file basis (atau lama) dapat diedit secara otomatis untuk menghasilkan file hasil (atau baru).
Tidak seperti kebanyakan program diff, librsync tidak memerlukan akses ke kedua file saat diff dihitung. Menghitung delta hanya membutuhkan "tanda tangan" singkat dari file lama dan isi lengkap dari file baru. Tanda tangan berisi checksum untuk blok file lama. Dengan menggunakan checksum ini, rdiff menemukan blok yang cocok di file baru, lalu menghitung delta.
delta rdiff biasanya kurang kompak dan juga lebih lambat untuk menghasilkan daripada xdelta atau diff teks biasa. Jika dimungkinkan untuk menampilkan file lama dan baru saat menghitung delta, xdelta umumnya akan menghasilkan file yang jauh lebih kecil. Jika file yang dibandingkan adalah teks biasa, maka diff GNU biasanya merupakan pilihan yang lebih baik, karena diff dapat dilihat oleh manusia dan diterapkan sebagai pencocokan yang tidak tepat.
rdiff muncul dengan sendirinya ketika tidak nyaman untuk memiliki kedua file sekaligus. Salah satu contohnya adalah kedua file berada di mesin terpisah, dan Anda hanya ingin mentransfer perbedaannya. Contoh lain adalah ketika salah satu file telah dipindahkan ke arsip atau media cadangan, hanya menyisakan tanda tangannya.
Secara simbolis
signature(basis-file) -> sig-file delta(sig-file, new-file) -> delta-file patch(basis-file, delta-file) -> recreated-file
Gunakan pola
Aplikasi khas dari algoritma rsync adalah untuk mentransfer file A2 dari mesin A ke mesin B yang memiliki file serupa A1. Hal ini dapat dilakukan sebagai berikut:
- B menghasilkan tanda tangan rdiff dari A1. Sebut ini S1. B mengirimkan tanda tangan ke A. (Tanda tangan biasanya jauh lebih kecil daripada file yang dideskripsikan.)
- A menghitung delta rdiff antara S1 dan A2. Panggil delta ini D. A mengirim delta ke B.
- B menerapkan delta untuk membuat ulang A2. Jika A1 dan A2 berisi byte identik, rdiff akan memberikan penghematan ruang yang signifikan.
sumber