2008-06-02

hibernate под линухой

как делается саспенд в оперативу я уже описал здесь
чем лучше хибернейт? он не чувствителен к потере питания. а отключение питания при обычном саспенде приведет к потере всех данных находившихся в оперативы. здесь и плюсы - надежность, и минусы - намного медленнее, ведь надо сохранить оперативу на веник, +время загрузки ядра.

что для этого надо:
1) ядро 2.6

2) опции ядра:
Power management options → <*>Power management support (CONFIG_PM)
Power management options → <*>Software Suspend (CONFIG_SOFTWARE_SUSPEND)
Power management options → [/dev/resume_partition]Default resume partition (CONFIG_PM_STD_PARTITION)
здесь надо указать раздел свопа - именно на него будет сохранятся содержимое оперативы

3) настроить граб, например так:
timeout 5
#выбор по умолчанию с помощью симлинка
default saved

#основная система
title Gentoo
root (hd0,0)
kernel /vmlinuz panic=5 root=/dev/sda2
savedefault

#для просыпания после хибернейта
title Gentoo-resume
root (hd0,0)
kernel /vmlinuz panic=5 root=/dev/sda2 resume=/dev/sda3
savedefault

разница - параметр resume=/dev/sda3 - он указывает ядру на тот самый своп-раздел на который мы провели хибернейт

4) маленький скриптик который собственно выполнит переход в хибернейт
можно конечно обойтить этими командами:
echo shutdown > /sys/power/disk; echo disk > /sys/power/state

но тут может быть много побочных эффектов с иксами и видеопамятью (хотя мне было лень проверять :)). поэтому я немного модифицировал скрипт от саспенда:
#!/bin/bash

ID=`lspci | grep VGA | awk '{print $1}' | sed -e 's@00000:@@' -e 's@:@/@'`

TMP_FILE=`mktemp /var/tmp/video_state.XXXXXX`
trap 'rm -f $TMP_FILE' 0 1 15

chvt 1

cat /proc/bus/pci/$ID > $TMP_FILE

# здесь я переключаю граб на загрузку в режиме просыпания
/sbin/grub-set-default 1

# собственно хибернейт
echo shutdown > /sys/power/disk; echo disk > /sys/power/state

# восстановления умолчательного пункта загрузки
/sbin/grub-set-default 0

cat $TMP_FILE > /proc/bus/pci/$ID

chvt 7

rm -f $TMP_FILE

вуаля. завелось и работает :)

Немає коментарів: