Ещё со студенческих времен у меня стояла куча жестких дисков. Время от времени я их апгрейдил — старые продавал, а вместо них ставил более емкие. Тогда спрос на объем был довольно большой, все приходилось хранить у себя на винтах. Но пришло время интернета, и локалки отпали сами собой. Какое-то время диски использовались как файлопомойка для торрентов. Но надобность в апгрейде из-за нехватки объема постепенно отпала. В итоге я оказался с кучей довольно старых винчестеров, которые начали постепенно умирать. Они еще не трупы, но уже накрылись бэд блоками и поползли в сторону могилы. Естественно, при первых признаках бэдов всё более-менее ценное переносилось на новый винт, а старый…
Вот и возник вопрос, а что делать со старым? Как-то жалко выкидывать 4ТБ винт когда на нем всего с десяток бэдов. Причем в большинстве случаев их количество растет не быстро, и этот 4ТБ винт можно использовать для всякой ерунды ещё довольно долго. Встал вопрос, а как бы сделать так, чтобы данные на бэды не попадали. Большинство утилит пытаются эти сектора восстановить. Но при таком объеме напрашивается вопрос — зачем? Это процесс весьма долгий, а ± гигабайт на диске в 4ТБ особой роли не играет. Особенно когда накопилось несколько таких живых мертвецов. Немного погуглив способ быстрой маркировки бэдов наткнулся на несколько веток на форумах, где народ искал что-то похожее. Но нормального решения я так и не нашел.
Раз решения нет, значит будет. Немного подумав решил поступить самым простым способом — написать консольную утилитку забивающую винт файлами, а потом проверяющую эти файлы на чтение. Файл прочитался? Отлично, сектор под файлом целый, файлик удаляем. Не читается? Вот и нашли бэд блок, файл оставляем на этом бэде чтобы ничего больше на него не писалось.
Из минусов такого подхода — не проверяется место под уже имеющимися файлами, только свободное место на диске. Из плюсов — быстро и можно делать «порциями».
Всего есть 2 режима, полный, и режим чистки.
Полный режим забивает диск файлами, потом их проверят и удаляет. Для этого указываем диск и желаемый размер блока/файла.
BadBlocksPlaceholder [disk] [file_size_kb]
BadBlocksPlaceholder e: 4096
Файлы создаются в папке BadBlockPlaceholdersyyyymmdd
Второй режим предназначен для продолжения проверки/чистки. Забить 4ТБ файлами и проверить их на чтение тоже не моментальный процесс, и иногда приходится разбивать его на пару дней. В этом режиме нужно указать папку с файлами-Placeholder'ами, созданными на первом этапе.
BadBlocksPlaceholder clean e:BadBlockPlaceholders20190110
Естественно, после чистки оставляем BadBlockPlaceholders лежать на винте. Надеюсь кому-нибудь утилитка пригодится. Проверялся только happy-day сценарий, так что сильно не пугайтесь, и сильно не пинайте. Написано на .net core/C#.
Исходники лежат на github.
Автор: Виктор Терешенко