Журнал LinuxFormat - перейти на главную

LXF171:Кон­тро­ли­руйте отход ко сну и побудку своей сис­те­мы

Материал из Linuxformat
Перейти к: навигация, поиск

Ре­жи­мы сна: Под кон­тро­лем

Нейл Бот­вик научит вас сде­лать нечто поинтереснее, чем тупо вы­клю­чить свой ком­пь­ю­тер по окон­ча­нии ра­бо­ты. [[Файл: Bothwick opt.png |left | thumb|100px|Наш эксперт. У Ней­ла Бот­ви­ка по ком­пь­ю­те­ру в ка­ж­дой ком­на­те, но по со­об­ра­же­ни­ям безо­пас­но­сти он ни за что не ска­жет вам, где на­хо­дит­ся цен­траль­ный сер­вер.]] Не­сколь­ко лет на­зад по­пу­ляр­но бы­ло ут­вер­жде­ние, что ком­пь­ю­те­ру луч­ше ра­бо­тать 7/24. Пред­по­ла­га­лось, что тер­ми­че­­ский и ме­ха­ни­че­­ский стресс от вклю­че­ния сис­те­мы и рас­кру­чи­ва­ния дис­ков на­мно­го боль­ше, чем от круг­ло­су­точ­ной ра­бо­ты. Это, воз­мож­но, ак­ту­аль­но и сей­час, но дан­ная ре­ко­мен­да­ция поя­ви­лась, ко­гда ком­пь­ю­те­рам тре­бо­ва­лось на­мно­го мень­ше энер­гии и она бы­ла на­мно­го де­шев­ле. А еще есть во­прос оператив­но­сти. Ком­пь­ю­те­ры за­гру­жа­ют­ся на­мно­го бы­ст­рее, чем рань­ше, и все рав­но ос­та­ет­ся при­лич­ная за­держ­ка от мо­мен­та вклю­че­ния до мо­мен­та, ко­гда мож­но при­сту­пить к ра­бо­те. Пе­ре­вод ком­пь­ю­те­ра в спя­щий ре­жим бу­дет оз­на­чать, что он на­мно­го бы­ст­рее оч­нет­ся, ко­гда он сно­ва вам по­на­до­бит­ся, и при этом вы бу­де­те зна­чи­тель­но эко­но­мить элек­тро­энер­гию.

Стан­дарт ACPI оп­ре­де­ля­ет ряд спя­щих ре­жи­мов, ну­ме­руя их от S0 до S5, и этот но­мер опи­сы­ва­ет со­стоя­ние ком­пь­ю­те­ра. S0 — нор­маль­ная ра­бо­та, или со­стоя­ние бодр­ст­во­ва­ния. S5 — вы­клю­чен, но на ма­те­рин­скую пла­ту все рав­но по­да­ет­ся пи­та­ние; это со­стоя­ние, в ко­то­рое вхо­дит ком­пь­ю­тер при вы­клю­че­нии или удер­жа­нии на­жа­той кноп­ки пи­та­ния, но без от­клю­че­ния от се­ти уст­рой­ст­ва пи­та­ния. Нас ин­те­ре­су­ют S3 и S4. S3 име­ну­ет­ся Standby [Ожи­да­ние], Sleep [Сон] или Suspend to RAM [При­ос­та­нов­ка в ОЗУ], в за­ви­си­мо­сти от тер­ми­но­ло­гии, при­ня­той ОС; мы бу­дем на­зы­вать этот ре­жим Suspend. Как и сле­ду­ет из на­зва­ния, со­стоя­ние ком­пь­ю­те­ра со­хра­ня­ет­ся в ОЗУ, пи­та­ние ко­то­ро­го ос­та­ет­ся под­клю­чен­ным. Пи­та­ние CPU и дру­гих уст­ройств от­клю­че­но. Это са­мый бы­ст­рый спо­соб от­пра­вить ком­пь­ю­тер в спя­щий ре­жим и про­бу­дить его сно­ва, по­сколь­ку ра­бо­та­ет толь­ко ОЗУ. Недос­та­ток в том, что не­кая энер­гия все же по­треб­ля­ет­ся для снаб­же­ния ОЗУ. Для на­столь­но­го ПК это нор­маль­но; но ес­ли на­дол­го ос­та­вить в та­ком со­стоя­нии но­ут­бук, ба­та­рея по­сте­пен­но раз­ря­дит­ся и вы по­те­ряе­те свои дан­ные, и при­дет­ся вам да­вать ко­ман­ду fsck для сво­его же­ст­ко­го дис­ка при сле­дую­щей за­груз­ке.

