Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
linux_faq:ремап-remap-сбоиных-секторов-диска-bad-blocks-в-linux [2019/02/15 18:29] adminlinux_faq:ремап-remap-сбоиных-секторов-диска-bad-blocks-в-linux [2023/01/30 17:39] (current) – [Утилиты sg_verify и sg_reasign] admin
Line 1: Line 1:
 +====== Самотестирование диска с помощью smartctl======
 +Устанавливаем необходимый пакет **smartmontools**
 +  sudo apt-get install smartmontools
 +Существуют два вида тестов - **foreground** (когда диск в ответ на все команды имеет статус **CHECK CONDITION**) и **background** - когда диск остается работоспособным.\\
 +Тесты бывают **short** и **long**.\\
 +**Short** - ограничен по времени и тестирует только часть диска. \\
 +**Long** -  аналогичен финальному тестированию на производстве, не ограничен по времени и тестирует весь диск.\\
 +
 +Запускаем "длинный" тест, который можно запускать прямо во время работы системы:
 +  sudo smartctl -t long /dev/sdb
 +Узнать сколько времени займет тот или иной тест можно командой:
 +<code>sudo smartctl -c /dev/sdc
 +  ...
 +Self-test execution status:      ( 249) Self-test routine in progress...
 +                                        90% of test remaining.
 +Total time to complete Offline 
 +data collection:                ( 1211) seconds.
 +  ...</code>
 +После того как он закончится смотрим результат с помощью команды **smartctl -l selftest /dev/sdb**:
 +<code>
 +sudo smartctl -l selftest /dev/sdb
 +smartctl 5.40 2010-07-12 r3124 [x86_64-unknown-linux-gnu] (local build)
 +Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
 +
 +=== START OF READ SMART DATA SECTION ===
 +SMART Self-test log structure revision number 1
 +Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
 +# 1  Extended offline    Completed: read failure       90%     28243         1048784
 +</code>
 +
 +Также можно протестировать только часть диска. Команда:
 +  sudo smartctl -t select,10-20 /dev/sdc
 +протестирует сектора с 10 по 20 включительно. \\
 +Кроме того, можно одной командой протестировать несколько диапазонов:
 +  sudo smartctl -t select,0-10 -t select,5-15 -t select,10-20 /dev/sdc
 +\\
 + Запустить **foreground** тест можно, указав опцию **-C**:
 +  sudo smartctl -t  long -C /dev/sdc
 +Короткий **foreground** тест, который принудительно обновит значения параметров **SMART** можно запустить так:
 +  sudo smartctl -t offline /dev/sda
 +
 +====== Утилиты sg_verify и sg_reasign ======
 +Пакет утилит sg3-utils предназначен для работы с дисками на низком уровне, поддерживающими полный набор команд **SCSI**. В настоящее время - это диски с интерфейсом **SAS** (но не **SATA**). \\
 +Обнаружить нечитающийся сектор можно, например, с помощью команды **dd**:
 +  sudo dd if=/dev/sdb of=/dev/null bs=4096
 +Затем, когда dd сообщит об ошибке, с помощью  **sg_verify** можно удостовериться, что проблема именно в том секторе:\\
 +  sudo sg_verify --lba=1193046 /dev/sdb
 +  verify (10):  Fixed format, current;  Sense key: Medium Error
 +  Additional sense: Unrecovered read error
 +  Info fld=0x123456 [[1193046]]
 +  Field replaceable unit code: 228
 +  Actual retry count: 0x008b
 +  medium or hardware error, reported lba=0x123456
 +\\
 +Зетем можно проверить, что размер **GLIST** не очень велик и там есть место:\\
 +
 +  sudo sg_reassign --grown /dev/sdb
 +  >> Elements in grown defect list: 0
 +\\
 +Теперь можно выполнить переназначкение сектора и проверить, что размер **GLIST** изменился:
 +  sudo sg_reassign --address=1193046 /dev/sdb
 +  sudo sg_reassign --grown /dev/sdb
 +  >> Elements in grown defect list: 1
 +\\
 +Размер **GLIST** изменился на 1 - чего и следовало ожидать. В результате в переназначаемом секторе будет записан заданный производителем паттерн (либо - если сектор все-же удалось прочесть - его содержимое не изменится). \\
 +Также утилита **sg_reassign** может выполнить переназначение группы секторов.
 +\\
 +Для дисков с интерфейсами **SAS** и **SATA** наборы команд для работы с переназначаемыми секторами различны. Диск с интерфейсом **SAS** (неважно подключен он к **SATA** или **SAS** контроллеру) способен безусловно переназначить группу секторов в резервную область независимо от того, читаемы сектора или нет. 
 +Использование **sg_reasign** для диска **SATA** скорее всего никакого эффекта не даст.
 +
 +====== Переназначение секторов для дисков с интерфейсом SATA ======
 +Для переназначения секторов на дисках с интерфейсом **SATA** можно просто дать команду на перезапись этого сектора, либо воспользоваться **hdparm**:
 +  sudo hdparm --repair-sector 
 +или 
 +  sudo hdparm --write-sector
 +Принципиальная разница между дисками **SAS** и **SATA** в том, что случае **SAS** можно принудительно переназначить даже хороший сектор, а в случае **SATA** переназначение при записи принимает контроллер диска.
 +При этом,этот вариант годится для обоих интерфейсов:\\
 +  sudo hdparm --repair-sector 1000 /dev/sda
 +или для группы секторов:
 +  for i in {1000..2000}; do sudo hdparm --repair-sector $i /dev/sda; done
 +======= Аналог MHDD под Linux =======
 +С удивлением обнаружил наличие под **Linux** некоторого аналога (по крайней мере визуально) популярной программы под DOS - **MHDD**. \\
 +Речь идет об утилите, входящей в состав [[http://www.system-rescue-cd.org/|SystemRescueCd]] - [[https://github.com/whdd/whdd|whdd]].
 +
 +
 +
  
  • linux_faq/ремап-remap-сбоиных-секторов-диска-bad-blocks-в-linux.txt
  • Last modified: 2023/01/30 17:39
  • by admin