Як я можу перезимувати на Ubuntu 16.04?


86

Як я можу успішно перезимувати Ubuntu 16.04?

Я намагався майже кожне рішення в Інтернеті, але не з них насправді було корисно. Я знайшов свою проблему майже повністю подібною до цієї


2
Можливий дублікат Як увімкнути сплячку?
DJCrashdummy

Чи sudo pm-hibernateпрацює?
Пілот6

2
не змінилася ситуація з systemd? тепер ми маємо на увазі використовувати systemctl hibernateтак, можливо, не обдури ... або, принаймні, оновлена ​​відповідь може знадобитися, щоб старе питання було дійсним для дупа
Zanna

Яку версію ядра ви використовуєте? Введіть uname -rтермінал (вибачте, якщо ви вже знали це).
WinEunuuchs2Unix

будь ласка, відредагуйте своє запитання та додайте висновок, free щоб ми могли визначити, чи достатньо налаштування підкачки, щоб успішно перезимувати.
Старійшина Гік

Відповіді:


62

Зимова сплячка з використанням systemctlта налагодженні її роботи у важких випадках

Для мене pm-hibernateзавжди не вдається. Після деяких перетворень я зміг перезимувати, використовуючи інтерфейс systemd (система init 16.04 і вище). Також мені вдалося змусити його працювати 17.04 із файлом swap. Це тематичне дослідження може бути корисним для інших, хто має проблеми.

Перша спроба:

sudo systemctl hibernate

Якщо це не вдалося, почніть усунення несправностей: у сплячому стані (HTD або ACPI S4) стан машини записується на диск, щоб не було необхідного живлення для його збереження. Стан записується або в розділ swap, або у файл swap. Примітка: якщо ви використовуєте BTRFS, НЕ намагайтеся використовувати файл swap, оскільки це може спричинити пошкодження файлової системи

Ваш розділ підкачки або файл підкачки може знадобитися мати той же розмір , як RAM , щоб дозволити сплячий режим, але є хороший шанс , що ви будете в змозі глибокого сну , якщо він , по крайней мере 2/5 розмір оперативної пам'яті, в відповідно з вікі - сторінку Arch , тому спробуйте спочатку інші кроки перед збільшенням розміру свопу.

Якщо ваша проблема полягає в тому, що ви отримуєте чисту завантажувальну систему замість очікуваного резюме, як мінімум, вам, швидше за все, потрібно встановити параметр завантаження, щоб знайти образ диска

Знайдіть розділ своп:

grep swap /etc/fstab

для мене це повертається (частковий вихід)

# swap was on /dev/mmcblk0p3 during installation

де /dev/mmcblk0p3вказати розділ

Додати параметр завантаження:

sudoedit /etc/default/grub

До рядка, що починається, GRUB_CMDLINE_LINUX_DEFAULTдодайте resume=/dev/YourSwapPartitionдо лапки в лапки (замініть розділ, який ви визначили раніше). Використовуючи мій приклад:

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

Щоразу, коли ви зміните цей файл, ви повинні запустити, sudo update-grubінакше зміни не матимуть ефекту.

Тепер вам потрібно перезавантажити. Потім ви можете спробувати перезимувати, видавши команду:

sudo systemctl hibernate

Для відновлення натисніть кнопку живлення та система завантажиться.

Якщо у вас все ще виникають проблеми, починайте налагодження.

Я навожу свій приклад нижче як приклад, але детальну інформацію про налагодження S станів можна знайти в цьому блозі, а також у цьому .

Встановіть ще параметри завантаження, щоб отримати більше інформації. Видаліть quietі splashдодайте, initcall_debugі no_console_suspendце призведе до друку системних дзвінків на консолі, щоб ви могли спостерігати, що відбувається не так. Я встановив це:

GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mmcblk0p3 no_console_suspend initcall_debug"

Що допомогло мені побачити, що пішло не так у резюме зі сплячки.

У моєму випадку після резюме я втратив Wi-Fi, і ядро ​​явно було засмучене, оскільки більшість команд (наприклад, читання чогось із /sys, перезавантаження модулів чи будь-якої systemctlкоманди) не працюватимуть - процес, здається, запуститься і просто зависне (все це було б повернувся в норму після перезавантаження звичайно). Спостерігаючи за тим, як система дуже повільно вимикається і читаючи всі повідомлення про налагодження, я помітив, що з "brcm" було багато проблем, тому я здогадався, що в цьому винен мій модуль бездротового драйвера Broadcom. Впевнений, що я налагодив процедуру сплячки, щоб спочатку вивантажити модуль:

