Используем старые HDD с бэдами

habr.png

Ещё со студенческих времен у меня стояла куча жестких дисков. Время от времени я их апгрейдил — старые продавал, а вместо них ставил более емкие. Тогда спрос на объем был довольно большой, все приходилось хранить у себя на винтах. Но пришло время интернета, и локалки отпали сами собой. Какое-то время диски использовались как файлопомойка для торрентов. Но надобность в апгрейде из-за нехватки объема постепенно отпала. В итоге я оказался с кучей довольно старых винчестеров, которые начали постепенно умирать. Они еще не трупы, но уже накрылись бэд блоками и поползли в сторону могилы. Естественно, при первых признаках бэдов всё более-менее ценное переносилось на новый винт, а старый…
Вот и возник вопрос, а что делать со старым? Как-то жалко выкидывать 4ТБ винт когда на нем всего с десяток бэдов. Причем в большинстве случаев их количество растет не быстро, и этот 4ТБ винт можно использовать для всякой ерунды ещё довольно долго. Встал вопрос, а как бы сделать так, чтобы данные на бэды не попадали. Большинство утилит пытаются эти сектора восстановить. Но при таком объеме напрашивается вопрос — зачем? Это процесс весьма долгий, а ± гигабайт на диске в 4ТБ особой роли не играет. Особенно когда накопилось несколько таких живых мертвецов. Немного погуглив способ быстрой маркировки бэдов наткнулся на несколько веток на форумах, где народ искал что-то похожее. Но нормального решения я так и не нашел.

Раз решения нет, значит будет. Немного подумав решил поступить самым простым способом — написать консольную утилитку забивающую винт файлами, а потом проверяющую эти файлы на чтение. Файл прочитался? Отлично, сектор под файлом целый, файлик удаляем. Не читается? Вот и нашли бэд блок, файл оставляем на этом бэде чтобы ничего больше на него не писалось.

Из минусов такого подхода — не проверяется место под уже имеющимися файлами, только свободное место на диске. Из плюсов — быстро и можно делать «порциями».

Всего есть 2 режима, полный, и режим чистки.

Полный режим забивает диск файлами, потом их проверят и удаляет. Для этого указываем диск и желаемый размер блока/файла.

    BadBlocksPlaceholder [disk] [file_size_kb]
    BadBlocksPlaceholder e:\ 4096


Файлы создаются в папке BadBlockPlaceholders\yyyymmdd

Второй режим предназначен для продолжения проверки/чистки. Забить 4ТБ файлами и проверить их на чтение тоже не моментальный процесс, и иногда приходится разбивать его на пару дней. В этом режиме нужно указать папку с файлами-Placeholder’ами, созданными на первом этапе.

    BadBlocksPlaceholder clean e:\BadBlockPlaceholders\20190110


Естественно, после чистки оставляем BadBlockPlaceholders лежать на винте. Надеюсь кому-нибудь утилитка пригодится. Проверялся только happy-day сценарий, так что сильно не пугайтесь, и сильно не пинайте. Написано на .net core/C#.

Исходники лежат на github.

© Habrahabr.ru