Linux и HDD WD Caviar Green
Предыстория: муки и радости
Всем хороши были бы появившиеся лет этак пять назад диски WD Caviar Green, если бы не два "но". Совсем как в старой деревенской присказке: "Девка, в опчем, не плохая. Только ссытся. И глухая". Ну да ничего, – думал я, покупая в 2011-м (до известного наводнения) за каких-то 2000 руб терабайтный WDC WD10EARS-00Y5B1, – нынче наука и не с такими проблемами справляется. Зато дешевый, тихий, холодный, боольшой!..
Кто не в курсе, две проблемы назывались так: "Advanced Format" и "intellipark".
О первой теперь уже подзабыли, а она некоторое время казалась чуть ли не самой сложной. Но в ядро Linux быстро внесли необходимый патч, и забубённые танцы с переразбитием диска на 4-Кбайтные сектора ушли в область преданий.
А вот вторая проблема осталась и по сей день. Фирма Western Digital держится за это изобретение как черт за грешную душу, или, говоря культурно, с упрямством, достойным лучшего применения.
Суть intellipark заключается в том, что в микропрограмму диска вшит алгоритм парковки головок при простое (отсутствии операций чтения-записи), и интервал для этой "интеллектуальной" парковки выбран безобразный – 8 секунд. Это при том, что сама Western Digital даёт гарантию наработки своих "Гринов" в 300 тысяч парковок.
Правда, в своей базе знаний фирма заявляет: "The increase in load/unload cycles for a typical desktop user are within design margins (drive has been validated to 1 million load/unload cycles without issue)".("Рост циклов парковки для типичного пользователя десктопа находится в предусмотренных пределах (диск был проверен на миллион циклов без проблем")". Но гарантирует почему-то не миллион, а 300 тысяч. И потом, когда крупные фирмы начинают рассуждать о "типичном юзере", сразу попахивает как-то нехорошо... Всё это еще осложняется постоянной записью логов, и, как ни парадоксально, такой замечательной штукой, как большой буфер диска (у моего WD10EARS целых 64 Мб). Как примерно работает эта гремучая смесь из хороших (каждая по отдельности) вещей, пояснил на Хабре Алексей Шипилёв в статье "WD Green Caviar + Linux = убей свой диск!" в 2010-м году. Не только в этой статье, но и в комментах к ней, кстати, приводятся некоторые реальные цифры и факты, советую почитать.
Но вернёмся к предистории.
Цитата из S.M.A.R.T моего терабайтника на второй день после покупки и установки в далеком уже июле 2011-го:
193 Load_Cycle_Count (193-й атрибут, количество парковок головок диска) – 799
Те, кто в школе учился (а не только занимался черт знает чем), легко прикинут в уме: получается круглым счетом 42 парковки в час. Иными словами, если компьютер будет у меня работать по 12 часов в день, диск выработает гарантированные 300 тысяч парковок примерно за 1,6 года!
Естественно, я не собирался с этим мириться, и взял свои меры. Нашел где-то образ FreeDos (к сожалению, теперь уж не помню где), взял у WD фирменную утилиту wdidle3 (тогда еще старой версии, которая не обновляла микропрошивку, как нынешняя, а позволяла выставить свой таймаут или совсем отключить его), скопировал ее на флешку с FreeDos, выключил компьютер, отключил физически остальные жесткие диски, включил компьютер, загрузился с флешки во FreeDos и попытался изменить таймаут на какой-то бóльший. Интересно отметить, что в отличие от Алексея Шипилёва, у меня попытка выставить бóльший таймаут не сработала, а полное его отключение, наоборот, прошло успешно. Т.е. включение/выключение компа, отключение/подключение остальных HDD и прочие манипуляции я проделал дважды. Заметьте себе этот факт, чтобы почувствовать разницу с программой idle3-tools, о которой я буду писать ниже.
Короче, безумные парковки прекратились, и сегодня, спустя почти 3 года, данные S.M.A.R.T этого диска выглядят так:
193 Load_Cycle_Count (193-й атрибут, количество парковок головок диска) – 2081
То есть примерно 0,14 парковок в час, или одна парковка в 7 часов.
Я вовсе не утверждаю, что это замечательное идеальное решение. Как говорит WD, из-за редкой парковки увеличивается аэродинамическое сопротивление механизму, который, следовательно, всё равно изнашивается, хотя и по-другому. И кроме того, и без WD ясно, что растет энергопотребление и, наверняка, нагрев диска, а это один из самых страшных его врагов. Что лучше, а что хуже – этим вопросом как-то не особо интересовались ребята, скопом накинувшиеся на одну-единственную проблему – задавить ненавистную фичу intellipark. Зло, однако, не в ней самой, а в ее реализации. Да и сама фирма косвенно признала 8-секундный таймаут ошибкой, – хотя бы выпуском утилитки wdidle3, которую она к тому же продолжает обновлять.
История: хорошие новости
Начну немножко странно: с вырывания редеющих волос и посыпания тыквы пеплом.
Дорогие друзья! Как важно уметь хорошо и упорно гуглить! Умей я в 2011 году, я бы вышел на программу idle3-tools еще тогда (версия 0.9 помечена 8-м февраля 2011, следующая, 0.91 – 31 мая того же года, т.е. за месяц-полтора до приобретения WD10EARS).
Но увы, не я один такой. Русская информация о idle3-tools появилась на Хабре лишь в 2013 году. А до сайта networker.by с записками "простого белорусского админа" со статьей 2012 г. на эту же тему я не добрался.
Что ж, лучше поздно, чем никогда.
Страница программы на sourceforge.net сообщает:
Далее идет грозное предупреждение:
Но ведь это и ежу понятно, не правда ли? Любые манипуляции, связанные с низкоуровневым доступом к устройствам, как минимум опасны, или даже страшно опасны. А то фирменная wdidle3 не опасна, можно подумать! Поэтому делаем своевременно бэкапы, господа.
Далее идёт описание немногих опций утилиты:
Синтаксис: idle3ctl <опция> устройство;
запущенная без опций или с опцией -g, выводит "сырое" значение текущего таймаута;
с опциями -g100 и -g103 выводит таймаут в форматах программы wdidle3 версий v1.00 и v1.03 соответственно;
с опцией -s<значение> устанавливает таймаут согласно значению.
Значение может быть целым числом от 1 до 255. Таймер устанавливается в 0.1 сек для диапазона 1-128, и в 30 сек для диапазона 129-255;
(Это непросто для понимания, поэтому приведу оригинальный текст из мана:
-s<value>
----------set idle3 timer raw value. Value must be an integer between 1 and 255. The idle3 timer is set
----------in 0.1s for the 1-128 range, and in 30s for the 129-255 range.)
с опцией -d отключает таймер;
с опцией --force действует даже если диски WD не обнаружены (этой опции я боюсь и применять ее не советую);
с опцией -v выводит массу информации, малоинтересной для смертных юзеров;
И наконец, вспомогательные опции -h (хелп), -V (версия) и даже -l (лицензия).
Брать утилиту следует на этой странице. Кладем ее в удобную для нас директорию, распаковываем, скажем, так:
или даже проще :
и компилируем обычным путем с помощью make, запущенной в каталоге распакованной утилиты:
make
После почти мгновенной компиляции получим во все той же директории три новых файла, главный для нас idle3ctl будет исполняемым. Проверим его командой
он должен откликнуться
Как поступить дальше, зависит от ваших целей. Если вам нужно использовать утилиту один раз (а к одному диску ее можно применить лишь однажды! Переиграть раз сделанные изменения не удастся), нет смысла инсталлировать ее в систему, достаточно запустить как любой скрипт прямо на месте:
для выяснения действующего таймаута
и, например, для отключения таймера
или выставления бóльшего интервала
После этого нужно будет выключить компьютер, подождать немного (имейте совесть, комп хоть и железный, но не бесчувственный) и затем включить.
Опять запускаем
и смотрим, получилось ли.
Я всё это испробовал на себе и на стареньком WD5000AADS, у которого за душой уже 272 066 парковок. Команда на отключение таймера сработала без вопросов, после включения компа утилита показала
Если же решите инсталлировать idle3ctl, то нет ничего проще:
А теперь сравните всю эту, в общем-то, плёвую работу с той страстью, о которой я написал по поводу wdidle3 в начале поста. Чувствуете разницу!?
Так что теперь, задумавшись о покупке нового HDD, полагаю, мы с вами не будем подобно впервые рожающей женщине кричать: "Да чтобы еще раз его подпустить – ни за что! Никогда!" Такое малодушие не украшает серьезного юзера, тем более линуксоида. Ведь диски WD Caviar Green – действительно тихие, прохладные, боольшие и опять недорогие.
Несколько слов об hdparm
Владельцы ноутбуков с самого начала этой заварушки с intellipark уповали на hdparm. Мол, стóит скомандовать
и дело сделано. Однако выяснилось, что далеко не всегда это срабатывает. Вроде бы надежнее ручками править /etc/hdparm.conf. Найти в нем строку с apm_battery, раскомментировать ее и выставить значение (127, как там и стоит, чтобы увеличить таймаут, или 254, чтобы совсем отключить парковки). Не знаю, не проверял лично (нет ноута), но есть свидетельства, что действует.
Кроме того, в новых версиях hdparm появилась опция -J. С ее помощью можно не только посмотреть текущий таймаут:
но и попытаться, якобы, его изменить. Почему "якобы"? Во-1-х, man hdparm предупреждает, что работа этой опции еше сырая ("реализация в hdparm не так совершенна, как исходная официальная программа WDIDLE3.EXE, даже при том, что это, действительно, кажется, работает на небольшом количестве нескольких дисков.") Во-2-х, при попытке запустить
программа попыталась сильно меня напугать:
и ей это удалось. Поставить флаг "пожалуйста, грохните мой диск" я оказался морально не готов.