ویژگی ‘verify disc’ به این دلیل که خیال ما را از جهت سالم بودن دیسک تازه رایت شده راحت میکند، بسیار عالی است، اما این ویژگی به صورت دقیق چگونه کار میکند؟
سؤال اصلی چیست؟
Verify disc درواقع برای ثبت و تأیید اطلاعات رایت شده در دیسک چه کاری انجام میدهد؟ شاید تصور کنیم که این ویژگی وظیفه دارد فایلهای اصلی را با فایل و اطلاعاتی که بر روی دیسک رایت میشوند مورد سنجش قرار دهد، اما چگونه و به چه شکل این کار را انجام میدهد؟
آیا دادههای منبع و محتوای مقصد را بصورت قسمت به قسمت در آورده و سپس به مقایسهی آنها میپردازد؟ اگر اینطور است آیا این قسمتهای مختلف ساخته شده، در رم انبار میگردد؟ یا به صورت یک فایل موقت در حافظه ذخیره میشود؟ به صورت کلی چه اتفاقی میافتد و جریان از چه قرار است؟
جواب نخست و کوتاه
در ابتدا بد نیست به دو صفحه IburnVerification و IMAPI_BURN_VERIFICATION_LEVEL از توضیحات در MSDN مایکروسافت نگاهی بیندازید.
برای دیسکهای اطلاعات (data discs) اینطور به نظر میرسد که در حالت رایت سریع به جای اینکه کل دیسک کنترل شود تنها بخشها و ناحیههایی از دیسک مورد بازبینی و کنترل قرار میگیرند. سپس این عملکرد مطمئن میشود که API که READ_DISC_INFO و READ_TRACK_INFO نام دارد با موفیقت در دیسک جدید قرار بگیرد.
اما برای گرفتن تاییدهای کامل از محتویات رایت شده، ویژگی verify disc بررسی بیشتری انجام میدهد و سپس تمام محتویات آخرین بخش از دیسک جدید را مورد بررسی قرار میدهد و آن را با منبع اصلی میسنجد. Checksums یا سنجشگرها باید به مدت کوتاهی در حافظه رم ذخیره شوند. توجه داشته باشید که مقایسهای که انجام میشود بر اساس ایمیج قرار گرفته در حافظهی رم بوده و ارتباطی با خود منبع موجود بر روی حافظهی دیسک ندارد. نتیجه آنکه در صورت عدم خوانده شدن و بارگذاری صحیح دادههای موجود از روی منبع، عمل نوشتن دادهای نیز به همان شیوهی اشتباه به انجام خواهد رسید و Verification قادر به تشخیص و ردیابی چنین مشکلاتی نیست.
برای دیسکهای موسیقی (music discs) تمرکز بر روی بررسی READ_TRACK_INFO و جدول محتویات دیسک است اما هیچگونه محاسبات کنترلی انجام نخواهد شد. درواقع هیچگونه Verification کاملی برای دیسکهایی موسیقی وجود ندارد.
جواب دوم و بلند
یکی از بهترین راهها برای سنجش و مقایسه اطلاعات قابل اجرا: خرد کردن یک فایل (خوشبختانه به اندازه کافی بزرگ و قابل خواندن هستند تا الگوریتمهای تلاقی سودمند و مفید کار خود را انجام دهند)، سپس همین روند خرد کردن برای دیگر فایلها و قسمتهای خرد شده و در نهایت مقایسه آنها با یکدیگر است. اگر این روند برای انجام مقایسه اطلاعات و گرفتن تاییدیه انجام شود شما برای مدت زمان کوتاهی روشن شدن چراغ فلش الایدی-درایو و سپس چراغ فلش الایدی-سیدی/دیویدی را مشاهده خواهید کرد.
راه دیگری که برای اجرای این مقایسه و اطمینان از صحت اطلاعات رایت شده وجود دارد خواندن بلاکهایی از یک فایل و بعد همین بلاک مشابه از دیگر فایلها، مقایسه آنها و در نهایت ادامه این روند تا رسیدن به انتهای فایل است. در این مورد چشمک الایدی های جلو و پشت هر دو درایو را مشاهده خواهید کرد.
البته که اگر هارد درایو و درایو نوری شما چراغ الایدی نداشته باشند پس به این واضحی از روند انجام اینکار با اطلاع نخواهید شد. اما هنوز با استفاده از ProcessMonitor میتوانید این روند را دنبال کنید.
شاید تصور کنیم که این ویژگی وظیفه دارد فایلهای اصلی را با فایل و اطلاعاتی که بر روی دیسک رایت میشوند مورد سنجش قرار دهد، اما چگونه و به چه شکل این کار را انجام میدهد؟
درواقع تمام این مراحل در حافظه کش سیستم است و روند مقایسه و خواندن اطلاعات از دیسک واقعی به جای حافظه کش انجام میشود. واضح است که اهمیت این گام بسیار زیاد است زیرا اگر تأیید از طریق کش انجام شود پس اطلاعات واقعی بر روی دیسک ممکن است نشان داده نشود و اگر خرابی رخ داده باشد به راحتی پنهان بماند.
تفاوت سرعت رایت شدن و انجام عمل سنجش و تأیید اطلاعات را میتوانید با مقایسه سرعت انجام آنها از کش در حافظه رم و حافظه درایو مشاهده کنید. اگر به صورت دستی نیز یک مقایسه ساده انجام دهید (با استفاده ازWinDiff, WinMerge یا با ابزارهای هش کردن) متوجه خواهید شد که سرعت عملکرد مقایسه و تأیید اطلاعات از طریق کش بسیار سریعتر اتفاق خواهد افتاد.