Моя система Linux начала выдавать ошибки SMART в системный журнал. Я разыскал его и считаю, что проблема в одном блоке на диске. Как мне легко заставить диск перераспределить этот один блок? Я хотел бы знать, какой файл был уничтожен в процессе. (Я знаю, что в случае сбоя одного блока на диске, вероятно, последуют другие; у меня хорошее текущее резервное копирование и я просто хочу, чтобы этот диск работал.)
Поиск в Интернете приводит к блоку Bad HOWTO , который описывает ручной процесс на размонтированном диске. Это кажется сложным и подверженным ошибкам. Есть ли инструмент для автоматизации этого процесса в Linux? Моя единственная другая опция - это диагностический инструмент производителя , но я предполагаю, что он ударит плохой блок без каких-либо сообщений о том, что было уничтожено. В худшем случае это могут быть метаданные файловой системы.
Данный диск является основным системным разделом. Использование ext3fs и LVM. Вот журнал ошибок из системного журнала и соответствующий бит из Smartctl.
smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors
Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782
Там есть полный дамп Smartctl на pastebin .
Ответы:
Вы могли бы попробовать
hdparm --write-sector <LBA> /dev/ice
.Я не знаю другого способа сделать это - вам нужно вручную преобразовать LBA в блоки файловой системы (как вы уже нашли)
источник
Раньше я писал дисковые прошивки для WD и однажды написал прошивку, в которой переназначались плохие блоки.
Во-первых, большинство плохих блоков обнаруживаются при чтении, а не при записи. Запись выполняется вслепую, то есть данные записываются без проверки. Таким образом, при записи, если носитель плохой, вы не узнаете об этом, пока хост не выполнит чтение в этот сектор. Существует небольшая часть сектора (заголовок сектора), которая читается при записи для определения местоположения правильного сектора, поэтому в случае ошибки при чтении заголовка сектора накопитель переназначит сектор и запишет его с полученными данными. из команды записи. Но подавляющее большинство плохих блоков обнаруживается при чтении, и только то, что запись успешно выполняется в секторе, не означает, что носитель хорош или что сектор был переназначен.
Теперь о плохом переназначении блоков (также называемом перераспределением). Да, обычно накопитель пытается переназначить сектор, если ошибка достаточно серьезна (т. Е. Сбой ECC достаточно серьезен), но накопитель все еще может восстановить данные после исправления ECC. Обычно это делается автоматически. Единственное исключение состоит в том, что хост мог ранее сказать приводу не выполнять автоматическое перераспределение, но это редко делается.
Так что же происходит, если диск выполняет чтение и не может восстановить данные? Ничего такого. Ошибка сообщается хосту, но переназначение не выполняется. Проблема в том, что накопитель может переназначить сектор, но он не имеет ни малейшего представления, какие данные записать в недавно переназначенный сектор. Скажем, если бы он просто записал группу нулей, а затем сектор снова был прочитан, он бы возвратил все нули без каких-либо указаний на то, что данные неверны. По сути, это то же самое, что и повреждение данных. Диск не может рассчитывать на хост, отслеживающий ошибки по ряду причин (например, что, если диск был перенесен на новый хост?), Поэтому лучший способ - ничего не делать, когда данные могут ' быть восстановленным.
Современные диски, тем не менее, сохранят местоположение поврежденного сектора, когда его нельзя перераспределить. Количество плохих секторов, ожидающих перераспределения, можно найти в данных SMART. Что происходит, если запись выполняется в один из поврежденных секторов, ожидающих перераспределения, перераспределение выполняется, потому что на диске теперь есть действительные данные для записи в него после перераспределения. Таким образом, когда люди говорят, что запись в плохой сектор перераспределит их, это только половина истории. Диск должен быть прочитан первым, чтобы он мог обнаружить все поврежденные сектора, которые не могут быть автоматически перераспределены. Таким образом, вы можете записать весь диск, и данные SMART скажут, что нет плохих секторов, ожидающих перераспределения, но вы не обязательно очистили диск от всех плохих секторов. Так что если вы действительно хотите очистить диск от всех плохих секторов,
Есть и другие способы борьбы с плохими блоками, которые нельзя перераспределить. Если диск является частью конфигурации RAID с резервированием (т. Е. Что-либо, кроме RAID 0), программное обеспечение RAID должно автоматически восстановить данные для поврежденного сектора с других дисков и записать их в перераспределенный сектор. Диски SCSI имеют явную команду переназначения блоков, которую хост может использовать для принудительного переназначения, даже если для записи в блок нет действительных данных, но его использование довольно низкоуровневое.
источник
hdparm -R
(если предположить, что hdparm был сравнительно недавно). Это приводит к значительному снижению производительности записи (примерно вдвое уменьшая пропускную способность записи и число операций ввода-вывода в секунду, поскольку каждая запись теперь влечет за собой последующее чтение), но если ваше оборудование поддерживает это и ваша рабочая нагрузка слишком велика для чтения, то это может быть очень действенной профилактической мерой.Я думаю, что все, что вам нужно сделать, это:
предполагая, что / dev / hda1 является (не смонтированным) разделом. Или:
сделать (более медленный) неразрушающий тест чтения-записи. Это все еще должно быть демонтировано. Я не думаю, что это даст вам подробную информацию о любых потерянных данных, хотя.
источник
У Михаэля это правильно, и в большинстве случаев я бы сказал, просто замените диск, они дешевы. Однако, если у вас нет резервных копий и вы не можете извлечь важные данные с диска, или просто хотите попытаться восстановить диск, вы можете попробовать использовать spinrite на самом высоком уровне.
У меня был ноутбук, который начал издавать звуки несколько лет назад. Badblocks показал, что диск имел около 118 плохих блоков, видимых для конечного пользователя. Поскольку у меня уже была копия SpinRite, я решил попробовать ее перед покупкой нового диска. После запуска спинрита на диске badblocks показало 0 плохих блоков и шумы прекратились. С тех пор диск работал более двух лет.
источник
Если у вас есть резервные копии, и вы знаете, что это логическая, а не физическая ошибка, то лучший способ сделать это - обнулить диск.
Я бы использовал MHDD, он довольно прост в использовании, и, если вы помните, что ваш жесткий диск в Bios настроен на эмуляцию IDE, а затем обратно на AHCI, когда ваша работа закончена, вам не о чем беспокоиться.
После загрузки MHDD выберите тип диска в команде ERASE и подтвердите свой выбор.
Возьми себя в руки, это может занять некоторое время.
После обнуления накопителя запустите сканирование (f4) с Remap, установленным на ON (по умолчанию выключено). Если с диском все еще есть проблемы (это может означать, что на блюде имеются физические повреждения, а диск находится на склоне вниз), эта опция «исправит» их, сопоставив поврежденную область со здоровыми частями диска.
Если ошибок UNC нет, то поздравляю вас и ваш накопитель на долгие годы.
источник
Если диск работает плохо, замените его. Не стоит рисковать, что он больше развалится.
источник