Как мне выполнить сканирование поверхности диска и исправить / перераспределить поврежденные сектора в Linux из командной строки?

удалить все символы, которые не являются цифрой, затем удалить строки, которые начинаются не так, как нужно, наконец, удалить те, которые не состоят из 10 символов:

sed -e 's/[^0-9]//g' -e '/^301209/!d' -e '/^.\{10\}$/!d'
5
11.05.2017, 20:39
2 ответа

Этот ответ речь идет о магнитных дисках. SSD бывают разные. Кроме того, это диск без данных (или без данных, которые вы хотите сохранить) на нем; см. мой ответ на вопрос «Могу ли я исправить плохие блоки на жестком диске с помощью одной команды» о том, что делать, если на диске есть важные данные.

Диски, выпущенные как минимум с конца 90-х годов, сами управляют плохими блоками. Короче говоря, диск будет обрабатывать плохой блок, прозрачно заменяя его запасным сектором. Он сделает это, если (а) во время чтения обнаружит, что блок «слабый», но ECC достаточно для восстановления данных; (б) во время записи обнаруживается, что заголовок сектора неверен; (c) во время записи, если чтение ранее определило сектор как поврежденный, но данные нельзя было восстановить.

Микропрограмма диска обычно позволяет отслеживать этот процесс (по крайней мере, количество) с помощью атрибутов SMART. Как правило, будет как минимум количество перераспределенных секторов и два количества ожидающих выполнения (обнаружены ошибки при чтении, сбой ECC, запись еще не выполнялась).

Есть два способа заставить диск обнаруживать сбойные сектора:

  1. Используйте smartctl -t offline /dev/sdX, чтобы сообщить микропрограмме диска выполнить автономное сканирование поверхности. Затем вы просто оставляете диск в покое (полностью бездействовать будет быстрее всего) до тех пор, пока это не будет сделано (проверьте «Статус автономного сбора данных» в smartctl -c /dev/sdX). Как правило, это обновляет счетчик «некорректируемых в автономном режиме» в SMART. (Примечание: диски можно настроить для автоматического регулярного запуска автономной проверки.)

  2. Заставьте Linux прочитать весь диск, например, badblocks -b 4096 -c 1024 -s /dev/sdX. Обычно это обновляет счетчик «текущий ожидающий сектор» в SMART.

Любое из вышеперечисленных действий также может увеличить количество перераспределенных секторов — это случай (b), когда ECC восстановил данные.

Теперь, чтобы восстановить сектора, вам нужно просто записать в них. Обычно это просто pv -pterba /dev/zero > /dev/sdX (или просто cat, или dd) но вы планируете сделать их частью массива RAID. Инициализация RAID в любом случае будет записывать на весь диск, так что это бессмысленно. Исключение составляют только начало и конец диска — возможно, будет пропущено несколько десятков мегабайт (из-за выравнивания, заголовков и т. д.).Итак:

disk=/dev/sdX
end=$(echo "$(/sbin/blockdev --getsize64 "$disk")/4096-32768" | bc)
dd if=/dev/zero bs=4096             count=32768 of="$disk"   # first 128 MiB
dd if=/dev/zero bs=4096 seek="$end" count=32768 of="$disk"   # last 128 MiB

Я думаю, что мне удалось избежать простой ошибки забора 1 выше, так что это должно очистить первые и последние 128 МБ диска. Затем пусть mdadm raid init напишет остальное. Однако безвредно (за исключением тривиального износа и пустой траты времени) обнулить весь диск, если хотите.

Еще что нужно сделать, если ваши диски это поддерживают: smartctl -l scterc,40,100 (или любые другие числа), чтобы сообщить диску, что вы хотите отказаться от исправления читать ошибки быстрее - 40 будет 4 секунды. Два числа — это ошибки чтения и записи; mdraid легко исправит ошибки чтения с помощью контроля четности (и запишет сбойный сектор обратно на диск, чтобы позволить ему перераспределить). Ошибки записи, однако, выведут диск из массива.

PS: Обязательно следите за количеством перераспределенных секторов. То, что атрибут выходит из строя, — плохая новость. И если она постоянно увеличивается, это тоже плохая новость.

PPS: Убедитесь, что ваши RAID-массивы регулярно очищаются (считывается каждый сектор и проверяется четность). Многие дистрибутивы уже выпускают скрипт, который делает это ежемесячно. Это обнаружит и восстановит любые новые плохие блоки, поскольку в противном случае редко читаемые плохие блоки могут задерживаться и в конечном итоге привести к сбою восстановления.


1 Ошибка ограждения — тип ошибки «отклонение на один» из-за невозможности подсчитать один из концов. Названо от если у вас есть столбы забора через каждые 3 фута, сколько столбов забора в отдельно стоящем заборе 9 футов? Правильный ответ: 4; ошибка столба забора равна 3 и связана с тем, что столб не считается в начале или в конце.

9
27.01.2020, 20:37

Если вы обнаружили видимые плохие блоки, диск, скорее всего, очень быстро выходит из строя . Если у вас ОЧЕНЬ старый диск, замена плохих блоков выполняется внутри, и вы их не увидите. Если вы их видите, значит, кэш замещающих блоков исчерпан.

Я бы НЕ стал использовать диск в таком состоянии и, вероятно, протер бы его, а затем выбросил бы.

0
27.01.2020, 20:37

Теги

Похожие вопросы