Проверка дисков с помощью smartmontools


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

== Источник проблемы ==

В большинстве случаем Linux не корректно работает с режимом энергосбережения жесткого 
диска, а именно - парковка головки чтения/записи происходит настолько часто, что, к 
примеру, на ноутбуках Hitachi это приводит к выходу жесткого диска из строя за долго до 
окончания гарантии. Я проверял это на Ubuntu 7.01, 8.04, 8.10 и Kubuntu 8.04, 8.10 и 
абсолютно уверен, что этой же проблеме подвержены другие Linux'ы и Unix'ы на лаптопах. У 
меня также есть сомнения в корректной работе Windows, но винда подвержена этой болезни в 
гораздно меньшей степени - отчасти потому что всегда что-то записывает на винт и просто 
не дает ему переключиться в режим энергосбережения.

== Как проверить "болезнь" ==

Для проверки нужен пакет <tt>smartmontools</tt>, который умеет проверять состояние вашего 
HDD через внутреннюю систему SMART.

$ sudo apt-get install smartmontools

Для, собственно, проверки, необходимо несколько раз с перерывом в 2-3 минуты позапускать 
команду

$ sudo smartctl -a /dev/sda | grep Load_Cycle
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       4318

$ sudo smartctl -a /dev/sda | grep Load_Cycle
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       4323

$ sudo smartctl -a /dev/sda | grep Load_Cycle
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       4328

Если отображаемое значение (4318, 4323, 4328) увеличивается более, чем на 15 единиц в час 
(!) - то это верный признак того, что линукс "поедает" ресурсы вашего диска. Кстати, 
максимально предусмотренное число парковок головки составляет около 600.000 по различным 
источникам. У меня 15 единиц накручивалось за 10 минут...

== Как вылечить ноут ==

Перед тем как приступить к решению проблемы, нужно провести эксперимент, выполнив простую 
команду из консоли:

$ sudo hdparm -B 254 /dev/sda

После этого снова посмотреть - растет ли параметр <tt>Load_Cycle_Count</tt>. Если "да" - 
попробовать

$ sudo hdparm -B 255 /dev/sda

Обычно один из вариантов помогает. Но действует только до первой перезагрузки.

Теперь нужно зафиксировать результаты с перезагрузкой. Для этого, возможно, потребуется 
внести изменения в файлы:

/etc/hdparm.conf
/etc/laptop-mode/laptop-mode.conf
/etc/acpi/*

В файле /etc/hdparm.conf мне пришлось раскомментировать строку:

# -B apm setting
apm = 254

и добавить секцию:

/dev/sda {
   apm = 254
}

Значение 254 получено путем первых экспериментов.

Файл /etc/laptop-mode/laptop-mode.conf содержит очень много параметров для управления 
энергосбережением, но в моем случае он оказался бесполезен, т.к. Ubuntu не определил 
параметры ноута и соответствующий демон бездействовал. Но, возможно, в вашем случае он 
очень и очень пригодится!

В каталоге /etc/acpi находится много стартовых скриптов, в папки resume.d/, start.d/, 
suspend.d/ я добавил еще один с именем 99-hdd-fix.sh:

#!/bin/sh
/sbin/hdparm -B 254 /dev/sda

Не забудьте сделать скрипт 99-hdd-fix.sh запускаемым! И, конечно, провести проверки еще 
раз после перезагрузки.

== Болезнь неизлечима? ==

Если всё получилось - прекрасно. Но есть еще один негативный фактор, способный убить 
жесткий диск "в самом расцвете сил". Проверяем все так же - с помощью <tt>smartctl</tt>

$ sudo smartctl -a /dev/sda | grep Temperature
194 Temperature_Celsius     0x0022   100   100   000    Old_age   Always       -       43 (Lifetime Min/Max 20/47)

Да, да - это банальная температура работы жесткого диска. Как видно, в моем случае 
отключение системы энергосбережения hdd (а настройками мы именно отключили эту систему) 
не привело к перегреву диска - текущее значение 43 вполне укладывается в рамки 20..47. Но 
если у вас слабый или неисправный кулер, высокооборотистый диск или жаркий климат - 
температура работы жесткого диска может вырасти и стать не менее губительной для винта, 
чем частые парковки головки. Что делать в этих случаях - не знаю, не встречал, но, по 
всей видимости придется искать компромисы и перестраивать систему "под себя". Файлы, 
которые помогут в решении таких вопросов, указаны выше.

== Заключение ==

Путем несложных настроек мне удалось решить вопросы с сохранностью моего винта, и, я 
надеюсь, этот опыт поможет еще кому-то. 

К сожалению пока мне не удалось в полной мере настроить карточку GeForce 9300 GS, режим 
stamina, спящий и ждущий режимы и яркость дисплея, но, если это получится, я обязательно 
об этом напишу.

== Примечания ==

* Такая же проблема обнаружилась в Fedora 9, Fedora 10. Решилась прописыванием 

/sbin/hdparm -B 254 /dev/sda в файл rc.local