Ubuntu/hibernace

Jak používat klasifikační nálepkuTato stránka je součástí projektu:
Příslušnost: všeobecná

Jak zprovoznit hibernaci u Ubuntu:

V Ubuntu 12.04 a dalších byla defaultně odebraná možnost hibernace (u strojů, které nejsou oficiálně podporována) a to z toho důvodu, že při špatném nastavení to může působit problémy nezkušeným uživatelům.

Jak tuto možnost obnovit?

SwapEditovat

Za prvé je nutno mít dostatečně velký swapovací prostor na disku (o něco větší než je velikost operační paměti)

Hibernace z konzoleEditovat

Zkusíme hibernovat příkazem z konzole:

sudo pm-hibernate

Po chvíli by se měl systém hibernovat. Po opětovném spuštění by se měl vrátit do předcházejícího stavu.

Pokud toto funguje, můžeme pokračovat dál:

Defaultní nastaveníEditovat

Může se lišit podle verze Ubuntu:

14.04Editovat

Osvědčilo se mi (xfce):

Vytvoříme soubor:

/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

Do souboru napíšeme:

[Re-enable hibernate by default for login1]
  Identity=unix-user:*
  Action=org.freedesktop.login1.hibernate
  ResultActive=yes

[Re-enable hibernate for multiple users by default in logind]
  Identity=unix-user:*
  Action=org.freedesktop.login1.hibernate-multiple-sessions
  ResultActive=yes

Spustíme:

sudo update-grub

Ve Whisker menu se nám pak vedle možnosti Režim spánku objeví i možnost Hibernace.

18.04 XubuntuEditovat

sudo systemctl hibernate

Počítač se vypne, ale po opětovném spuštění se předchozí relace neobnoví.

Takže zkusím:

sudo apt install uswsusp
Následující dodatečné balíky budou instalovány:
  libx86-1
Následující NOVÉ balíky budou nainstalovány:
  libx86-1 uswsusp

Nepomohlo to, je to stále stejné.

Zkouším jít do Nastavení – Relace a spouštění – Obecné – Automaticky uložit relaci při odhlášení + ptát se při odhlášení; Relace: fvwm: okamžitě

sudo pm-hibernate
pm-hibernate: příkaz nenalezen
sudo apt install pm-hibernate
E: Nelze najít balík pm-hibernate

Takže zkusím:

grep swap /etc/fstab
# swap was on /dev/nvme0n1p5 during installation
-4744-a459-4cd6ebafd151 none            swap    sw              0       0
sudo
cd /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/nvme0n1p5"
update-grub

Voilà – zafungovalo! Teď to ještě přidat do menu:

sudo su
apt-get install pm-utils
xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/logind-handle-lid-switch -n -t bool -s true

Zkusím:

