Beberapa program penyalinan file menyukai rsync
dan curl
memiliki kemampuan untuk melanjutkan kembali transfer / salinan yang gagal.
Memperhatikan bahwa mungkin ada banyak penyebab kegagalan ini, dalam beberapa kasus program dapat melakukan "pembersihan" beberapa kasus program tidak bisa.
Ketika program-program ini dilanjutkan, mereka tampaknya hanya menghitung ukuran file / data yang berhasil ditransfer dan baru mulai membaca byte berikutnya dari sumber dan menambahkan ke fragmen file.
mis. ukuran fragmen file yang "membuatnya" ke tujuan adalah 1378 byte, jadi mereka baru mulai membaca dari byte 1379 pada dokumen asli dan menambahkannya ke fragmen.
Pertanyaan saya adalah, mengetahui bahwa byte terdiri dari bit dan tidak semua file memiliki segmentasi data dalam potongan-potongan berukuran byte bersih, bagaimana program-program ini tahu bahwa titik yang mereka pilih untuk mulai menambahkan data adalah benar?
Saat menulis file tujuan adalah semacam buffering atau "transaksi" mirip dengan database SQL yang terjadi, baik di tingkat program, kernel atau sistem file untuk memastikan bahwa hanya byte bersih yang terbentuk dengan baik yang membuatnya ke perangkat blok yang mendasarinya?
Atau apakah program menganggap byte terbaru akan berpotensi tidak lengkap, sehingga mereka menghapusnya dengan asumsi itu buruk, menyalin ulang byte dan mulai menambahkannya dari sana?
mengetahui bahwa tidak semua data direpresentasikan sebagai byte, tebakan ini tampaknya salah.
Ketika program-program ini "melanjutkan" bagaimana mereka tahu mereka mulai di tempat yang tepat?
head -c 20480 /dev/zero | strace -e write tee foo >/dev/null
dan kemudian OS akan buffer mereka dan mengirimkannya ke disk dalam potongan yang lebih besar.
fwrite()
?