S4, име­нуе­мое обыч­но Hibernate [Спяч­ка] или Suspend to disk [При­ос­та­нов­ка на дис­ке], за­пи­сы­ва­ет со­стоя­ние па­мя­ти и CPU на же­ст­кий диск пе­ред вы­клю­че­ни­ем. Это доль­ше, но по­сле вы­клю­че­ния ком­пь­ю­тер по­треб­ля­ет столь­ко же энер­гии, что и в со­стоя­нии S5 — поч­ти ни­че­го. Ес­ли вы хо­ти­те знать, за­чем тут во­об­ще пи­та­ние, от­вет та­кой: ма­те­рин­ской пла­те нуж­на энер­гия, что­бы раз­бу­дить его по­сле на­жа­тия на кноп­ку пи­та­ния, че­рез сеть или из BIOS. Мы бу­дем на­зы­вать этот ре­жим Hibernate. Же­лая вы­звать ре­жим Suspend или Hibernate, вы мо­же­те сде­лать это, на­пи­сав псев­до-файл на /sys/power/state, ис­поль­зуя зна­че­ния mem или disk.

echo “mem” >/sys/power/state

echo “disk” >/sys/power/state

Для это­го на­до быть су­пер­поль­зо­ва­те­лем-root, и тем из вас, кто ис­поль­зу­ет sudo, при­дет­ся при­бег­нуть к не­кой хит­ро­сти, что­бы сде­лать это от име­ни root. Обыч­ное

sudo echo “mem” >/sys/power/state

не сра­бо­та­ет, вы­дав ошиб­ку от­ка­за в дос­ту­пе, по­сколь­ку при за­пус­ке поль­зо­ва­те­лем ко­ман­ды про­изош­ла ошиб­ка пе­ре­ад­ре­са­ции. Ис­поль­зуй­те

sudo sh -c “echo mem >/sys/power/state”

Про­бу­ж­де­ние

При по­гру­же­нии в сон со­стоя­ние ва­шей сис­те­мы со­хра­ня­ет­ся в пер­вом же дос­туп­ном раз­де­ле подкачки [swap]. Что­бы за­но­во за­гру­зить­ся, вы долж­ны по­ка­зать яд­ру, где хра­нит­ся об­раз во­зоб­нов­ле­ния при пе­ре­за­груз­ке, до­ба­вив

resume=/dev/sdaN

в оп­ции яд­ра ва­шей про­грам­мы за­груз­ки. Вы мо­же­те или соз­дать от­дель­ную оп­цию в ме­ню за­груз­ки для во­зоб­нов­ле­ния ра­бо­ты, или до­ба­вить ее к на­строй­кам по умол­ча­нию. Это безо­пас­но, по­то­му что ес­ли раз­дел swap не со­дер­жит дей­ст­вую­ще­го об­раза сна — а так и бу­дет, ес­ли вы ра­нее вы­клю­ча­ли ком­пь­ю­тер — то яд­ро про­иг­но­ри­ру­ет эту оп­цию и за­гру­зит­ся как обыч­но. Аль­тер­на­ти­ва — ес­ли вы ком­пи­ли­руе­те соб­ст­вен­ное яд­ро, то мо­же­те про­пи­сать раз­дел во­зоб­нов­ле­ния в раз­де­ле Управ­ле­ние энер­го­по­треб­ле­ни­ем [Power managemen] в раз­де­ле Во­зоб­нов­ле­ния по умол­ча­нию [Default resume partition]. Вы так­же мо­же­те вы­звать пол­ную пе­ре­за­груз­ку по­сле сна, до­ба­вив в оп­ции яд­ра noresume, од­на­ко это чре­ва­то про­бле­ма­ми, по­сколь­ку ком­пь­ю­тер не вы­клю­чал­ся ра­нее долж­ным об­ра­зом, бу­ду­чи вме­сто это­го по­гру­жен в сон.