/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
[Disable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Disable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hib\
ernate-ignore-inhibit
ResultActive=yes

Voilà – funguje!

ProblémyEditovat

Ovšem občas se vyskytnou různé problémy = např. při vypínání systému:

Failed deactivating swap
Fixing recursive fault but reboot is needed!

Došel jsem k závěru, že problém může být se swapovací partition, tak jsem ji přeformátoval, ale tím problémy jen přibyly, např. při bootování to zůstane viset na:

Gave up waiting for suspend-resume device
resume: Could not stat the resume device file /dev/disk/by-uuid/a38e8d74-eeae-4744-a459-4cd6ebafd151
Begin: Running /scripts/local-premount

Protože přeformátováním partition se změní její UUID. U normální ext4fs apod. partition zjistím její UUID pomocí dumpe2fs. U swap partition musím použít:

swaplabel

např.:

sudo swaplabel /dev/nvme0n1p5
   LABEL: nvme0n1p5_swap
   UUID:  19c84e7d-7065-40fd-94ff-4e1c7d87c32c

Dohledám, že scripts/local-premount se vyskytují na dvou místech:

  • /etc/initramfs-tools/scripts/
  • /usr/share/initramfs-tools/scripts

A najdu příslušný soubor, na kterém to zůstane viset:

/usr/share/initramfs-tools/scripts/local-premount/resume

Jenže přímo zde se UUID nevyskytuje, nejspíš je v nějaké proměnné. Vygrepuji, že to UUID swapu je v souboru:

/etc/uswsusp.conf
# /etc/uswsusp.conf(5) -- Configuration file for s2disk/s2both
resume device = /dev/disk/by-uuid/a38e8d74-eeae-4744-a459-4cd6ebafd151
compress = y
early writeout = y
image size = 3733221867
RSA key file = /etc/uswsusp.key
shutdown method = platform

Začnu tím, že to v tomto souboru přepíšu. Přebootuji a opět:

Begin: Running /scripts/local-premount ... Resume: Could not stat the resume device file 'a38e8d74-eeae-4744-a459-4cd6ebafd151'
 Please type in the full path name or try again

Tak kde to ještě může být?

# grep -r a38e8d74 * | less
initramfs-tools/conf.d/resume:RESUME=UUID=a38e8d74-eeae-4744-a459-4cd6ebafd151

Aha! Tak tady ten /usr/share/initramfs-tools/scripts/local-premount/resume přečte to UUID. Takže měním.

Ale zpátky k souboru /etc/uswsusp.conf – je možno jej editovat ručně? Co když se ještě někde změnila imagesize apod?

Takže googlím:

sudo dpkg-reconfigure uswsusp

Odsouhlasím přednastavené parametry:

  • Komprimace obrazu algoritmem LZF vytvoří menší obraz, což znamená, že můžete použít menší odkládací oblast. Obecně se také dá říci, že zápis a následné čtení obrazu budou rychlejší, protože jim stačí zapsat resp. přečíst méně dat. Ano
  • Synchronizace odkládacího zařízení může začít hned na začátku zápisu obrazu na toto zařízení. Bylo pozorováno, že na některých počítačích to může urychlit uspávání a také eliminovat efekt „rychlý indikátor postupu a následné dlouhé čekání na fsync“. Ano
  • Zadejte prosím maximální velikost obrazu (v bajtech).
    Tato hranice není pevná -- uswsusp se sice bude ze všech sil snažit limit dodržet, ale pokud to nebude možné, uspí systém i s větším obrazem.
    Zadáte-li hodnotu 0, bude výsledný obraz systému co nejmenší. Ponecháte-li prázdné, použije se zabudovaná hodnota 500MB. Výchozí hodnota představuje 45% operační paměti. Není to maximální hodnota, protože dodatečná volná paměť urychlí uspání a obnovení.
    Preferovaná maximální velikost obrazu: 3733221867
  • Zadejte prosím úroveň logování, kterou má jádro použít pro sledování průběhu nástrojů s2disk/s2both. U běžného jádra se zprávy s vyšší úrovní než 7 obvykle nezobrazují. Logovací úroveň softwarového uspávání:
  • Zadejte prosím úroveň logování, kterou má jádro použít pro zaznamenání ladicích hlášení v případě, že obnovení ze spánku selže. Maximální úroveň logování:
  • Je-li tento parametr nastaven na „restart“, program s2disk počítač nevypne, ale restartuje, což se může hodit pro testování. Při nastavení na „platforma“ se použije optimalizace pro daný hardware (pokud je to možné). Způsob vypnutí:
    • restart
    • platforma
    • vypnutí
  • Pro zvýšení bezpečnosti je možné obraz, který se zapíše na disk, zašifrovat. Při obnovení (a pokud nepoužíváte RSA klíč, tak i při uspání) budete dotázáni na přístupovou frázi. Při použití šifrování bude uspávání a probouzení trvat znatelně déle. Šifrovat obraz?
    • Ano
    • Ne
update-initramfs: deferring update (trigger activated)
Zpracovávají se spouštěče pro balík initramfs-tools (0.130ubuntu3.13) …
update-initramfs: Generating /boot/initrd.img-4.15.0-151-generic

Porovnám s minulou verzí:

 diff uswsusp.conf.002 uswsusp.conf 
> compute checksum = y

Takže teď už by to snad konečně mohlo fungovat.

Související stránkyEditovat

Externí odkazyEditovat