কিছু ফাইল অনুলিপি প্রোগ্রামগুলির মতো rsync
এবং curl
ব্যর্থ স্থানান্তর / অনুলিপি পুনরায় চালু করার ক্ষমতা রাখে।
এই ব্যর্থতার অনেকগুলি কারণ থাকতে পারে তা উল্লেখ করে, কিছু ক্ষেত্রে প্রোগ্রাম "ক্লিনআপ" করতে পারে কিছু ক্ষেত্রে প্রোগ্রামটি পারে না।
যখন এই প্রোগ্রামগুলি আবার শুরু হয়, তারা মনে হয় কেবলমাত্র ফাইল / ডেটার আকারটি সফলভাবে স্থানান্তরিত হয়েছিল এবং উত্স থেকে পরবর্তী বাইটটি পড়া এবং ফাইল খণ্ডে যুক্ত করা শুরু করে।
উদাহরণস্বরূপ গন্তব্যে ফাইল তৈরির আকারটি এটি তৈরি করেছে 1378 বাইট, সুতরাং তারা কেবল আসলটি বাইট 1379 থেকে পড়া শুরু করতে এবং খণ্ডে যুক্ত করতে শুরু করে।
আমার প্রশ্নটি হ'ল বাইটস বিট দিয়ে গঠিত এবং সমস্ত ফাইলের ডেটাগুলি ক্লিন বাইট সাইজের অংশগুলিতে বিভক্ত থাকে না, এই প্রোগ্রামগুলি কীভাবে জানবে যে তারা সঠিকভাবে ডেটা যুক্ত করা শুরু করেছে তা ঠিক কী বিন্দুতে বেছে নিয়েছে?
গন্তব্য ফাইলটি লেখার সময় এসকিউএল ডাটাবেসগুলির মতো কিছু ধরণের বাফারিং বা "লেনদেন" হয়, প্রোগ্রামে, কার্নেল বা ফাইল সিস্টেম পর্যায়ে নিশ্চিত হয় যে কেবল পরিষ্কার, ভালভাবে গঠিত বাইটগুলি অন্তর্নিহিত ব্লক ডিভাইসে এটি তৈরি করে?
বা প্রোগ্রামগুলি ধরে নিচ্ছে যে সর্বশেষতম বাইটটি সম্ভাব্য অসম্পূর্ণ হবে, তাই তারা এটির খারাপ ধারণাটি এটিকে মুছে ফেলবে, বাইটটি পুনরায় কিনে ফেলবে এবং সেখান থেকে সংযোজন শুরু করবে?
সমস্ত ডেটা বাইট হিসাবে প্রতিনিধিত্ব করে না তা জেনেও এই অনুমানগুলি ভুল বলে মনে হয়।
যখন এই প্রোগ্রামগুলি "পুনরায় শুরু করুন" তারা কীভাবে জানবে যে তারা সঠিক জায়গায় শুরু করছে?
head -c 20480 /dev/zero | strace -e write tee foo >/dev/null
এবং তারপরে ওএস সেগুলি বাফার করবে এবং এটিকে আরও বড় অংশগুলিতে ডিস্কে প্রেরণ করবে।
fwrite()
?