sudo modprobe -r brcmfmac
sudo systemctl hibernate

після резюме я знову вставляю модуль

sudo modprobe brcmfmac

І все спрацювало чудово. Мені також доводиться вносити в чорний список btsdioмодуль, який видається несуміснимbrcmfmac


Оновлення: Зимова сплячка за допомогою файлу swap 17.04.

Знову за допомогою сторінки вікі Arch та деяким додатковим поворотом мені вдалося перейти у сплячку до роботи 17.04 із файлом swap. Для цього знадобився додатковий параметр завантаження, resume_offset=nде n - це перше число physical_offsetу вихідному рядку sudo filefrag -v /swapfile:

$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 1425873920 (348114 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   32767:      34816..     67583:  32768:            
   1:    32768..   63487:      67584..     98303:  30720:            
   .... 

Тому додатковим параметром завантаження в моєму випадку є resume_offset=34816. Ще потрібно встановити параметр завантаження для відновлення розділу. Це буде кореневий розділ (або будь-який розділ, на якому розташований ваш файл swap) Мої параметри тепер:

GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=/dev/mmcblk1p2 resume_offset=34816"

Де /dev/mmcblk1p2мій кореневий розділ (ваш, швидше за все, щось подібний /dev/sda2).

Під час резюме я побачив, що зображення успішно завантажується, але в моєму випадку (лише приклад - YMMVAPD), тоді ще кілька драйверів ( i2c_designware) викинули деякі помилки, і я отримав повне заморожування системи на резюме. Гібернація працює, якщо додатково вивантажую ці модулі brcmfmac, але система швидко стає непридатною без цих модулів. Тому я створив такий собі сценарій, щоб вивантажити помилкові модулі та негайно вставити їх на резюме:

# remove buggy modules
modprobe -r brcmfmac i2c_designware_platform i2c_designware_core &&
# hibernate
echo disk > /sys/power/state
# reinsert
modprobe i2c_designware_core i2c_designware_platform brcmfmac

Коли я хочу зимувати, я бігаю sudo bash script. Це чудово працює.


TL; DR

Використовуйте systemd, встановіть параметр завантаження для відновлення після swap, визначте помилки драйверів та вивантажте їх перед початком сплячки. Якщо система не може довго працювати без цих модулів або вам потрібно розвантажити декілька, можливо, простіше використовувати простий скрипт, щоб ініціювати сплячку.


Звідки ця інформація, що 2/5 розміру оперативної пам’яті може бути достатньо і за яких обставин? У мене в Gnome є "сплячий режим", і він, здається, сплячий, але, прокинувшись, він не працює належним чином. У мене є swap-розділ на 8 ГБ і 32 ГБ ОЗУ. Це не 2/5, але перед тим, як створити файл обміну (або розділ) на 32 ГБ, було б добре знати.
cslotty

@cslotty Я отримав цю інформацію з Arch wiki IIRC - повідомте мені, якщо ви цим керуєте, будь ласка
Zanna

Дякую, @Zanna. Я дізнався, що насправді це не сплячий режим, чого я хочу, а призупинення (S3 / STR) - sry.
cslotty

@cslotty зовсім не хвилюється. У цьому випадку своп - це не ваша проблема, оскільки він не пов'язаний.
Занна

1
Дякую, мені знадобився синтез цієї відповіді, а також підказка щодо відключення SecureBoot, щоб зрештою спрацювати.
олігофрен

62

Можна використовувати

sudo pm-hibernate 

щоб перевірити, чи працює сплячка у вашій системі ( це призведе до сплячого стану вашого комп’ютера ).

Якщо це не працює, перевірте, чи розмір вашого swap принаймні такий же, як і ваша оперативна пам’ять.

Щоб додати параметр до меню налаштувань, ви можете створити файл конфігурації. Відкрийте вікно терміналу і запустіть цю команду:

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

Він відкриває нано порожнім файлом. Скопіюйте рядки нижче та вставте їх у нано-вікно.

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

[Re-enable 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.hibernate-ignore-inhibit
ResultActive=yes

Потім збережіть зміни та закрийте нано- та перезавантажте систему, щоб сплячий режим з’явився на екрані „Параметри живлення”.

Довідка: Як мені сплячий комп’ютер? в офіційній документації на Ubuntu 16.04.

Сподіваюся, це спрацює. Це спрацювало для мене після спробу всіх інших варіантів.


Після редагування файлу нам потрібна перезавантаження, щоб сплячий режим з’явився у розділі "Параметри живлення".
липня 1717 року

21
"sudo pm-hibernate" вбив мою систему негайно без попередження. Ви повинні сказати людям, що це відбудеться.
Yair Daon

найкраща відповідь. Це також працює 17.4 та 17.10.
Саураб Бхандарі

1
Ця відповідь у поєднанні з тим, хто сказав додати "resume =" до GRUB_CMDLINE_LINUX_DEFAULT, вирішив це для мене - thx!
Крістоф

У моєму розділі swap є 17 ГБ оперативної пам’яті та 16 Гб оперативної пам’яті, чому це не працює? Це, здається, перебуває в сплячому режимі, оскільки потрібно вимкнути комп’ютер назавжди, тоді як, якщо я роблю "вимкнення", він вимикається практично негайно. Але коли я знову включаю комп’ютер, все закрито, і я повинен почати заново. Це зовсім не зимує. Чому він не може бути таким простим, як у Windows? Я хотів би допомогти, якщо хтось має ідеї про те, як я можу змусити його нормально перезимувати.
користувач1271772

20

Я думаю, як увімкнути сплячу для 16.04 відповідь всім відомо, як описано в Ubuntu Wiki (Дивіться нижче, якщо вам потрібні кроки). Але речі, які потребують перевірки, не є ретельними. Принаймні, це я знайшов.

Що потрібно перевірити

З моїх власних тестів я принаймні знайшов одну додаткову перевірку, яку слід виконати. Я про це ніде в Інтернеті не знайшов.

Ось кілька перевірок -

  1. Переконайтеся, що ви не використовуєте жодних розділів btrfs . Так . З мого тесту я виявив, що якщо у вас є розділи btrfs , сплячий режим не працюватиме. Видалення чи зміна типу розділу ext4не допомогло мені. Мені потрібно було зняти btrfs-toolsпакет.

    sudo apt-get purge btrfs-tools
    

    Можливо, ви хочете перевірити інші нові типи розділів, які недостатньо перевірені. Без вилучення пакета також може працювати чорний список драйверів, але я цього не перевіряв.

  2. Також вам потрібно перевірити, чи є у вас swap-розділ, достатньо великий для вмісту оперативної пам'яті. Якщо ваша оперативна пам’ять становить 4 Гб, обмін повинен бути не менше 4 Гб (для виділення безпеки потрібно виділити ще кілька МБ).

Кроки, щоб увімкнути сплячку

Він передбачає ці кроки

  1. Створіть файл як корінь у /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla

    sudo -i nano /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
    
  2. Помістіть цей вміст у цей файл

    [Re-enable hibernate by default in upower]
    Identity=unix-user:*
    Action=org.freedesktop.upower.hibernate
    ResultActive=yes
    
    [Re-enable 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.hibernate-ignore-inhibit
    ResultActive=yes
    
  3. Збережіть файл, натиснувши Ctrl- O. Вийдіть із Ctrl-X

  4. Перезапустіть polkitdдемон

    sudo systemctl restart polkitd.service
    

Це повинно включати сплячий режим.


2
Спасибі, Анвар. Я подав помилку № 1619846 і надіслав вам свою відповідь вище. Будь-який шанс запропонувати точніші зміни / доповнення на цій сторінці в офіційній документації?
Gunnar Hjalmarsson

1
@GunnarHjalmarsson Я б запропонував цей застереження. Але мені знадобиться більше тестерів, які це підтверджують. Повідомлю вас пізніше
Анвар

Гаразд, тоді поговоримо більше.
Гуннар Хяльмарссон

Я встановив на btrfs розділ і очистив btrfs-toolsзгідно з вашими інструкціями. Досі не може перезимувати.
Oxwivi

1
На диску є лише vfatUEFI і btrfsта swap. Я насправді підозрюю, що це пов'язано з обладнанням (ноутбук AMD). Я збираюся протестувати це в іншій системі з btrfs і повернутися до вас.
Oxwivi

7

Безпечна завантаження

(Я задавав подібне запитання, просячи зосередитись на системних відповідях, поділившись тут своїм рішенням для людей, які слідують за цим запитанням)

Це рішення походить від тем Fedora (вони перейшли на системний деякий час тому, щоб було більше матеріалів).

У моєму випадку (свіжа установка 16.04.1 на машину, яка завжди підтримувала сплячку), виклик застарілого sudo pm-hibernate, здавалося, нічого не робив, і сучасний системний підхід systemctl hibernateповернеться:

Failed to hibernate system via logind: Sleep verb not supported

Виявляється, винуватцем було захищене завантаження: встановивши 16.04, вас запитують, що ви хочете з ним робити (що, наскільки я можу пригадати, це нова річ), і я продовжував її вмикати, не замислюючись над цим.

На моїй машині із захищеним завантаженням увімкнено cat /sys/power/disk:

 [disabled]

Після перезавантаження та відключення безпечного завантаження в налаштуваннях BIOS (це специфічно для машини, але зазвичай досить просто) я спробував cat /sys/power/diskі отримав:

 [platform] shutdown reboot suspend 

що виглядає краще. І справді виклик systemctl hibernateпризводить до успішної послідовності сплячки / відлиги.

Більше того, після цього я міг бачити сплячку, доступну як опцію в різних місцях графічного інтерфейсу, без необхідності жодного polkitзлому. Тож здається, що systemdнасправді здогадувався, /sys/power/diskщо система не змогла сплячи.


Я зробив саме те, що ви тут пояснили. Але після того, як я виконую команду "systemctl hibernate", екран зачахнув чорним кольором протягом 3 секунд, тоді робочий стіл повернувся з усіма відкритими програмами, як і до того, як я виконав команду. Коли я виконав команду "cat / sys / power / disk" ... він показав мені цей текст: "[platform] shutdown reboot suspend test_resume", який схожий на результат, коли ви виконали те саме зі своєї сторони, але останній текст : "test_resume". Чи маєте ви уявлення, що я міг би спробувати вирішити свою проблему?
foxhard

Не надто впевнено, схоже, що сплячка не працює з коробки на вашому обладнанні, тому її вимкнено за замовчуванням, як вказували інші. Ви можете почати окреме запитання щодо вашої конкретної проблеми.
Марк

Тільки напівробота для мене. Зимує, але замість того, щоб прокинутися від сплячки, переходить до звичайного завантаження, а потім назавжди застрягає до важкого фізичного відключення.
мат

6

Ця інструкція працювала для моєї установки Ubuntu 18.04.

  1. sudo apt install hibernate Він встановить сплячу та інші залежності, необхідні для сплячки
  2. grep swap /etc/fstab (fing UUID)
  3. sudoedit /etc/default/grub У рядку GRUB_CMDLINE_LINUX_DEFAULT = "тихий сплеск" додайте UUID swap. Рядок виглядає таким чином GRUB_CMDLINE_LINUX_DEFAULT = "тихе резюме сплеску = UUID заміна"
  4. sudo update-grub
  5. Перезапуск та після перезавантаження sudo systemctl hibernate. Якщо все працює нормально, додайте меню.
  6. sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla тепер вставте це:
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable 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.hibernate-ignore-inhibit
ResultActive=yes

скопійовано з https://askubuntu.com/a/819891/712203

  1. Перезавантажте комп'ютер
  2. Встановіть https://extensions.gnome.org/extension/755/hibernate-status-button/

1
замість додавання фіксованого значення, щоб /etc/default/grubрозглянути можливість оновлення initramfs за допомогою update-initramfs -u -k allта шукати повідомлення типу The initramfs will attempt to resume from /dev/dm-0. Це автоматично встановить пристрій відновлення.
ukos

Дякую, прекрасно працює на Ubuntu 18.04! Зауважте, що якщо ви вперше використовуєте розширення gnome, вам потрібно буде встановити розширення для браузера та з'єднувач. Це пояснюється у посилання розширення вгорі.
Карим Сонбол

4

Розширюючи власний коментар на відповідь kelvinelove, файл, який він пропонує редагувати, не існував у моїй системі (свіжий Ubuntu 16.04). Натомість я зробив це:

  1. sudo nano /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla

  2. Подивіться на ці розділи (вони розташовані прямо один від одного):

    [Вимкнути сплячий режим за замовчуванням у upower] Identity = unix-user: * Action = org.freedesktop.upower.hibernate ResultActive = ні

    [Вимкнути сплячий режим за замовчуванням увійти] Ідентифікація = unix-користувач: * Дія = org.freedesktop.login1.hibernate; org.freedesktop.login1.handle-hibernate-key; ResultActive = ні

  3. Змініть ResultActive = ні на ResultActive = так для обох.

  4. Натисніть Ctrl + O, щоб зберегти файл.
  5. Перезавантажте комп'ютер
  6. Опція сплячого режиму тепер доступна у ваших меню живлення.

EDIT: Gunnar зазначив, що цей файл буде перезаписаний, якщо певний пакет оновлюється, тому залежно від ваших намірів це, швидше за все, не найкраще рішення.

Джерело: http://www.zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04/


Файл у, /etcяк передбачається, не існує за замовчуванням. Це файл конфігурації, який ви створюєте. Як редагувати вище, редагування файлу, що належить пакету, є поганою порадою, оскільки він буде перезаписаний при наступному оновлення пакета.
Gunnar Hjalmarsson

@GunnarHjalmarsson Якщо це так, я б стверджував, що слід констатувати, що він може не існувати. Я очікую більше від відповіді "Запитати Ubuntu" з найбільш високим рейтингом, ніж "скопіювати / вставити цю команду" -> "введіть цю" відповідь у стилі, що не потребує перевірки того, чи правильно ви робите (крім перевірки, чи працювало) . Що робити, якщо хтось знайде таку відповідь через пару років, але боїться її спробувати, оскільки файл порожній, а в інструкціях чітко зазначено, що потрібно додати до файлу, маючи на увазі, що він існує? Тим не менш, я ціную інформацію, додасть її у відповідь для завершення.
fgblomqvist

1
Справедливий пункт; Я відредагував відповідь NirajW з цим уточненням. Слід зазначити, що оригінальне джерело інформації на цій сторінці говорить про створення .
Gunnar Hjalmarsson

Це ідеально, ви врятували мене братика :)
Азам Альві

4

Для мене це працює, щоб встановити hibernateпакет, перезавантажити і потім запустити sudo hibernate-disk. Я впевнений, що можна додати його до меню, але для мене це не варто.


3

По-перше, я рекомендую перевірити, чи ваша машина підтримує сплячку, оскільки причина, чому сплячка за умовчанням відключена, полягає в тому, що вона іноді має неприємні результати на деяких машинах. Перевірте свій апарат, відкривши термінал ( Ctrl+ Alt+ T) та ввівшиsudo pm-hibernate

Ваша машина повинна перезимувати. Прокиньте свою машину після сплячки і спостерігайте, чи вона погано поводиться чи вона працює нормально. Якщо у вас виникли якісь порушення після сплячки, то я раджу вам не продовжувати наступну процедуру. Однак якщо це спрацьовує добре, продовжуйте активувати сплячку, зробивши це:

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

Відредагуйте відкритий файл і додайте ці рядки:

[Re-enable hibernation]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

Після цього перезавантажте машину, і після входу в режим живлення, у верхньому правому куті налаштувань, ви побачите опцію сну, що додається.


У мене Thinkpad -E550, і він не має проблем зі сплячкою, коли в моїй ОС є ubuntu 15.1 або windows8.1. але використовуючи ubuntu 16.04, коли я використовую команду "sudo pm-hibernate", вона не перебуває в сплячому режимі, і просто екран стає чорним, і машина все ще працює.
Махяр

У моєму випадку команда взагалі нічого не робить. Термінал переходить до нового рядка і чекає наступної команди, тобто попередня команда була виконана. Але це нічого не робитьat all
Аалок

Це не працює для мене. Ubuntu 16.04. Опція сплячого режиму не придумується і не відключається в Налаштуваннях -> Харчування, що-небудь ще?
Даніеле Сегато

Редагування вже існуючої політики краще: zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04
fgblomqvist

Неповний вміст у com.ubuntu.enable-hibernate.pkla. Дивіться відповідь, опубліковану NirajW.
Gunnar Hjalmarsson

3

Тут є кілька дуже хороших ресурсів, які допоможуть вам розібратися з деякими найбільш поширеними проблемами сплячого режиму в Ubuntu.

У моєму випадку, запускаючи Ubuntu 16.10 на Lenovo u300s, для того щоб сплячка працювала правильно, мені довелося зробити наступне:

  • Створіть файл swap відповідного розміру (я зазвичай встановлюю розмір ~ 1x, але я чув до 1,6x та 2x)
  • Змініть, /etc/default/grubщоб включити наступний рядок:

    GRUB_CMDLINE_LINUX_DEFAULT="splash quiet pci=nomsi RESUME=UUID=92781adb-f2a6-4f15-88fc-e1ce801291dd"
    

RESUME посилається на ваш UUID-файл конкретного файлу. Зокрема, на моїй машині pci=nomsiбуло ключовим налаштування .

Удачі!


Невразливий корпус? Навіщо використовувати RESUME?
НельсонГон

1

Ви повинні вручну ввімкнути це з невеликим зусиллям. Він був відключений за замовчуванням.

http://ubuntuhandbook.org/index.php/2014/04/enable-hibernate-ubuntu-14-04/

Тоді, якщо воно не працює, це може бути проблема ядра 4.4.0, і вам, можливо, доведеться оновити ядро.


2
Відповідь стосується 14.04, тоді як питання про 16.04.
Gunnar Hjalmarsson
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.