Saya membaca beberapa panduan bagaimana menggabungkan snapshot btrf dengan rsync untuk membuat solusi cadangan yang efisien dengan riwayat. Namun itu semua tergantung pada apakah rsync --inplace
memodifikasi hanya bagian-bagian dari file yang benar-benar berubah, atau jika itu menimpa seluruh file secara berurutan. Jika ia menulis seluruh file maka nampaknya btrfs akan selalu membuat salinan baru dari file tersebut, yang akan membuat idenya jauh lebih efisien.
21
rsync
membaca seluruh file dan kemudian mencari dan memperbarui hanya bagian-bagian yang diperlukan, btrfs hanya akan menyalin blok yang diperbarui ini. Tetapi jikarsync
membaca dan menulis seluruh file, maka itu akan menjadi masalah.rsync
tidak hanya tahu bahwa ia mungkin menghindari menulis seluruh file, ia berhasil melakukannya tanpa menyalinnya sepenuhnya melalui internet. Program kecil pintar.Jawaban:
Jika Anda melewatkan rsync dua lintasan lokal, itu akan menggunakan "--whole-file" secara default, dan bukan delta-transfer. Jadi, yang Anda cari adalah "--no-whole-file". Anda juga mendapatkan transfer delta jika Anda meminta '-c'.
Berikut cara Anda memverifikasi:
Kemudian sentuh file dan sinkronkan kembali
Anda dapat memverifikasinya menggunakan kembali inode dengan "ls -li", tetapi perhatikan itu mengirimkan 64K byte secara keseluruhan. Coba lagi dengan --no-whole-file
Sekarang Anda hanya mengirim 494 byte. Anda dapat menggunakan strace untuk memverifikasi lebih lanjut jika ada file yang ditulis, tetapi ini menunjukkan setidaknya menggunakan delta-transfer.
Catatan (lihat komentar) yang
--whole-file
diasumsikan untuk sistem file lokal (lihat halaman manual untuk rsync). Di sisi lain, di seluruh jaringan--no-whole-file
diasumsikan, jadi--inplace
dengan sendirinya akan berperilaku sebagai--inplace --no-whole-file
.sumber
--inplace
menyiratkan--no-whole-file
?--no-whole-file
default?--inplace
tidak menyiratkan--no-whole-file
untuk versi rsync yang saya gunakan pada tahun 2013, tetapi Anda dapat mengulangi percobaan ini dengan versi rsync Anda sendiri.inplace
ini bukan tentang ‚pemindaian untuk blok yang sama / berbeda ', ini hanya tentang menimpa file yang ada segera, dari offset 0. (selain itu salinan sementara dibangun, dan hanya kemudian file target lama dihapus dan salinan temporer diganti namanya) Mungkin dianggap "lebih aman" untuk menyimpan file lama selama mungkin, jika prosesnya terputus. Tentu saja ini lebih buruk untuk kinerja, konsumsi penyimpanan puncak (pikirkan file besar), mungkin fragmentasi ...) ...--no-whole-file
selalu menyiratkan--inplace
, jika tidak sebagian besar keuntungan kinerjanya akan hilang. Tidak dapat menemukan ini didokumentasikan, ...Di sini jawaban yang pasti saya kira, mengutip bagian yang benar dari manual:
sumber
--inplace
hanya menimpa wilayah yang telah berubah. Selalu gunakan itu saat menulis ke Btrfs.sumber
-vvv
menunjukkannya melewatkan blok yang cocokAlgoritma transfer delta rsync berkaitan dengan apakah seluruh file ditransmisikan atau hanya bagian-bagian yang berbeda. Ini adalah perilaku default ketika melakukan rsyncing file antara dua mesin untuk menghemat bandwidth. Ini dapat diganti dengan
--whole-file
(atau-W
) untuk memaksarsync
mengirimkan seluruh file.--inplace
berurusan dengan apakahrsync
, selama transfer, akan membuat file sementara atau tidak. Perilaku default adalah membuat file sementara. Ini memberikan ukuran keamanan bahwa jika transfer terputus, file yang ada di mesin tujuan tetap utuh / tidak tersentuh.--inplace
mengganti perilaku ini dan memberi tahursync
untuk memperbarui file yang ada secara langsung. Dengan ini, Anda berisiko memiliki file yang tidak konsisten di mesin tujuan jika transfer terputus.sumber
Dari halaman manual:
Ini membuat saya percaya bahwa itu menulis file secara keseluruhan - Saya membayangkan hampir mustahil bagi rsync untuk bekerja dengan cara lain.
sumber
Karya teoritis tentang rsync in-place dijelaskan dalam makalah ini .
Referensi kertas: D. Rasch dan R. Burns. In-Place Rsync: Sinkronisasi File untuk Perangkat Seluler dan Nirkabel. Konferensi Teknis Tahunan USENIX, jalur FREENIX, 91-100, USENIX, 2003.
Dari tautan:
Jadi ini tampaknya merupakan rincian teknis tentang apa yang dilakukan rsync --inplace. Menurut awal makalah:
Sebagaimana menjadi jelas dari jawaban @ dataless , ini menyiratkan bahwa
--inplace
menggunakan ruang penyimpanan yang sama, tetapi masih dapat menyalin seluruh file ke ruang itu. Khususnya, ketika salinan dibuat dari / ke sistem file lokal, rsync mengasumsikan--whole-file
opsi. Tetapi ketika itu melintasi sistem jaringan di sisi lain, itu mengasumsikan--no-whole-file
pilihan.sumber