Настройка Hibernate с использованием Swap File

Автор:
Марат Ахин

Здесь приведен личный опыт автора по настройке гибернации на диск. В данном примере рассматривается гибернация на своп-файл, но кардинальных отличий от случая своп-раздела (в настройке именно самой гибернации) нет.

Исходные данные

Железо

  • IBM Lenovo X201i

Софт

  • kernel 2.6.34 (возможно, способ будет работать и на более младших версиях)
  • uswsusp 0.8
  • hibernate-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
    

Внешние ссылки

  • ArchWiki : Swap file
  • ArchWiki : Hibernate with hibernate-script
blog comments powered by Disqus

Options

Tags

  • howto
  • hardware
  • software
  • hibernate
  • suspend

Content view

  • Source

Navigation

  • Index
  • Blog
  • All pages
  • Tags
  • Mercurial repo

Search page names

nqw powered

Creative Commons License Copyright © 2008-2010 spb-archlinux Group. Материалы вики доступны по лицензии Creative Commons.