Функція «перевірити диск» чудово підходить для того, щоб переконатися, що ваш щойно записаний диск вийшов добре, але як саме він працює? Сьогоднішня публікація запитань SuperUser містить відповідь на цікаве запитання читача.
Сьогоднішня сесія запитань і відповідей надійшла до нас люб’язно від SuperUser - підрозділу Stack Exchange, угруповання веб-сайтів із питань та відповідей на основі спільноти.
Фото надано кобальт123 (Flickr) .
Питання
Користувач зчитувача SuperUser1301428 хоче знати, як диски перевіряються після їх записування:
Що насправді робить перевірка диска після записування для перевірки даних? Я думаю, це якесь порівняння між оригінальними файлами та файлами, записаними на диск, але хтось знає, як це робиться насправді на низькому рівні?
Я маю на увазі, чи створює він хеш вихідного та кінцевого вмісту, а потім порівнює їх? Якщо так, чи зберігає він хеш записаного вмісту в оперативній пам'яті? Або він зберігає його у тимчасовому файлі на жорсткому диску? Чи є файл журналу того, що відбувається?
Просто цікаво дізнатись, як саме працює ця функція. І я маю на увазі Windows Image Burner.
Як працює процес перевірки диска?
Відповідь
Співробітники SuperUser Френк Томас та Synetech мають відповідь за нас. Спочатку Френк Томас:
Перегляньте ці сторінки MSDN в Windows API для IBurnVerification інтерфейс та IMAPI_BURN_VERIFICATION_LEVEL перерахування.
Для дисків даних схоже, що в швидкому режимі він не перевіряє суми всього диска, а лише вибір секторів. Потім він переконується, що API викликає READ_DISC_INFO та READ_TRACK_INFO успішно щодо нового диска.
Для повної перевірки він виконує вищезазначені перевірки, а потім робить повну контрольну суму останнього сеансу на новому диску щодо контрольної суми, обчисленої в потоці пам'яті, що спалюється. Контрольні суми слід зберігати в оперативній пам'яті, але вони, швидше за все, є короткочасними значеннями. Зверніть увагу, що порівняння проводиться із зображенням диска в оперативній пам’яті, а не з самим носієм джерела, тому, якщо вихідні дані неправильно прочитані, вони будуть записані неправильно. Перевірка не виявить цього.
Для музичних дисків він зосереджений на перевірці READ_TRACK_INFO та змісту диска, але не виконує обчислення контрольної суми. Для музики немає режиму повної перевірки.
Далі відповідає відповідь від Synetech:
Френк гарно пояснив перевірку для Windows. Я дам більш загальну відповідь.
- Що насправді робить перевірка диска після запису для перевірки даних?
- Я маю на увазі, чи створює він хеш вихідного та кінцевого вмісту, а потім порівнює їх? Якщо так, чи зберігає він хеш записаного вмісту в оперативній пам'яті? Або він зберігає його у тимчасовому файлі на жорсткому диску? Чи є файл журналу того, що відбувається?
Це, безумовно, один із способів реалізації порівняння: хеш одного файлу (сподіваємося, з досить великим - прочитайте низький шанс алгоритму зіткнення), повторіть для іншого і порівняйте хеші. Якщо саме так здійснюється перевірка, то ви зможете побачити деякий час спалах світлодіодного диска, потім деякий час спалах CD-DVD-LED.
Інший спосіб здійснення перевірки - прочитати блок одного файлу, потім той самий блок з іншого файлу, порівняти їх, а потім повторювати до кінця файлу. У цьому випадку ви побачите світлодіоди двох приводів, що чергуються вперед і назад.
Звичайно, якщо жорсткий диск і оптичний привід не мають світлодіодів, то це буде не так очевидно. Але ви все ще можете побачити його з чимось на зразок ProcessMonitor, оскільки він реєструє серію читань з одного, а потім з іншого, або в один, великий серійний, або чергуючийся, невеликий пакет.
- Я думаю, це якесь порівняння між оригінальними файлами та файлами, записаними на диск, але хтось знає, як це робиться насправді на низькому рівні?
Насправді все, що він насправді робить, - це очистити кеш-пам’ять накопичувача, щоб функція порівняння зчитувала дані з фактичного диска, а не з кешу пам’яті. Очевидно, що це критичний крок, тому що якщо перевірка здійснюється з кешу, то вона не відображає, що насправді знаходиться на диску, тому корупція може легко прослизнути.
Ви можете побачити, чи проводиться порівняння з диска або з кешу в оперативній пам’яті, за тим, як швидко це відбувається. Якщо ви вручну зробите просте порівняння (тобто з WinDiff, WinMerge або шляхом хешування їх за допомогою інструмента хешування), ви помітите, що порівняння відбувається набагато швидше, ніж очікувалося, оскільки воно зчитує файли з кешу пам'яті. Ви повинні очистити кеш, щоб змусити його читати з фактичного диска. Для оптичних накопичувачів (та інших знімних носіїв, таких як флеш-накопичувачі та карти пам'яті), просто витягнення накопичувача достатньо для очищення кеш-пам'яті, але для жорстких дисків це не настільки просто (хоча зазвичай це не має значення, оскільки нова копія - та, яку ви хочете перевірити).
Є що додати до пояснення? Звук у коментарях. Хочете прочитати більше відповідей від інших досвідчених користувачів Stack Exchange? Ознайомтесь із повним обговоренням тут .