Pertanyaan Mengapa rsync menyalin file setelah menyalin file secara manual?


Saya menyalin banyak file di banyak folder (~ 54GB) dari lokasi ext4 ke yang lain dengan cp ~/1 ~/2 -d -r -v -i di bash. Saya kemudian ingin memeriksa bahwa semua file disalin dengan benar, jadi saya berlari rsync --delete -vturOn ~/1 ~/2, tetapi rsync ingin menyalin semua file. Kenapa ini?

PS: Saya bermaksud untuk menggunakan cp dengan -a, tetapi digunakan -d dalam kesalahan.

Edit: Jawaban sini membuat saya menggunakan --itemize-changes bendera yang menunjukkan saya >f..t...... untuk semua file. Halaman manual menunjukkan bahwa t berarti waktu modifikasi berbeda, jenis-file adalah file (f) dan atribut item hanya sedang dimodifikasi (.). Apakah ini benar? Jadi semua yang akan diubah adalah waktu modifikasi?

Edit: Saya menjalankan rsync (tanpa -n) dan meskipun demikian t modifikasi kali menjadi berbeda, ia melanjutkan untuk menyalin semua file lagi (konten file yang sebenarnya), yang tidak terduga karena rsync harus melakukan salinan diff, yang harus diperhatikan?

Edit: Menghentikan sinkronisasi dan memutar ulang tanpa -t parameter. Sekarang perubahan yang diperinci menunjukkan 'T' sebagai ganti t. Sepertinya saya harus menyalin semua file melalui rsync setidaknya sekali jika saya ingin menggunakan rsync pada file-file ini di masa mendatang.

Edit: Saya menghapus file target dan menyalin semuanya lagi dengan rsync -van parameter.


3
2018-04-29 17:33


asal


Apakah Anda menemukan opsi yang tepat untuk cp sehingga rsync tidak akan disalin lagi? - haridsv
Tidak ... Saya tidak bereksperimen lebih jauh. - SabreWolfy


Jawaban:


Dari dokumentasi rsync:

Rsync menemukan file yang perlu ditransfer menggunakan algoritma "pemeriksaan cepat" (secara default) yang mencari file yang telah diubah ukurannya atau dalam waktu yang terakhir kali diubah.

Juga, ketika sumber dan target adalah lokal, rsync berjalan dengan --whole-file opsi secara default.

-W, --whole-file

Dengan opsi ini, algoritme transfer delta rsync tidak digunakan dan seluruh file dikirim sebagai apa adanya. Transfer mungkin lebih cepat jika opsi ini digunakan ketika bandwidth antara mesin sumber dan tujuan lebih tinggi dari bandwidth ke disk (terutama ketika "disk" sebenarnya adalah filesystem jaringan). Ini adalah default ketika sumber dan tujuan ditetapkan sebagai jalur lokal, tetapi hanya jika tidak ada opsi penulisan batch yang berlaku.

Saya tidak yakin, tetapi sepertinya Anda mungkin menginginkan --checksum pilihan.

-c, --checksum              skip based on checksum, not mod-time & size

Perhatikan bahwa ini membutuhkan membaca sumber dan file target dari disk untuk menghitung checksum.

Lebih lanjut tentang ini:

https://superuser.com/a/118984/219809

https://serverfault.com/a/279346


3
2018-05-29 14:20