Pull to refresh

Использование HDAPS в ноутбуках ThinkPad под Linux когда это необходимо

Reading time 5 min
Views 4.1K

Вместо введения


Став относительно недавно счастливым обладателем ноутбука Lenovo ThinkPad T410, моим первым
политическим решением стала смена государственного устроя — установка удобного для меня Linux в
качестве основной операционной системы. Посланником, несущим доброе и светлое, был выбран дистрибутив Debian Testing (Squeeze).

Согласитесь, что мало смысла покупать ноутбук бизнес-класса и не использовать хотя бы на максимум все его возможности.

HDAPS


Среди множества не только интереснейших и полезнейших плюшек, предоставляемых ThinkPad'ами есть одна о которой и пойдет ниже речь. Имя ей — HDAPS (Hard Drive Active Protection System; активная система защиты жесткого диска). Принцип ее работы подобен автомобильным подушкам безопасности, срабатывающих при аварии. На материнской плате ноутбука присутствует микрочип, контролирующий внезапное ускорение корпуса компьютера. Например, падение ноутбука. При возникновении такой ситуации система мгновенно блокирует головку жесткого диска. Когда система возвращается в прежнее, более спокойное, состояние, винчестер запускается в нормальном режиме.


Возможность реагирования на такие события позволяет избежать поломки жесткого диска при падениях или просто встрясках. Но самое главное, конечно, предотвращает потерю данных.

HDAPS не является уникальным решением Lenovo (IBM) на рынке вычислительной техники. Похожие или даже более совершенные плюшки предоставляются другими крупными производителями ноутбуков. Например, SMS (Sudden Motion Senser) от Apple или FFS (Free Fall Sensor) от Dell [0].

В Linux тоже нет проблем


HDAPS работает в Windows что есть «из коробки». В Linux ситуация несколько иная: там наша плюшка тоже будет работать. Но по проверенной временем традиции только после пары безобидных и несильных ударов напильником.

В Сети есть безумно прекрасный и полезный сайт, являющийся просто кладезем информации по вопросам настройки ThinkPad в Linux — ThinkWiki [1]. Если возникает вопрос по ThinkPad, то с вероятностью ~85%, самый актуальный ответ на него можно найти именно на ThinkWiki. Там же присутствует замечательная статья «How to protect the harddisk through APS» [2], подробно рассказывающая что именно требуется сделать, чтобы HDAPS заработал в Linux: скомпилировать пару модулей и установить волшебного демона. После этого система защиты HDD начнет работать. Всегда и везде.

Делаем еще мудрее


Но мы люди рациональные. Зачем такой полезной системе работать даже тогда, когда компьютер не только стоит на столе, но и еще подключен к источнику питания. HDAPS имеет смысл включать только когда ноутбук начинают использовать в его основном качестве — мобильного компьютера; перенося во включенном с места на место состоянии. Тогда, когда риск падения ноутбука с какой-либо высоты достаточно высок. А в остальных случаях можно просто выключать нашу подсистему.

Шаг 1: Определяем источник питания

Для того, что бы выполнять то или иное действие, когда у ноутбука меняется источник питания, необходимо воспользоваться возможностями пакета pm-utils, установленного по-умолчанию в большинстве дистрибутивов Linux. Для этого кладем в /etc/pm/power.d вот такой файлик hdaps с установленным правом исполнения (chmod +x /etc/pm/power.d/hdaps):
  1. #!/bin/sh
  2.  
  3. HDAPS_MODULES="thinkpad_ec tp_smapi hdaps"
  4. HDAPSD_INIT_SCRIPT=/etc/init.d/hdapsd
  5. MODPROBE=/sbin/modprobe
  6. RMMOD=/sbin/rmmod
  7.  
  8. case "$1" in
  9.     ### CASE: Work on battery 
  10.     true)
  11.         echo "Enabling HDAPS"
  12.  
  13.         for module in $HDAPS_MODULESdo
  14.             $MODPROBE $module
  15.         done
  16.  
  17.         $HDAPSD_INIT_SCRIPT start
  18.         ;;
  19.  
  20.     ### CASE: Work on AC-adapter
  21.     false)
  22.         echo "Disabling HDAPS"
  23.  
  24.         $HDAPSD_INIT_SCRIPT stop
  25.  
  26.         ### NOTE: modules should be unloaded in the reverse order
  27.         for module in `echo $HDAPS_MODULES | tac -s' '`do
  28.             $RMMOD $module
  29.         done
  30.         ;;
  31. esac
  32.  

Когда меняется источник питания (батарея или адаптер), по очереди вызываются скрипты, расположенные в /etc/pm/power.d. Так очередь доходит и до нашего кода. Каждый скрипт вызывается с одним аргументов: true или false. Если true, значит наш ThinkPad перешел на режим работы от батареи; следовательно нам необходимо активировать HDAPS. Для этого мы с помощью modprobe подгружаем требуемые для подсистемы модули (aka «драйвера» без которых ничего не взлетит) и запускам демон hdapsd. Если же компьютер перешел на питание от адаптера, наш скрипт hdaps получает в качестве аргумента false. В таком случае все предыдушие действия необходимо повторить в обратном порядке, чтобы приостановить HDAPS.

Шаг 2: Отключаем безусловную автозагрузку HDAPS


Так как скрипты из /etc/pm/power.d вызываются всегда при включении/пробуждении ноутбука, то нет смысла безусловно загружать HDAPS каждый раз, чтобы буквально через пару секунд его отключить с помощью нашего скрипта. Для отключения автозагрузки достаточно:
1. Удалить из /etc/modules список зависимых модулей (thinkpad_ec, tp_smapi, hdaps);
2. Отключить автостарт демона hdapsd: update-rc.d -f hdapsd remove.

Результат


HDAPS теперь работает только когда это действительно нужно. Для «чистой» проверки достаточно перезагрузить компьютер и попробовать отключить адаптер от ноутбука: должен измениться список загруженных модулей (lsmod + grep) и обновиться список запущенных процессов (ps -aux + grep).

UPD: Естественно, данная инструкция отнюдь не обязательна к исполнению всем владельцам ThinkPad с Linux на борту. Если существует немаленький риск, что ноутбук может совершить стремительный полет в направлении к полу будучи подключенным к адаптеру, то имеет смысл оставить настройки HDAPS «как есть».

Литература


  1. [0] Active Hard Drive Protection, en.wikipedia.org/wiki/Active_hard_drive_protection
  2. [1] ThinkWiki, thinkwiki.org
  3. [2] How to enable HDAPS, www.thinkwiki.org/wiki/How_to_protect_the_harddisk_through_APS
Tags:
Hubs:
+32
Comments 16
Comments Comments 16

Articles