Di Ubuntu, saya ingin menyalin file besar dari hard drive saya ke drive yang dapat dilepas oleh rsync
. Untuk beberapa alasan lain, operasi tidak dapat selesai dalam sekali jalan. Jadi saya mencoba mencari cara rsync
untuk melanjutkan menyalin file dari tempat terakhir kali.
Saya telah mencoba menggunakan opsi --partial
atau --inplace
, tetapi bersama-sama dengan --progress
, saya menemukan rsync
dengan --partial
atau --inplace
benar - benar dimulai dari awal, bukan dari apa yang tersisa terakhir kali. Berhenti secara manual rsync
lebih awal dan memeriksa ukuran file yang diterima juga mengkonfirmasi apa yang saya temukan.
Tetapi dengan --append
, rsync dimulai dari apa yang tersisa terakhir kali.
Saya bingung karena saya melihat di halaman manual --partial
, --inplace
dan --append
tampaknya berhubungan dengan melanjutkan menyalin dari apa yang tersisa terakhir kali. Apakah seseorang dapat menjelaskan perbedaannya? Mengapa tidak --partial
atau --inplace
bekerja untuk melanjutkan menyalin? Apakah benar bahwa untuk melanjutkan penyalinan, rsync
harus bekerja dengan --append
opsi?
Juga, jika sebagian file ditinggalkan oleh mv
atau cp
, bukan oleh rsync, apakah akan rsync --append
melanjutkan menyalin file dengan benar?
--append
merekrsync
percaya bahwa, jika dua sesuai file memiliki panjang yang berbeda, maka lebih pendek identik dengan bagian awal dari yang satu lagi. Jadi, ya, jika Anda mulai menyalin file besar dengancp
dan mengganggu proses salin, makarsync --append
hanya akan menyalin bagian file yang tersisa. ( Catatan: jikacp
terganggu oleh sistem crash, ada kemungkinan kecil bahwa isi file dan metadata tidak sinkron, yaitu file rusak. Dalam hal ini, berjalanrsync
sekali lagi tanpa--append
harus memperbaiki masalah.)--partial
tanpa--append
.--append
dan--append-verify
memiliki kasus kegagalan yang berbahaya: ketika file penerima berukuran sama atau lebih besar tetapi memiliki data yang berbeda. Saya menyarankan solusi yang berbasis di sekitar--no-whole-file
sebagai gantinya.Sadarilah itu
--append
menyiratkan--inplace
, yang dengan sendirinya menyiratkan--partial
.Dengan hanya menggunakan
--partial
Anda harusrsync
meninggalkan transfer parsial dan melanjutkannya dalam upaya berikutnya.Dengan menggunakan
--append
Anda harus menyebabkanrsync
kedua meninggalkan sebagian file dan melanjutkannya di lain waktu. Setelah transferrsync
harus memverifikasi checksum dari data yang dikirimkan saja.--append-verify
termasuk seluruh file dalam verifikasi checksum, termasuk setiap bagian yang ditransfer dalam transfer sebelumnya.Dengan salah satu
--append
atau--append-verify
gagal checksum verifikasi harus menyebabkan file akan dikirim kembali sepenuhnya (menggunakan--inplace
)Anda harus dapat melanjutkan
mv
ataucp
beroperasi denganrsync
tetapi Anda mungkin ingin menggunakan--append-verify
opsi untuk ketenangan pikiran.Perhatikan bahwa menggunakan
--append
penyebabrsync
untuk menyalin hanya file-file yang memiliki ukuran pada penerima lebih pendek daripada ukuran pada pengirim (terlepas dari stempel waktu), atau tidak ada pada penerima. Dengan dokumentasi opsi ini:Info lebih lanjut di halaman manual
sumber
--append
dan--append-verify
memiliki kasus kegagalan berbahaya: ketika file penerima berukuran sama atau lebih besar tetapi memiliki data yang berbeda. Saya menyarankan solusi yang berbasis di sekitar--no-whole-file
sebagai gantinya.--checksum
harus digunakan. Saya tidak dapat menemukannya ditentukan secara eksplisit, tetapi secara logis salah satu dari opsi yang dapat dilanjutkan harus menyiratkan--no-whole-file
karena--whole-file
harus tidak kompatibel.--append-verify
akan melewati file berukuran sama atau lebih besar dengan tanggal berbeda , yang mungkin "tidak terduga". Tidak perlu--checksum
semua file, karenarsync
akan melakukan checksum seluruh file, tetapi hanya pada apa yang ditransfer.--checksum
memberitahursync
checksum file sebelum mengirim yang memastikan bahwa semua file yang diubah ditransfer, terlepas dari ukuran / waktu. Sudahkah Anda mendapatkan sumber untuk--append-verify
perilaku tak terduga karena apa yang Anda gambarkan tidak cocok dengan dokumentasi atau pengalaman saya (terbatas)?--append-verify
mengacu pada--append
yang mengatakan:If a file needs to be transferred and its size on the receiver is the same or longer than the size on the sender, the file is skipped.
Bahkan jika suatu file perlu ditransfer karena--checksum
, masih dapat dilewati.David Schwartz benar,
--partial
(atau lebih baik,-P
) melakukan apa yang Anda inginkan. Saya memverifikasi ini pada file 37G yang dihentikan ~ 8g ke dalamnya, melalui jaringan. rsync dengan cepat memindai bagian-bagian pertama dari parsial (menunjukkan kemajuan seperti yang akan terjadi berkat-P
), dan kemudian melanjutkan transfer ke akhir file parsial.sumber
--whole-file
deskripsi opsi.--no-W
(yang sebenarnya berfungsi!)--no-W
kecuali Anda mengerti persis apa artinya pengaturan untuk file lokal. Lihat unix.stackexchange.com/a/181018/100397Anda melakukannya dengan benar,
--partial
melakukan apa yang Anda inginkan. Tampaknya mulai dari awal karena selalu dimulai pada awal daftar potongan data file yang perlu disalin. The--append
pilihan adalah berbahaya dan akan menghasilkan file korup jika data tidak cocok untuk beberapa alasan.sumber
--append
melanjutkan dari byte offset).Secara default,
rsync
akan memungkinkan--whole-file
jika mentransfer dari disk lokal ke disk lokal. Ini akan memulai kembali transfer yang terputus dari awal, daripada memeriksa bagian-bagian yang sudah ada.Untuk menonaktifkan ini, gunakan:
Menggabungkan ini dengan salah satu
--inplace
atau--partial
akan memungkinkan melanjutkan transfer nanti.Alias saya untuk digunakan
rsync
untuk menyalin adalah:Peringatan : hati-hati menggunakan
--append-verify
karena akan melewati file tujuan yang ukurannya sama atau lebih besar.sumber
rsync
membandingkan sumber dan file tujuan yang sesuai sebelum mentransfer untuk mengirim hanya bagian-bagian yang telah berubah (delta-transfer).--no-whole-file
memberitahursync
untuk melakukan hal yang sama untuk menyalin lokal ke lokal. Dokumentasi tidak menyarankan itu akan berdampak pada melanjutkan transfer parsial file tunggal.rsync
akan melewatkan file dengan ukuran dan stempel waktu yang sama persis dengan desain. Tidak--append-verify
juga--no-whole-file
seharusnya mengubah perilaku itu tetapi--checksum
harus bekerja dengan baik untuk ketenangan pikiran dengan biaya disk IO--append-verify
akan melewati file berukuran sama atau lebih besar dengan tanggal berbeda , yang mungkin "tidak terduga". Tidak perlu--checksum
semua file, karenarsync
akan melakukan checksum seluruh file, tetapi hanya pada apa yang ditransfer.