Bár a korszerű rendszerek és adathordozók miatt a hibernálási funkció eléggé a háttérbe szorul, hiszen ma már elindítani egy korszerű PC-t nem tart percekig, köszönhetően a nagyon gyors adatelérésnek. Egyes esetekben a hibernációból való visszaállítás sokkal hosszabb folyamat mint egy NVME2 SSD-ről indított gépet bebootolni…
A munkafolyamatok felfüggesztése több módon történhet:
- Felfüggesztés: memóriába, lemezre
- Hibernálás: a teljes memória kiírása lapozó partícióra, vagy lapozó fájlba
Hogy a rendszerünk és a kernel épp milyen módokat támogat, az alábbi paranccsal kérhetjük le:
0 1 2 | cat /sys/power/state |
Ha a ‘disk’ szerepel a listán, akkor a rendszer támogatja a hibernálást is.
Tesztek, hibakeresés
0 1 2 3 4 5 | systemctl supend # felfüggesztés systemctl hybrid-sleep # kombinált felfüggesztés ramba és lemezre egyaránt systemctl suspend-then-hibernate # felfüggesztés és hibernálás egy idő után hibernálás ha nem szakad meg a felfüggesztés systemct hibernate # hibernálás |
Felfüggesztés
A felfüggesztés mód használatához működő energiakezelésre van szükséged. Ezt az acpi mód engedélyezésével érjük el. Egyes gépek esetében külön acpi módot kell beállítani a BIOS vagy annak hibás működése miatt (mindenképp legyen frissítve a BIOS).
Amennyiben hibás RAM van a gépben, a funkció nem fog helyesen működni!
DELL XPS telepített Nvidia driverrel igényléi a speciális beállításokat.
0 1 2 | GRUB_CMDLINE_LINUX="nouveau.blacklist=1 acpi_osi=! acpi_osi=\"Windows 2015\" acpi_backlight=vendor mem_sleep_default=deep" |
Memóriába felfüggesztés lekérdezése
0 1 2 3 | cat /sys/power/mem_sleep s2idle [deep] |
Hibernálás
A hibernálás használatához SWAP partíció vagy SWAP-fájl szükséges. Ellenőrzés, hogy létezik-e valamilyen aktív swap:
0 1 2 3 4 | swapon # itt létezik 2GB-os Swap-FÁJL NAME TYPE SIZE USED PRIO /var/swap file 2G 322,5M -2 |
(fontos: a swap-nak nagyobb terület kell mint a memóriánk a gépben! Egyébként nem lehet kiírni a memória tartalmát…)
Ellenőrizzük, hogy van -e swap partíciónk:
0 1 2 3 4 | grep swap /etc/fstab # itt létezik egy swap-PARTÍCIÓ! # swap was on /dev/sda1 during installation UUID=14cee2ec-9d37-4ac0-b594-eae0e55814aa none swap sw 0 0 |
Amennyiben a hibernálási funkciót használni akarjuk, a visszaállító (resume) paramétrenek szerepelnie kell a GRUB konfigurációban!
Swap-partíció esetén így néz ki:
0 1 2 | GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=14cee2ec-9d37-4ac0-b594-eae0e55814aa" |
Swap-fájl esetén így néz ki:
0 1 2 | GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=14cee2ec-9d37-4ac0-b594-eae0e55814aa" resume_offset=<idejon_az_offset> |
Figyelem!
Bármilyen GRUB módosítás után futtatni kell az ‘update-grub’ parancsot
Hibernálás ellenőrzése, hibakeresés
0 1 2 3 4 | systemctl hibernate # DEBUG MÓDBAN SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-sleep hibernate |
Swap-file offset megadása
Swap fájl esetén szükség van a fájl-offset-re. Amennyiben a swap-fájl a rendszerpartíción van alapértelmezett módon a /var/swap úton, így kapjuk meg a resume= és resume_offset= értékét
0 1 2 3 | grep UUID /etc/fstab | grep ' / ' UUID=14cee2ec-9d37-4ac0-b594-eae0e55814aa / ext4 defaults,noatime,discard 1 1 |
Az offset a fizikai első offset (a példában: 70666240)
0 1 2 3 4 5 6 7 | filefrag -v /var/swap File size of /var/swap is 2147483648 (524288 blocks of 4096 bytes) ext: logical_offset: physical_offset: length: expected: flags: 0: 0.. 6143: 70666240.. 70672383: 6144: 1: 6144.. 12287: 70733824.. 70739967: 6144: 70672384: [...] |
Felébresztés
Felfüggesztés után minden eszközt az eredeti állapotba kell visszaállítani. Az alább paranccsal megkapjuk a felébreszthető eszközöket
0 1 2 | cat /proc/acpi/wakeup | grep enable |
Felébresztendő eszközök módjának (bekapcsolás/kikapcsolás) váltása
0 1 2 | echo XHC> /proc/acpi/wakeup |
A nouveau meghajtó megajadályozhatja a felfüggesztést. Ha ilyen probléma áll fenn, használjuk ezt a scriptet
/usr/lib/systemd/system-sleep/10-nouveau.sh
az alábbi tartalommal:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/bin/bash case $1/$2 in pre/*) # echo "Going to $2..." /usr/bin/echo "0" > /sys/class/vtconsole/vtcon1/bind /usr/bin/rmmod nouveau ;; post/*) # echo "Waking up from $2..." /usr/bin/modprobe nouveau /usr/bin/echo "1" > /sys/class/vtconsole/vtcon1/bind ;; esac |
Hozzászólások lezárva