Настройка Hibernate с использованием Swap File
- Автор:
- Марат Ахин
Здесь приведен личный опыт автора по настройке гибернации на диск. В данном примере рассматривается гибернация на своп-файл, но кардинальных отличий от случая своп-раздела (в настройке именно самой гибернации) нет.
Исходные данные
Железо
IBM Lenovo X201i
Софт
kernel 2.6.34(возможно, способ будет работать и на более младших версиях)uswsusp 0.8hibernate-script
Создание свопа
Создание файла со свопом тривиально:
# dd if=/dev/zero of=/swapFileName bs=1M count=1024 # mkswap -L swapLabel /swapFileName
Все -- теперь Вы стали обладателем замечательного файла со свопом размера 1024 Mb
Для того, чтобы подключить своп к системе, есть два варианта. Первый -- это подключать его динамически при помощи команд:
# swapon /swapFileName # swapoff /swapFileName
Второй -- это воспользоваться классическим fstab в виде:
... /swapFileName swap swap defaults 0 0 ...
Зачем использовать первый способ, когда есть второй? В качестве одного из примеров можно привести своп на SSD-диске, который некоторые очень не любят использовать дабы продлить жизнь SSD-шки. И поэтому они подключают своп только на время гибернации и сразу же отключают его после выхода из нее.
Но вне зависимости от того, какой способ используете Вы, для гибернации достаточно самого наличия свопа на момент гибернации -- способ подключения на настройки гибернации не влияет.
Настройка гибернации
После установки пакетов uswsusp и hibernate-script (второй пакет ставится из AURов)
необходимо сделать следующее.
Настройка uswsusp
Выполняется в файле /etc/suspend.conf. У меня он выглядит следующим образом:
snapshot device = /dev/snapshot resume device = /dev/sda2 resume offset = 655360 compress = y early writeout = y shutdown method = shutdown
Из интересного можно отметить параметр resume offset, в котором и заключается разница между
свопом на разделе и свопом в файле. В первом случае этот параметр можно не указывать, т.к.
указания раздела достаточно для того, чтобы при восстановлении из гибернации найти этот самый
раздел и зачитать из него слепок системы.
Во втором случае кроме самого раздела нам необходимо знать, а где же начинается тот самый файл со свопом, -- это и задается через смещение от начала раздела. Как его узнать? Очень просто:
# swap-offset /swapFileName
Во многих источниках говорится, что для поддержки гибернации на своп-файл необходима специальная
версия ядра, однако на версии 2.6.34 все работает Out of the Box. Идем дальше.
Генерация загрузочного образа
После настройки uswsusp необходимо как-то дать понять ядру, что теперь надо учитывать
возможность выхода из гибернации при загрузке системы. Для этого мы добавляем хук uresume
в /etc/mkinitcpio.conf:
HOOKS="base udev autodetect pata scsi sata uresume filesystems"
Хук обязательно должен стоять перед хуком filesystems, но после хуков, связанных с интерфейсами
дисков. После этого делаем:
# mkinitcpio -p kernel26
и получаем загрузочный образ с поддержкой гибернации.
Настройка hibernate-script
По умолчанию hibernate-script использует TuxOnIce, а мы хотим использовать uswsusp. Для
наставления на путь истинный скажем ему об этом в файле /etc/hibernate/hibernate.conf:
TryMethod ususpend-disk.conf TryMethod ususpend-ram.conf
Дополнительные настройки будут описаны ниже.
Проверка
Если теперь Вы выполните команду:
# hibernate
то с большой долей вероятности Ваш ноутбук успешно уйдет в гибернацию. У меня получилось, что и возвращение из гибернации прошло не менее успешно.
Если Вы хотите указать конкретный вариант гибернации ноутбука, то необходимо вызывать команду следующим образом:
# hibernate -F /etc/hibernate/ususpend-disk.conf # hibernate -F /etc/hibernate/ususpend-ram.conf
В первом случае мы выполняем гибернацию, во втором -- переходим в ждущий (спящий) режим.
На этом первичную настройку гибернации можно считать оконченной -- как я уже отметил, в моем случае она заработала Out of the Box и не потребовала дополнительных плясок с бубном.
Если Вам не повезло и при попытке гибернации или выхода из нее у Вас возникают проблемы, могу посоветовать обратиться в соответствующие вики и почтовые рассылки -- скорее всего, Вы довольно быстро сможете найти комбинацию параметров, которая позволит Вам добиться стабильной работы гибернации.
Хитрости
Можно отметить следующие дополнительные моменты при работе с гибернацией:
-
После выхода из гибернации отваливается от ACPI кнопка включения ноутбука. После продолжительной борьбы с этим явлением и перебора множества вариантов решения было решено придавить это кирпичом и после гибернации выключать ноут через
sudo halt. -
Для отключения/подключения сетей при гибернации в случае использования
netcfgдостаточно добавить в/etc/hibernate/common.confдва хука:OnSuspend 24 netcfg all-suspend OnResume 24 netcfg all-resume
-
Для того, чтобы ноутбук красиво мигал лампочкой при входе в гибернацию, надо добавить в
/etc/hibernate/common.confопцию:IbmAcpi Yes