Вы, на­вер­ное, уже не­до­уме­вае­те, ка­кой вам толк от всех этих под­роб­но­стей, ес­ли мож­но про­сто вы­брать Hibernate или Suspend в ме­ню ра­бо­че­го сто­ла. Ос­нов­ная суть в том, что вы мо­же­те сде­лать не­что боль­шее, чем про­сто по­гру­зить свой ком­пь­ю­тер в сон. Фак­ти­че­­ски, мож­но за­пус­тить лю­бую ко­ман­ду как пе­ред при­ос­та­нов­кой ра­бо­ты, так и по­сле ее во­зоб­нов­ле­ния. Возь­мем в ка­че­­ст­ве при­ме­ра но­ут­бук, ко­то­рым вы поль­зуе­тесь до­ма. Вы во­шли в сис­те­му; воз­мож­но, gpg-agent со­хра­нил в па­мя­ти ва­ши клю­чи, ес­ли вы под­пи­сы­ва­ли поч­ту, вы со­еди­не­ны с бес­про­вод­ной се­тью или, воз­мож­но, смон­ти­ро­ва­ли фай­ло­вую сис­те­му. Итак, вы по­гру­жаете ком­пь­ю­тер в сон, кла­де­те его в сум­ку и иде­те на ра­бо­ту. Как ми­ни­мум, у вас бу­дут за­держ­ки начала ра­бо­ты с ним, по­то­му что се­те­вые фай­ло­вые сис­те­мы не­дос­туп­ны — осо­бо злоб­ст­ву­ет по это­му по­во­ду NFS. В худ­шем слу­чае — ваш но­ут­бук ук­ра­дут, и все дан­ные бу­дут рас­кры­ты. Ес­ли, вме­сто то­го, что­бы ис­поль­зо­вать функ­цию при­ос­та­нов­ки ра­бо­ты ва­ше­го но­ут­бу­ка, вы на­строи­те го­ря­чую кла­ви­шу для за­пус­ка скрип­та, то смо­же­те по­за­бо­тить­ся об этой си­туа­ции. Вот при­мер:

#!/bin/sh

“$(basename $0)” == “suspend” && SLEEP=”mem” || SLEEP=”disk”

# gpg-agents за­бы­ва­ют па­ро­ли, ес­ли им по­слан сиг­нал SIGHUP

pkill -HUP -f ‘gpg-agent --daemon’

# Бло­ки­ров­ка ра­бо­че­го сто­ла

DISPLAY=”:0” su nelz -c slock &

# Раз­мон­ти­ро­ва­ние се­те­вых фай­ло­вых сис­тем

umount -a -t nfs -t cifs

# Пе­ре­вод wicd оффлайн

/usr/share/wicd/scripts/50-wicd-suspend.sh

# Сон или спяч­ка

echo ${SLEEP} >/sys/power/state

# Запустить при про­бу­ж­де­нии

/usr/share/wicd/scripts/80-wicd-connect.sh

Со­хра­ни­те скрипт как /usr/local/bin/suspend и соз­дай­те сим­во­ли­че­скую ссыл­ку на /usr/local/bin/hibernate; та­ким об­ра­зом один скрипт мо­жет ис­поль­зо­вать­ся для обе­их функ­ций в за­ви­си­мо­сти от име­ни, ис­поль­зо­ван­но­го для его вы­зо­ва, то есть как раз то­го, что де­ла­ет пер­вая стро­ка.

Скрипт вы­пол­ня­ет не­сколь­ко про­стых опе­ра­ций: он от­прав­ля­ет SIGHUP в gpg-agent, за­став­ляя сбро­си­ть все хра­ня­щие­ся фра­зы-па­ро­ли; за­тем он бло­ки­ру­ет ра­бо­чий стол (я здесь ис­поль­зую очень про­стой slock, но вы так­же мо­же­те за­пус­тить скрин-сей­вер или функ­цию бло­ки­ров­ки с по­мо­щью вы­зо­ва dbus). За­тем он раз­мон­ти­ру­ет все фай­ло­вые сис­те­мы NFS и Samba, вы­во­дит се­те­вой ре­жим в оф­флайн, по­то­му что мож­но раз­бло­ки­ро­вать из дру­гого мес­та (в этом при­ме­ре ис­поль­зо­ван wicd, но то же са­мое мож­но сде­лать и с по­мо­щью Network Manager), и, наконец, пишет или mem, или disk в /sys/power/state.

В этот мо­мент скрипт вста­ет на пау­зу, по­то­му что ком­пь­ю­тер спит, но по­сле про­бу­ж­де­ния он про­дол­жит свою ра­бо­ту, ко­то­рая в дан­ном при­ме­ре во­зоб­но­вит со­еди­не­ние с лю­бой дос­туп­ной се­тью. Сю­да мож­но под­ста­вить что угод­но, для за­пус­ка лю­бой ко­ман­ды, ко­то­рую вы ни по­же­лае­те, по­сле во­зоб­нов­ле­ния ра­бо­ты. На ра­бо­чем сто­ле, со­вмес­ти­мом с Freedesktop (а боль­шин­ст­во из них имен­но та­ковы), вы мо­же­те за­бло­ки­ро­вать скрин-сей­вер с по­мо­щью та­кой ко­ман­ды:

dbus-send –dest=org.freedesktop.ScreenSaver --type=method_call /ScreenSaver org.freedesktop.ScreenSaver.Lock

Эта ко­ман­да, так же, как и в при­ве­ден­ном вы­ше при­ме­ре со slock, долж­на быть за­пу­ще­на, ко­гда поль­зо­ва­тель за­пус­ка­ет ра­бо­чий стол. Вы­зов скрип­та suspend с по­мо­щью го­ря­чей кла­ви­ши, оп­ре­де­лен­ной на ра­бо­чем сто­ле — имен­но тот слу­чай, но ес­ли вы ис­поль­зуе­те acpid, то нуж­но на­стро­ить пе­ре­мен­ную DISPLAY и ука­зать поль­зо­ва­те­ля, за­пус­каю­ще­го ко­ман­ду (так как acpid за­пус­ка­ет ко­ман­ду от име­ни root), та­ким об­ра­зом:

DISPLAY=:0 su username -c dbus-send --dest=org.freedesktop.ScreenSaver --type=method_call /ScreenSaver org.freedesktop.ScreenSaver.Lock

Есть и дру­гие спо­со­бы раз­бу­дить спя­щую ма­ши­ну. В боль­шин­ст­ве BIOSов есть оп­ция по­буд­ки ком­пь­ю­те­ра в за­дан­ное вре­мя. Это оз­на­ча­ет, что вы мо­же­те, на­при­мер, ос­та­вить свой сер­вер спать но­чью, но раз­бу­дить его для ра­бо­ты со скрип­та­ми ре­зерв­но­го ко­пи­ро­ва­ния, ко­гда дру­гие ком­пь­ю­те­ры бу­дут за­пла­ни­ро­ва­ны на из за­пуск.

Wake-on-LAN

Бо­лее удо­бен Wake-on-LAN, ко­то­рый по­зво­ля­ет раз­бу­дить спя­щий ком­пь­ю­тер че­рез сеть. На ком­пь­ю­те­ре, ко­то­рый вы по­гру­зи­ли в сон, не нуж­но де­лать ни­че­го, кро­ме как убе­дить­ся, что Wake-on-LAN вклю­че­но в на­строй­ках BIOS. На дру­гом ком­пь­ю­те­ре в се­ти ус­та­но­ви­те па­кет wakeonlan и раз­бу­ди­те ком­пь­ю­тер ко­ман­дой

wakeonlan -i 192.168.1.255 aa:bb:cc:dd:ee:ff

где IP-ад­рес — это ад­рес ве­ща­ния для ва­шей се­ти (обыч­но это пер­вые три циф­ры, об­щие для ва­шей се­ти, за ко­то­ры­ми сле­ду­ет 255), а раз­де­лен­ная двое­то­чия­ми стро­ка — MAC-ад­рес адап­те­ра Ethernet на том ком­пь­ю­те­ре, ко­то­рый вы на­ме­ре­ны раз­бу­дить. Это ра­зо­шлет «вол­шеб­ный па­кет» Wake-on-LAN всем ком­пь­ю­те­рам в ад­рес­ном диа­па­зо­не, но к жиз­ни вер­нет­ся толь­ко один, с тем са­мым MAC-ад­ре­сом. Итак, вы мо­же­те дать выспаться одному из ком­пь­ю­теров в сво­ей LAN, да­же ес­ли он потом по­на­до­бит­ся дру­го­му ком­пь­ю­те­ру, по­то­му что этот другой ком­пь­ю­тер смо­жет при не­об­хо­ди­мо­сти сам его раз­бу­дить. |

Персональные инструменты
купить
подписаться
Яндекс.Метрика