Я писав прошивку диска для WD, і одного разу написав прошивку, яка перерозподілила погані блоки.
По-перше, більшість поганих блоків виявляються на читаннях, а не на записі. Записи виконуються наосліп, тобто дані записуються без перевірки. Таким чином, при записі, якщо засоби масової інформації погані, ви не будете знати про це, поки хост не прочитає цей сектор. Існує невелика частина сектора (заголовок сектора), який читається на "запис", щоб знайти правильний сектор, так що, якщо є помилка в читанні заголовка сектора, привід переназначить сектор і запише його з отриманими даними з команди write. Але переважна більшість поганих блоків виявляються на читаннях, і лише тому, що запис вдалося в секторі, це не означає, що засоби масової інформації хороші або що цей сектор переназначений.
Тепер про поганий перерозподіл блоків (також званий перерозподілом). Так, як правило, накопичувач спробує перепризначити сектор, якщо помилка є достатньо поганою (тобто, помилка ECC є поганою), але накопичувач все одно може відновити дані після виправлення ECC. Зазвичай це робиться автоматично. Єдиним винятком є те, що хост міг би раніше сказати накопичувачу не робити автоматичних перерозподілів, але це рідко робиться.
Що ж станеться, якщо накопичувач прочитає і не може відновити дані? Нічого. Про помилку повідомляється хосту, але переназначення не робиться. Проблема полягає в тому, що накопичувач може перепризначити сектор, але він не має найменшого уявлення про те, які дані потрібно записувати в новопризначений сектор. Якби він просто написав купу нулів, скажімо, а потім сектор був прочитаний знову, він поверне всі нулі без жодних вказівок, що дані недійсні. Це по суті те саме, що і корупція даних. Привід не може розраховувати на те, що хост відслідковує помилки з різних причин (наприклад, що робити, якщо диск перенесли на новий хост?), Тому найкращий спосіб дії - нічого не робити, коли дані можуть " не підлягає одужанню.
Однак сучасні накопичувачі врятують місце поганого сектору, коли його неможливо перерозподілити. Кількість поганих секторів, які очікують перерозподілу, можна знайти в даних SMART. Що відбувається, якщо запис робиться в один з поганих секторів, що очікує перерозподілу, перерозподіл виконується, тому що накопичувач тепер має дійсні дані для запису в нього після перерозподілу. Таким чином, коли люди кажуть, що писати в поганий сектор перерозподіляє це, це насправді лише половина історії. Спочатку слід прочитати диск, щоб він виявив усі погані сектори, які неможливо перерозподілити автоматично. Таким чином, ви можете записати цілий диск, і дані SMART скажуть, що немає поганих секторів, які очікують перерозподілу, але ви не обов'язково очистили диск усіх поганих секторів. Тож якщо ви дійсно хочете очистити привід усіх поганих секторів,
Є й інші способи боротьби з поганими блоками, які неможливо перерозподілити. Якщо накопичувач є частиною резервної конфігурації RAID (тобто нічого, крім RAID 0), програмне забезпечення RAID повинно автоматично відновлювати дані про поганий сектор з інших накопичувачів і записувати їх у перерозподілений сектор. Диски SCSI мають явну команду переназначення блоків, яку хост може використовувати для примусового перепризначення навіть тоді, коли для блоку немає дійсних даних для запису, але його використання є досить низьким рівнем.