2

/!\ Поищите там обновление 2, сейчас вопрос наполовину не получен /!\

Иногда я полностью стираю свои жесткие диски (не твердотельные накопители); Будучи тем, кем они являются, dd и badblocks -w мы все слепо стираем .

Дело в том, что они также пишут запасные секторы жестких дисков, что плохо, так как они все совершенно новые. Так что, если что-то случится во время процесса стирания (потеря питания, ошибки записи и т.д.), Это убьет очень полезный сектор ... даром.

Итак, вопрос: как избежать того, что dd или badblocks запасные сектора жестких дисков?


Предположения:

  • dd как известно, слепо стирает все, что проходит через него.
  • badblocks может получить доступ к не отображенным блокам.

Обновление 1:

dd определенно не могу получить доступ к запасным секторам, если они не заменили неисправный сектор (очевидно). Это связано с тем, как был разработан dd (комментарий Камиля Мачоровского):

Доступные для dd номера логических секторов отображаются в пронумерованные физические сектора, и соответствующие номера изначально равны. Запасным физическим секторам изначально не назначены логические номера, поэтому dd не может их достичь.

Обновление 2:

Будучи главным образом системным администратором, а не кодером, «близким к низкоуровневому» (C), может ли кто-нибудь взглянуть на код badblocks и сказать, имеет ли он доступ к запасным секторам? Чтобы быть более точным, учитывает ли badblocks запасные сектора внутри блока чтения / записи?

http://git.kernel.org/cgit/fs/ext2/e2fsprogs.git/tree/misc/badblocks.c

С другой стороны / способ получить ответ; Я также знаю, что Теодор Цо, badblocks , имеет учетную запись здесь на Super User. Если он читает это обновление 2, возможно ли получить прямой ответ по этому поводу?

2 ответа2

8

Ни dd ни badblocks не могут получить доступ к резервным секторам аппаратного обеспечения диска. Основная причина, по которой dd и badblocks не могут получить доступ к этим запасным секторам, заключается в том, что авторы этих утилит не знают как, а запатентованная природа современного оборудования на жестких дисках и программного обеспечения SMART затрудняет его поиск.


Этот Q, кажется, основан на путанице между файловыми системами на уровне ОС и SMART аппаратного уровня производителя диска и процедурами переназначения . Исторический взгляд может прояснить вещи ...

Ранние производители оборудования тестировали диски перед отправкой и печатали списки неисправных блоков на этикетке. Администратор, который установил диск, возможно, будет использовать этот список поврежденных блоков при форматировании диска. (Программы раннего форматирования запрашивают у пользователя списки поврежденных блоков, которые пользователь вводит вручную.) Если диск был некоторое время, администратор может перепроверить блоки диска. В любом случае, смысл этих плохих списков блокировок состоял в том, чтобы указывать файловой системе не использовать эти блоки. badblocks похоже, была разработана с учетом такого рода ранних жестких дисков.

Более новые жесткие диски включают процедуры переотображения, а также процедуры диагностики, такие как SMART, которые представляют собой нечто вроде выделенного компьютера на жестком диске, который автоматически проверяет наличие поврежденных блоков и даже перераспределяет поврежденные блоки. Замечательная функциональность, но то, что отвратительно в переназначении поставщика, - то, что все его реализации являются проприетарным и закрытым исходным кодом - таким образом, пользователи не уверены, что он действительно делает, или не может сделать там. Возможно, в программном обеспечении для переотображения / диагностики диска имеются дефекты, на диске могут быть секретные места, колонизированные шпионами или хакерами в черной шляпе, и т.д. Так как это переназначение на уровне диска (не на уровне ОС), это может неэффективно вызывать более сильное искажение и износ головок (если некоторые часто используемые файлы или области находятся в месте с переназначенными секторами).

3

По вашему запросу я взглянул на badblocks.c и могу засвидетельствовать, что это очень простая программа, не использующая какие-либо расширенные функции диска и не работающая на уровне контроллера диска.

Все, что он делает, - это использует стандартную функцию открытия Linux, чтобы открыть диск как необработанное устройство (то есть как виртуальный файл, включающий все устройство), в то же время применяя флаг O_DIRECT для непосредственного ввода-вывода на диск без прохождения через Linux. буферы памяти.

Затем он извлекает количество блоков в необработанном устройстве с помощью функции ioctl, которая включает в себя только общедоступные блоки / сектора (без резервных секторов), затем выполняет итерацию записи и чтения шаблона для каждого блока / сектора, используя стандартные функции Linux. о записи и чтении, сообщая об ошибке, если какой-либо код ошибки возвращается или данные не равны.

Функции открытия / чтения / записи появились в самом начале Linux, когда диски имели гораздо более простую структуру и не имели резервных секторов. Для доступа к любым внутренним данным на диске, например, к резервным секторам, которые недоступны при случайном использовании, потребуются гораздо более сложные функции.

Любопытно , что комментарий в начале badblocks.c гласит:

* This file is based on the minix file system programs fsck and mkfs
* written and copyrighted by Linus Torvalds <Linus.Torvalds@cs.helsinki.fi>

где Minix предшествовал Linux (история ссылки) и чьи недостатки фактически побудили Линуса Торвальдса написать первую версию Linux. Это просто для того, чтобы получить представление о том, насколько древней и простой является эта программа. Это конечно не касается запасных секторов.

Я также посмотрел на dd.c , гораздо более сложную программу, которая подключает драйвер диска. Я не знаком с интерфейсом драйвера диска, но мне кажется, что даже если бы через этот интерфейс могли быть изменены запасные секторы, ни один программист в здравом уме не сделал бы этого. Мои причины:

  1. dd может записывать образ диска в файл и из файла, и этот образ не содержит запасных секторов (кроме случаев, когда они сопоставлены), что, вероятно, означает, что dd не касается не отображенных резервных секторов.
  2. Запасные сектора используются для переназначения плохих секторов. Манипулирование с ними будет означать, что поврежденные сектора станут немаркированными, а новые данные, скопированные в такие поврежденные сектора, могут быть повреждены и потеряны без уведомления.
  3. Сопоставление резервных секторов является уникальным для его диска, поскольку два разных диска почти никогда не могут иметь абсолютно одинаковые дефекты, поэтому копирование или очистка этого сопоставления не имеет смысла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .