- Гібернація в GNU/Linux зберігає весь стан оперативної пам'яті для підкачки та вимикає комп'ютер, тоді як режим призупинення зберігає пам'ять в оперативній пам'яті з низьким енергоспоживанням.
- Для надійної роботи гібернації потрібна підтримка ядра та достатній обсяг простору підкачки, або розділ підкачки, або добре налаштований файл підкачки.
- Різні інструменти (systemd, pm-utils, uswsusp та PolicyKit) дозволяють вмикати, керувати або вимикати режим глибокого сну та призупинення залежно від дистрибутива та сценарію використання.
- Вибір між режимом призупинення, гібернацією або перезапуском із відновленням сеансу залежить від балансу, який ви шукаєте між економією енергії, швидкістю повернення до роботи та стабільністю системи.
Гібернація в GNU/Linux залишається однією з тих функцій, про які чув кожен, але її не завжди добре розуміють або налаштовують правильно. Багато користувачів звертаються сюди з проблемами з Windows або ноутбуками, які несподівано вимикаються, і хочуть точно знати, що робить кожен режим живлення та як ним керувати у своєму дистрибутиві Linux.
В останніх версіях ядра та основних дистрибутивах ситуація значно покращилася, але залишаються важливі нюанси між гібернацією, призупиненням та завершенням роботи з повторним відкриттям документа , а також технічні деталі, такі як використання swap (розділу чи файлу), які варто зрозуміти. Давайте розберемо все це спокійно, але зрозуміло та практично.
Гібернація, призупинення та перезапуск із відновленням сеансу: чим вони відрізняються
Перш ніж торкатися чогось у налаштуваннях, важливо зрозуміти, що насправді робить кожен режим енергозбереження , оскільки концепції часто плутаються, і тоді трапляються шоки через втрату даних або розряджені батареї.
Коли ми говоримо про гібернацію в операційних системах, ми маємо на увазі процес, який заморожує весь стан системи : відкриті програми, документи, служби, налаштування робочого столу, буфери тощо. Весь цей вміст з оперативної пам'яті зберігається на постійному носії інформації (зазвичай на диску підкачки), і машина повністю вимикається.
Це означає, що гібернація — це не те саме, що просто залишити файли відкритими та вимкнути комп’ютер, а також не те саме, що перевести його в режим очікування. Це повільніше, ніж переведення в оперативну пам’ять, але значно економить енергію, оскільки комп’ютер повністю вимикається, і електроенергія не споживається.
З іншого боку, деякі системи пропонують щось подібне до «перезавантаження з повторним відкриттям документів», коли система завершує роботу звичайним способом, але після перезавантаження відкриті програми автоматично перезапускаються . У GNU/Linux багато дистрибутивів імітують таку поведінку середовища робочого столу, але це не гібернація: це все ще холодне завантаження з усіма службами, запущеними з нуля.
Перевага гібернації над перезапуском із відновленням програми полягає в тому, що ядро та простір користувача не перезавантажуються з нуля ; натомість відновлюється повний образ попереднього стану. Тому, коли все працює правильно, ви можете продовжити роботу саме з того місця, де зупинилися, без повторного відкриття документів чи переналаштування вікон.
Що таке призупинення роботи в Linux і чому його варто використовувати?
У режимі сну операційна система генерує живий образ поточного стану (ваших програм, документів, робочого столу), але замість того, щоб записувати його на диск, вона залишає його в оперативній пам'яті, яка є енергозалежною.
Коли система переходить у режим призупинення, ядро вимикає практично всі апаратні пристрої: диск, екран, більшу частину чіпсету… Єдиними компонентами, які залишаються під живленням, є оперативна пам'ять та мінімальна материнська плата , щоб мати змогу «прокинутися» при натисканні клавіші, русі миші або відкритті кришки ноутбука.
Цей режим чудово підходить, коли ви хочете майже миттєво повернутися до робочого столу та не надто турбуєтеся про споживання енергії, коли комп’ютер не використовується. Сучасний ноутбук може перебувати в режимі сну від одного до трьох днів на батареї, але протягом цього часу він споживає певну енергію для підтримки роботи оперативної пам’яті.
Звичайний режим сну особливо рекомендується, якщо у вас більше 2 ГБ оперативної пам’яті та обмежений обсяг дискового простору (наприклад, на невеликих SSD-накопичувачах) або якщо ви дуже скоро знову використовуватимете комп’ютер. Це типово, коли ви закриваєте кришку на кілька хвилин між заняттями або робите перерву на обід.
Гібридна підвіска: поєднання оперативної пам'яті та диска
Існує третій, менш відомий режим: гібридний режим сну . У цьому випадку система виконує весь процес гібернації (запис вмісту пам'яті на диск, зазвичай для підкачки), але замість повного вимкнення вона переходить у стан сну в оперативній пам'яті.
Це створює змішаний сценарій: якщо батарея розрядиться, ви розбудите систему так само швидко, як і під час звичайного режиму сну ; але якщо заряд закінчиться, збережений образ диска дозволить вам відновити сеанс так, ніби він перейшов у режим глибокого сну.
Недоліком цього режиму є те, що вхід і вихід з нього займає більше часу, ніж чистий режим очікування, оскільки він записує дані на диск, а також підтримує живлення оперативної пам'яті. З цієї причини він часто використовується на серверах або робочих станціях, яким потрібен додатковий рівень захисту від втрати стану.
Як працює гібернація всередині GNU/Linux
Коли ви переводите систему GNU/Linux у режим гібернації, ядро виконує серію чітко визначених кроків для захоплення та відновлення повного стану машини . Це не просто питання «збереження оперативної пам'яті у файл» і все.
Типовий процес призупинення на диск виконується в такій загальній послідовності:
- Користувацькі процеси зупинено щоб заморозити його стан і запобігти продовженню зміни пам'яті під час захоплення.
- Апаратні пристрої зависають або зупиняються, щоб запобігти змінам пам'яті, пов'язаним з контролерами та DMA.
- Образ зимової сплячки створюється: Весь вміст оперативної пам'яті копіюється з вимкненими перериваннями.
- Апаратні пристрої повторно активуються контрольованим чином.
- Зображення написано в простір для підкачки, яка потім вважається областю підвіски (swsusp або linux-suspend).
- Нарешті, всі пристрої призупиняються, а комп'ютер повністю вимикається.
Після перезавантаження система завантаження перевіряє наявність дійсного образу гібернації :
- Так, є, Він не запускається нормально.але зчитує зображення з свопу.
- Пристрої знову заморожуються, щоб запобігти перешкодам.
- Образ копіюється з підкачки в оперативну пам'ять і повторно активувати процеси та пристрої якими вони були до зимової сплячки.
Одна цікава деталь, яку спостерігали під час реального тестування, полягає в тому, що після переходу в режим глибокого сну колишній "розділ linux-swap" відображається з позначкою linux-suspend або swsusp в таких інструментах, як GParted або parted. Ця зміна типу розділу є однією з підказок, які система використовує для визначення того, чи потрібно відновлюватися з режиму глибокого сну, чи виконувати чисте завантаження.
Важливість заміни під час сплячки
Весь цей механізм пов'язаний з ключовою вимогою: для переходу в сплячий режим у Linux потрібен достатній простір для підкачки , як за розміром, так і за конфігурацією. Без підкачки системі не буде де зберігати образ оперативної пам'яті.
Обмін може бути:
- Una виділена перегородка з типом системи linux-swap.
- Un файл підкачки розташований у звичайній файловій системі (наприклад, у /swapfile).
З практичної точки зору, ядро прозоро обробляє обидва простори як простір підкачки. Однак, щоб використовувати файл підкачки як місце для гібернації Вам потрібно повідомити ядру, через менеджер завантаження, такі параметри, як resume= (пристрій) та resume_offset= (зміщення всередині файлу). Якщо цього не зробити, система завантажиться з нуля та не відновить образ, навіть якщо він буде записаний на диск.
Щодо розміру, класична рекомендація для надійного переходу в сплячий режим полягає в тому, що розмір простору підкачки має бути щонайменше рівним розміру фізичної оперативної пам'яті . Це правда, що якщо система перебуває під великим навантаженням, іноді можна перейти в сплячий режим з дещо меншим розміром простору підкачки, але це не є гарантією і не слід узагальнювати. У системах з 32 ГБ або 64 ГБ оперативної пам'яті або більше багато адміністраторів радять взагалі не переходити в сплячий режим через обмеження в часі та просторі.
Варто також пам'ятати, що такі механізми, як zram або zswap, створюють стиснуту область підкачки в самій оперативній пам'яті. Вони чудово підходять для покращення продуктивності в системах з обмеженою пам'яттю, але не підходять для гібернації: будучи енергозалежними, образ зникне при відключенні живлення.
Гібернація на розділі підкачки проти файлу підкачки
Роками наявність окремого розділу swap вважалася майже обов'язковою для безпроблемного переходу в сплячий режим. Поведінка ядра та таких інструментів, як initramfs, значною мірою базувалася на цій класичній моделі.
Однак багато сучасних дистрибутивів, таких як останні версії Ubuntu, перейшли на використання файлу підкачки за замовчуванням замість розділу . Це не означає, що ви втрачаєте можливість переходу в сплячий режим; це просто змінює місце збереження стану системи.
В обох випадках основний процес однаковий: Образ з оперативної пам'яті потрапляє до постійного простору підкачки.Різниця полягає в тому, що у випадку з файлом підкачки системі потрібно знати точний блок на диску, де починається файл (звідси і параметр). resume_offset), щоб мати змогу зчитувати зображення на ранній стадії запуску.
Практичні експерименти на Debian та машинах на базі Debian показали, що форматування або видалення розділу swap , де зберігався образ гібернації, призводить до чистого завантаження, ніби гібернації ніколи й не було. Це підтверджує, що образ справді зберігається в swap, а не в іншому місці на диску.
Вимоги до ядра та підтримка в дистрибутивах
Окрім простору підкачки, ядро Linux має мати ввімкнену підтримку гібернації . Якщо ви скомпілюєте власне ядро та вимкнете цю опцію, то скільки б конфігурацій ви не налаштували у дистрибутиві, ви не зможете перейти в режим гібернації.
На практиці більшість дистрибутивів використовують ядро, упаковане самим проектом, і в цих випадках режим гібернації зазвичай увімкнено за замовчуванням разом з рештою звичайних функцій та драйверів керування живленням.
Однак не всі дистрибутиви завжди відображають кнопку «Гібернація» у своїх графічних меню. Деякі, як-от Ubuntu у певних версіях, за замовчуванням приховують цю опцію на робочому столі, навіть якщо ядро та інфраструктура гібернації повністю функціональні.
Як увімкнути режим гібернації в Ubuntu за допомогою PolicyKit
У системах Ubuntu, де опція переходу в сплячий режим не відображається в меню вимкнення, її можна відносно легко повторно ввімкнути, змінивши деякі правила PolicyKit. Ідея полягає в тому, щоб дозволити звичайним користувачам викликати дії переходу в сплячий режим за допомогою upower та logind.
Типова процедура включає створення файлу конфігурації, наприклад com.ubuntu.enable-hibernate.pklaз подібним вмістом (адаптованим до синтаксису, що використовується вашими інструментами):
Ідентифікація = unix-користувач: *
Дія = org.freedesktop.upower.hibernate
ResultActive = так
Ідентифікація = unix-користувач: *
Дія=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultActive = так
Після створення файлу його потрібно помістити в /etc/polkit-1/localauthority/50-local.d/Для цього ви можете відкрити файловий менеджер від імені адміністратора (наприклад, за допомогою gksudo nautilus (у середовищах, які все ще підтримують його) та вставте його в цей каталог.
Після перезавантаження системи на робочому столі Ubuntu відобразиться опція переходу в режим глибокого сну поряд з опціями вимкнення, перезавантаження та призупинення. Звичайно, все ще потрібен достатньо великий простір підкачки та ядро з підтримкою режиму глибокого сну.

Команди гібернації та призупинення з терміналу
Якщо ви надаєте перевагу терміналу або використовуєте легкі середовища (Fluxbox, IceWM, Openbox, JWM тощо), де немає попередньо налаштованих кнопок живлення, ви можете керувати режимом глибокого сну та сну безпосередньо за допомогою команд.
Використання pm-utils
У багатьох класичних дистрибутивах Debian/Ubuntu пакет pm-utils надає кілька простих команд:
- pm-призупиненняЦе призупиняє роботу машини в оперативній пам'яті. Більшість пристроїв вимикаються, а стан зберігається в пам'яті. Споживання енергії значно зменшується, але енергія все ще використовується.
- pm-гібернація: переводить систему в режим глибокого сну, зберігаючи оперативну пам'ять на диску (підкачуючи) та повністю вимикаючи комп'ютер.
- pm-suspend-hybridВін виконує гібернацію диска та, замість вимкнення, переводить оперативну пам'ять у режим сну, досягаючи таким чином «гібридного сну».
Основне використання буде таким:
sudo pm-призупинення
судо вечора-сплячка
sudo pm-suspend-hybrid
На системах на базі Arch Linux та інших, які підтримують його у своїх репозиторіях, ви також можете використовувати ці команди, хоча в багатьох сучасних дистрибутивах від pm-utils відмовилися на користь systemd.
Використання systemd (systemctl)
У дистрибутивах із systemd (OpenSUSE, багато версій Arch та похідних, сучасний Debian тощо) рекомендованим способом є використання systemctl :
- призупинення systemctl: призупиняє роботу оперативної пам'яті.
- systemctl переходить у сплячий режим: переходить у сплячий режим на диск.
- systemctl гібридний сплячий режим: активує гібридну підвіску.
Наприклад, в OpenSUSE або будь-якій типовій системі systemd ви можете безпосередньо викликати:
sudo systemctl сплячий
У багатьох дистрибутивах, якщо ви бажаєте зберегти сумісність зі старими інструментами, pm-hibernate все ще доступний і просто делегує або співіснує з systemd залежно від конфігурації.
Використання uswsusp: s2ram, s2disk та s2both
Ще одне сімейство інструментів, менш поширене в наші дні, — це uswsusp , яке надає команди s2ram, s2disk та s2both. Воно було доступне в Debian та Ubuntu до певних версій (Debian 10; Ubuntu 20.04 та пізніші версії його визнали застарілим).
- s2ram: призупиняє роботу системи в оперативній пам'яті (режим S3). Це еквівалентно команді pm-suspend або systemctl suspend.
- s2disk: зберігає повний стан на диску та вимикає машину (класична гібернація).
- s2both: поєднує обидва процеси: записує образ на диск, а потім призупиняє роботу в оперативній пам'яті, досягаючи гібридної поведінки.
Команди будуть такими:
sudo s2ram
sudo s2disk
sudo s2both
Ці утиліти вимагають належного налаштування initramfs, щоб під час запуску викликався механізм відновлення та відновлювався образ, якщо він існує.
Як вимкнути режим сну та гібернації в системах GNU/Linux
У деяких середовищах, таких як навчальні класи, спільні комп’ютери або громадські робочі станції, режим сну та гібернації може призвести до неочікуваних вимкнень, проблем із мережею або зависань, які важко пояснити користувачам . У таких випадках іноді найпрактичнішим рішенням є повне вимкнення цих функцій.
Вимкнути використання systemd (цільова маска)
Якщо ваша система використовує systemd, просто замаскуйте цілі, пов'язані зі сном та гібернацією , щоб їх не можна було активувати ні з графічного меню, ні з терміналу:
sudo systemctl маска sleep.target suspend.target hibernate.target hybrid-sleep.target
Це перенаправляє ці цілі до /dev/null , символічно відправляючи їх "у кошик". Після перезавантаження будь-яка спроба призупинення або переходу в сплячий режим зазнає невдачі.
Якщо пізніше ви захочете відновити нормальну поведінку, вам потрібно буде використовувати лише:
sudo systemctl розмаскувати sleep.target suspend.target hibernate.target hybrid-sleep.target
Вимкнення кнопок сну та призупинення за допомогою PolicyKit
Інший, кращий варіант – це використання PolicyKit для видалення дозволів на призупинення/гібернацію для всіх користувачів. Наприклад, ви можете створювати файли в /etc/polkit-1/localauthority/90-mandatory.d/ як:
/etc/polkit-1/localauthority/90-mandatory.d/disable-suspend.pkla
Ідентифікація = unix-користувач: *
Дія=org.freedesktop.upower.suspend
ResultActive=ні
РезультатНеактивний=ні
ResultBy-небудь=ні
Ідентифікація = unix-користувач: *
Дія=org.freedesktop.login1.suspend
ResultActive=ні
Ідентифікація = unix-користувач: *
Дія=org.freedesktop.login1.suspend-multiple-sessions
ResultActive=ні
А для зимової сплячки :
/etc/polkit-1/localauthority/90-mandatory.d/disable-hibernate.pkla
Ідентифікація = unix-користувач: *
Дія = org.freedesktop.upower.hibernate
ResultActive=ні
РезультатНеактивний=ні
ResultBy-небудь=ні
Ідентифікація = unix-користувач: *
Дія=org.freedesktop.login1.hibernate
ResultActive=ні
Ідентифікація = unix-користувач: *
Дія=org.freedesktop.login1.hibernate-multiple-sessions
ResultActive=ні
Після перезавантаження кнопки призупинення та гібернації зникнуть з графічного меню, що запобігатиме випадковому їх активації користувачем.
Блокування комбінацій клавіш та прямих команд
Навіть якщо ви приховаєте кнопки, деякі робочі столи та клавіатури мають спеціальні клавіші сну/гібернації , які все ще можуть функціонувати. У старіших середовищах із класичним GNOME це можна налаштувати за допомогою таких команд, як:
gconftool -s /apps/gnome-power-manager/buttons/hibernate -t рядок інтерактивний
Крім того, ви можете створювати скрипти в /etc/pm/sleep.d/Такий як /etc/pm/sleep.d/000cancel-hibernate-suspend, що просто Скасуйте будь-яку спробу призупинення або переходу в режим глибокого сну повернення керування системі. Типовий скелет буде таким:
#! / Bin / ш
# запобігає гібернації та призупиненню
«$PM_FUNCTIONS»
випадок «${1}» у
призупинити|перевести в сплячий режим)
гальмувати
;;
резюме|відтавання)
вихід 0
;;
що С
Не забудьте надати йому дозволи на виконання:
chmod 0755 /etc/pm/sleep.d/000cancel-hibernate-suspend
Коли доречно впадати в сплячку, а коли ні?
Після викладання всієї цієї теорії залишається практична частина: коли дійсно варто переходити в сплячий режим у GNU/Linux? Однозначної відповіді немає, але є деякі розумні рекомендації.
Якщо вашим головним пріоритетом є економія енергії (наприклад, на ноутбуці, який ви не використовуєте протягом багатьох годин), і у вас достатньо місця на диску для образу пам'яті, режим гібернації — дуже привабливий варіант; ви можете прочитати, як вибрати між вимкненням, призупиненням роботи або переходом ПК в режим гібернації . Споживання енергії в режимі гібернації дорівнює нулю, а після відновлення роботи він завантажується набагато швидше, ніж після холодного запуску.
Якщо вам потрібна чиста швидкість під час повернення до робочого столу, і ви збираєтеся залишити комп'ютер бездіяльним лише на короткий час , перехід до оперативної пам'яті може бути зручнішим. Машина все одно використовуватиме певний заряд батареї, але відновлення буде майже миттєвим.
На комп’ютерах з великим обсягом оперативної пам’яті або на системах, де стабільність після відновлення роботи не гарантована (деяке незвичне обладнання, екзотичні драйвери тощо), часто варто відмовитися від гібернації та обрати хороший режим сну та чистий перезапуск із відновленням документів за потреби.
Зрештою, розуміння того, як вони залежать від swap, що робить ядро «під капотом» і як керувати ними за допомогою таких інструментів, як systemd, pm-utils, uswsusp або PolicyKit, дозволяє вам розглядати гібернацію та режим очікування як інструменти на вашу користь , а не як таємничі функції, які іноді працюють, а іноді залишають ноутбук «застряглим» без будь-якого видимого пояснення.
