Linux jest prosty? Włączenie hibernacji na Ubuntu

26-gru-2021

No właśnie, czy Linux jest prosty? Podejrzewam, że operacja wyrostka robaczkowego jest prosta, ale tylko dla doświadczonego chirurga. Jeśli bierzesz się za cos po raz pierwszy, to będzie trudno. Spróbuję tu opisać kilka rzeczy, które powinne być proste, a tymczasem… oceń sam/a

Poniższy opis nie jest manualem na temat tego jak w Ubuntu Desktop włączyć tryb hibernacji po zamknięciu klapki laptopa, to po prostu zbiór czynności, które wykonałem u siebie, żeby to wszystko razem w końcu zadziałało, bo na początku nie chciało.

Hibernacja w Linuxie wykorzystuje swap-a. Zgodnie z najnowszymi zaleceniami, jeśli komputer dysponuje dużą ilością pamięci, to swap może być mały. BŁĄÐ. Jeśli chcesz skorzystać z hibernacji, to swap musi pomieścić całą pamięć RAM, więc musi być duży. Na moim systemie mam 8 GB RAM, domyślny swap miał rozmiar 2GB, więc zmieniłem konfigurację na wykorzystanie 10 GB na swap.

Mam również wrażenie, że ów swap nie może być plikiem swap znajdującym się gdzieś w systemie plików, tylko że powinna to być osobna partycja.

Wyłączenie swap-a w pliku:

sudo swapon --all

pokazuje, jaki swap aktualnie jest dostępny (u mnie 2 GB). Jeśli chcesz sprawdzić jaka część swapa jest wykorzystywana obecnie na systemie, to użyj

grep -i swap /proc/meminfo

i życzę wyniku wskazującego, że swap nie jest używany

sudo swapoff -a

wyłącza tego swapa. Ponieważ swap jest montowany automatycznie podczas startu systemu, to czekała mnie jeszcze modyfikacja pliku

/etc/fstab

w którym zakomentowałem linijkę dotyczącą swap.

Dodanie partycji swap

Poleceniem

lsblk

można sprawdzić, jakie urządzenia dyskowe są dostępne. Trzeba znaleźć linijkę, która w kolumnie TYPE ma wartość disk, U mnie ten dysk nazywał się nvme0n1, a zatem urządzeniem odpowiadającym za dysk jest /dev/nvme0n1.  Polecenie

sudo fdisk /dev/nvme0n1

pozwala przeglądać i edytować listę  partycji na tym dysku. Komenda „p” wyświetli partycje dyskowe, a komenda „F” powie ile miejsca jest dostępne i … oby tam coś było. Komenda „n” pozwoli na stworzenie nowej partycji. Podczas tworzenia partycji program pyta o detale i większości można akceptować wartości domyślne – poza rozmiarem u mnie wynosi on 10g (2GB istniejącego swap + 8GB na zrzut pamięci RAM podczas hibernacji). Polecenie „p” pozwoli skontrolować nową partycję. Polecenie „t’ pozwoli zmienić typ partycji. U mnie typ „Linux swap” znajdował się na pozycji 19, ale na innych systemach była to zwykle pozycja 82. W razie czego „L” pozwoli podejrzeć wszystkie typy, a szukamy przecież „Linux swap”. Po kolejnym „p”, jeśli wszystko jest ok, można wpisać komendę „w” i tablica partycji zostanie zapisana na dysku. To krytyczny moment. Żeby system operacyjny zobaczył wykonywane zmiany można posłużyć się komendą:

sudo partprobe

No dobra, teraz trzeba na tym systemie plików przygotować system plików odpowiadający za swap. Robi się to komendą:

sudo mkswap /dev/nvme0n1p10

Oczywiście urządzenie dyskowe należy wybrać takie, jaki było utworzone w fdisk. No i wreszczie można dodać do /etc/fstab definicję tego urządzenia, które ma być podmontowywane przy starcie systemu, która może wyglądać tak:

/dev/nvme0n1p10                                 swap            swap    defaults               0

I już można zmontować swap:

sudo swapon /dev/nvme0n1p10

I tak przychodzi pora na właściwą konfigurację hibernacji… idzie raz dwa prawda?

Testowanie hibernacji

Nim skonfigurujesz automatyczna hibernację po zamknięciu obudowy, wypadałoby najpierw sprawdzić, czy hibernacja działa. Dlatego najpierw upewnij się, że wszystkie w tej chwili otwarte dokumenty są zapisane (bo przecież jak coś pójdzie nie tak, to się może stracić), a potem otwórz jakakoklwiek aplikację (żeby zobaczyć czy przy ponownym uruchomieniu nadal będzie otwarta). Potem uruchom:

sudo systemctl hibernate

Jeśli wszystko pójdzie dobrze, to system się zatrzyma, a po ponownym włączeniu otwarte aplikacje nadal będą otwarte, a jeśli nie… to czytaj dalej. Jest jeszcze jedna szansa na naprawienie. Przecież Linux jest prosty!

Przywracanie stanu sprzed hibernacji

Jakby na to nie patrzeć, to startowanie systemu ma związek z poważnymi procesami bootowania, a za bootowanie odpowiada GRUB. Plik konfiguracyjny GRUB to

/etc/default/grub

Jedna z linijek definiuje, jak uruchomić Linuxa w domyślnej konfiguracji. U mnie jest to:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Tutaj należy dopisać, że podczas startowania systemu ma zostać przywrócony stan pamięci z urządzenia swap:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/nvme0n1p10"

Sama konfiguracja zapisana w pliku nie wystarczy. Konfiguracje trzeba zainstalować:

sudo update-grub

Ewentualne powtórzenie testu hibernacji z poprzeniego kroku, powinno sie teraz zakończyć tym, że otwarte aplikacje z momentu hibernacji, nadal będą otwarte

Definicja akcji po zamknięciu obudowy

Plikiem zawierającym konfigurację możliwych zmian stanu systemu związanych z logowaniem, wylogowaniem, zamknięciem obudowy laptopa itp jest

/etc/systemd/logind.conf

Tutaj jest kilka ustawień dotyczących zamykania obudowy. Ponieważ chcę, żeby system przechodził w tryb hibernacji po zamknięciu klapki, to moje ustawienia wyglądają następująco:

HandleLidSwitch=hibernate 
HandleLidSwitchExternalPower=hibernate 
#HandleLidSwitchDocked=ignore 
#LidSwitchIgnoreInhibited=yes

Teoretycznie to ma wystarczyć, ale to Linux i za łatwo być nie może. Za serwis login odpowiada proces, który trzeba przeładować

sudo systemctl restart systemd-logind.service

Uwaga – przeładowanie tego procesu może zamknąć bieżącą sesję, dlatego ostrożnie – pozapisuj co jest teraz otwarte.

No to co – zamykamy klapkę? Trzymam kciuki!

 

Komentarze są wyłączone

Autor: Rafał Kraik