Ubuntu 18.04 не может возобновиться после спящего режима

17

Hibernate работал правильно, когда я использовал Ubuntu 17.04. После обновления до 17.10 я не мог возобновить работу из-за черного экрана после возобновления ( эта ошибка ).

После обновления до 18.04, если я пытаюсь запустить компьютер после спящего режима, он загружается, как будто не было спящего режима.

Камиль
источник
У меня та же проблема с 18.04, я думаю, что решение должно быть в том, чтобы указать правильный раздел для резюме, но я все еще не мог найти способ сделать это. Все, что я нашел, я Google не работал для меня.
user2819650
Раздел настроен правильно в /etc/initramfs-tools/conf.d/resume к моему свопу. Я подозреваю, что либо гибернация не выполняется правильно, либо возобновление во время загрузки не работает. Но я не знаю, как отладить его дальше. Системный журнал и dmesg не дают никаких подсказок, в чем проблема.
Камил

Ответы:

29

Внесены изменения в настройки по умолчанию по сравнению с предыдущими LTS (16.04). В моем случае гибернация не работала до тех пор, пока я не сделал несколько шагов, среди которых был увеличен размер файла подкачки, он включен, убедился, что политики разрешают это и т.д.

Это может быть мой самый длинный ответ на весь StackExchange, поэтому я попытался сделать заголовки описательными .

Сапоги как не было гибернации

Было бы разумно взглянуть на ваши журналы ( dmesgможет помочь) и посмотреть, если что-нибудь есть. Существуют причины, когда, несмотря на то, что вы говорите системе о спящем режиме, она на самом деле не будет или вместо этого будет приостановлена ​​в оперативную память (спит).

Просмотр kern.logи syslogпоиск сообщений, связанных с гибернацией, также не повредит. Разделы, начинающиеся с «проблема», могут помочь вам с конкретными проблемами.

Файл подкачки или раздел подкачки

Одним из важных изменений является то, что теперь у вас нет раздела подкачки, но у вас есть файл подкачки.

Файл подкачки может не работать для вашего оборудования / драйверов / ОС и гибернации.

Спящий режим отключен

Политики также могут отключать или запрещать спящий режим.

жаргон

Приостановить к ОЗУ - ОЗУ хранит данные, компьютер быстрее переходит в спящий режим, потребляет больше энергии при приостановке, быстрее просыпается. Некоторые называют это сном.

Приостановить на диск - он же спящий режим. Оперативная память сохраняется для подкачки (раздел или файл), компьютер медленнее спит, потребляет меньше энергии при спящем режиме, медленнее просыпается.

Sustain-to-RAM в Linux от Рафаэля Дж. Высоцкого и А. Леонарда Брауна

Предпосылки - места достаточно?

Чтобы перейти в спящий режим, вам необходимо (упрощение) сохранить всю оперативную память на жестком диске. Итак, вам нужно выделить достаточно места для этого. Если вы этого не сделаете, это не удастся, и вы не будете в спящем режиме.

  1. free -m скажет вам, сколько памяти у вас есть, сколько вы используете и сколько в вашем свопе.
  2. df -h скажет вам, сколько дискового пространства у вас в каждой точке монтирования и сколько используется, свободно и т. д. Это важно, так как вы можете позже захотеть указать, где будет находиться ваш файл подкачки или какой раздел «обрезать», чтобы иметь достаточно места для вашего обмена.
  3. cat fstabдолжен предоставить вам информацию, если у вас есть раздел или файл подкачки. Согласно Ubuntu Hibernation FAQ swapfileне всегда могут работать с некоторыми комбинациями оборудования / драйверов.

Если вам не хватает места, следуйте часто задаваемым вопросам по Ubuntu swap . В нем рассказывается, как увеличить файл подкачки, добавить другой, проверить, используется ли он и т. Д. С помощью команд и объяснений. Действительно хороший ресурс.

У меня недостаточно места для моей оперативной памяти!

Документы ядра говорят:

/ sys / power / image_size контролирует размер изображения, созданного механизмом приостановки на диск. Может быть записана строка, представляющая неотрицательное целое число, которое будет использоваться в качестве верхнего предела размера изображения в байтах. Механизм приостановки на диск сделает все возможное, чтобы размер изображения не превышал это число. Однако, если это окажется невозможным, он все равно попытается приостановить, используя наименьшее возможное изображение. В частности, если в этот файл записано «0», изображение приостановки будет как можно меньше. При чтении из этого файла будет отображаться текущий размер изображения, который по умолчанию равен 2/5 доступной оперативной памяти.

Итак, попробуйте настроить размер изображения. Как - задайте еще один вопрос, пожалуйста.

Предварительные условия - поддерживает ли ваше ядро ​​приостановку на диск?

Ядро поддерживает все, что перечислено /sys/power/state, поэтому:

cat /sys/power/state

Разрешено (по моим сведениям) записи там включает: mem, standby, freeze, disk. Объяснение:

  • mem- имеет несколько значений, которые именно в вашей системе вы узнаете через cat /sys/power/mem_sleep. У меня есть:s2idle [deep]
  • standby - Приостановка при включении питания (если поддерживается)
  • freeze - Приостановить на холостом ходу (STI)
  • disk- Suspend To Disk (STD), гибернация . Это - вы хотите.

Тогда нам нужно проверить cat /sys/power/disk. Если у вас есть, disabledто ныряйте в своем BIOS в поисках безопасной загрузки - это единственная идея, которую я могу предложить, и единственное, что я знаю, может помешать и отключить спящий режим. Хотя я знаю только о SecureBoot, могут быть и другие помехи, поэтому полезно взглянуть на BIOS, даже если у вас нет «безопасной загрузки».

Читая здесь:

  1. Документы ядра
  2. Debian Wiki о гибернации

TBH, даже если ваше ядро ​​НЕ поддерживает спящий режим, вы можете попробовать его другим способом, прокрутите вниз до разделаInterfaces .

Прочитайте это - предупреждения и проблемы - нет BTRFS

В произвольном порядке:

  1. Не все чипсеты будут работать (у меня нет источников, которые я мог бы здесь привести, поэтому предположим, что это слухи)
  2. У VAIO есть проблемы, предположительно, есть флаг, чтобы противостоять им
  3. SecureBoot часто упоминается как мешающий или отключающий спящий режим
  4. Wake-on-LAN потребляет энергию даже в спящем режиме
  5. Количество модулей (особенно графических) может быть инициализировано ПЕРЕД тем, как ваша система правильно выйдет из режима гибернации - это обычно является причиной появления черного экрана при возобновлении работы . Посмотрите в ArchLinux Wiki советы по устранению проблем. Я бы также предложил Ubuntu FAQ по вопросам гибернации. Просмотр ошибок Launchpad также может дать результаты. IIRC, есть параметр ядра, указывающий в секундах задержку перед возобновлением.
  6. Разрешающая процедура гибернации отличается для разных версий Polkit

Не используйте BTRFS и спящий режим: результатом будут поврежденные данные.

Хочу в спящий режим - своп раздела

Есть случаи, когда люди отказываются от файла подкачки и возвращаются в раздел подкачки. В конце концов, это работало на предыдущих LTS. Я не пробовал, поэтому не буду предлагать указатели.

Хочу в спящий режим - с файлом подкачки

  1. Убедитесь, что у вас есть достаточно места там. Ubuntu swap FAQ говорит вам, сколько вам нужно, команды из вышеупомянутого делают то же самое. Если вам нужна дополнительная информация, задайте еще один вопрос, потому что это длинная тема.
  2. Увеличьте файл подкачки или создайте новый файл с достаточно хорошим размером ( желательно , я согласен с @muru ) и измените его /etc/fstabна новый. Перезагрузка, чтобы увидеть изменения приняты хорошо (сохраните резервную копию, fstabчтобы вы могли легко вернуться на всякий случай.
  3. Направьте ваше ядро ​​на это с помощью соответствующих параметров, чтобы оно знало, с чего продолжить.
  4. Обновите / перенастройте ваш загрузчик и перезагрузите компьютер.

Параметры ядра? Страшно!

Внимательно прочитайте и решите, хотите ли вы это сделать, но это всего лишь способ настройки вашего ядра. Может быть легче перейти в спящий режим с помощью systemdи uswsusp(см. Интерфейсы ниже). Может случиться так, что вы, как и я, в конечном счете решите, что приостановки к оперативной памяти достаточно, и вы не хотите иметь 32 ГБ в файле подкачки (например, не очень хорошо для людей с одним SSD в своих ноутбуках). Но!

  1. Спящий режим для файла подкачки требует resume=знать, в каком разделе находится ваш файл подкачки, и resume_offset=знать, откуда в файле подкачки начинать возобновление.
  2. hibernate на раздел требует resume=указывать на раздел подкачки.
  3. решение проблем с черным экраном вполне может потребовать resumedelay=.

Документы ядра о задержке выхода из спящего режима:

resumedelay = [HIBERNATION] Задержка (в секундах) для приостановки перед попыткой чтения файлов резюме

Обязательные параметры для файла подкачки и гибернации :

резюме = [SWSUSP]

      Specify the partition device for software suspend

      Format:

      {/dev/<dev> | PARTUUID=<uuid> | <int>:<int> | <hex>}

resume_offset = [SWSUSP]

      Specify the offset from the beginning of the partition
      given by "resume=" at which the swap header is located,
      in <PAGE_SIZE> units (needed only for swap files).

      See Documentation/power/swsusp-and-swap-files.txt

Для resume=выбора выберите тот же стиль, что и для rootэлемента fstab. Итак, или /dev/sdaXили UUIDили LVM. Для гибернации в файл - укажите раздел, где находится ваш файл.

Чтение:

  1. https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt
  2. https://wiki.archlinux.org/index.php/Kernel_parameters

Проблема - заголовок подкачки не найден

Файл подкачки должен быть правильно отформатирован. Если ваши журналы сообщают вам об этом, вы либо пытаетесь перейти в спящий режим, либо ваш параметр резюме неверен.

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

См .: /unix/43508/debian-hibernate-problem-pm-swap-header-not-found.

mkswapиспользуется для форматирования файла, подробнее об этом здесь

Проблема! Спячка не допускается!

Проверьте: pm-hibernate(если установлен пакет pm-utils) или systemctl hibernateсообщите, что вам это запрещено. Настройки по умолчанию в Ubuntu начиная с IIRC 12.04.

Решение (я): зависит от вашей версии Polkit, вашей версии Ubuntu и вкуса ... Смотрите этот вопрос . Также может помочь ArchWiki на Polkit .

Информацию о Mint см .: https://forums.linuxmint.com/viewtopic.php?t=259912.

Проблема! Спящий режим отключен чем-то в BIOS!

Тест: cat /sys/power/diskимеет disabled. Журналы показывают «Не удалось перейти в спящий режим системы через logind: глагол сна не поддерживается».

Решение: найдите свой BIOS и найдите проблемную вещь. Выключи это.

Решение 2: попробуйте другой спящий интерфейс.

Смотрите: Как активировать гибернацию в 16.04.1? (systemd) .

Интерфейсы

  1. swsusp - интерфейс ядра низкого уровня. Смотрите Prerequisites - ядро ​​для каких файлов. Прямая запись в файлы может привести к приостановке (в ОЗУ, на диск и в гибридном режиме). По словам SwapFAQ проблематично с гибернацией в файл.
  2. uswsusp - ArchWiki и Debian Wiki и хороший вопрос AskUbuntu с описанием того, как его использовать .
  3. systemd - ArchWiki на нем
  4. pm-utils - AFAIK - это коллекция скриптов, изначально написанных на Debian, - я с радостью приму больше информации.

Заключительные замечания

Для меня это было почти два дня работы, чтобы собрать это. Надеюсь, это поможет вам (и другим) решить вашу проблему быстрее. Есть еще моменты, которые я пропустил, но сейчас 2 часа ночи, и я не хочу больше писать сейчас. Я, конечно, открыт для любых указателей, чтобы сделать это лучше, так что комментируйте. Я отвечу, когда буду спать, работать и т. Д. :-)

Я не уверен, что спящий режим на диске это так здорово. Я пошел со сном в конце. Но для меня проблема заключалась в том, чтобы иметь файл объемом 32 ГБ просто для того, чтобы можно было переходить в режим гибернации, поскольку я обычно вообще избегаю подкачки. Мой начальный файл подкачки был в 2 ГБ, и это было в основном пустым. YMMV. Тем не менее, удачи! И начни с логов!

LAFK говорит восстановить Монику
источник
Отличный ответ! Но то, что в конечном итоге решило мой случай, было связано с часто задаваемыми вопросами по Swap, и оно подсказало мне добавить «resume = UUID» в переменную в моем файле конфигурации grub и / или что-то подобное с initramfs-tools. По какой-то причине у меня был неправильный UUID, который, вероятно, был проблемой. Поэтому я предлагаю для кого-то с похожей проблемой сначала ознакомиться с тем, что написано в разделе «Часто задаваемые вопросы по обмену» в разделе «Как добавить или изменить раздел подкачки?», А также третьим пунктом о спящем режиме.
RimaNari
1
«диск - Suspend To Disk (STD), гибернация. Это - вы хотите». Я единственный, кто получил удовольствие от этого? Спасибо большое.
spakmad
отличный ответ! одно небольшое замечание: на одной из моих машин возобновление работы после спящего режима работало только после второй попытки загрузки (с первой попытки на мониторе ничего не отображалось). я мог бы исправить это, установив HWE-стек: $ sudo apt install linux-generic-hwe-18.04(для некоторых аппаратных средств даже linux-generic-hwe-18.04-edgeстоило бы попробовать ).
Хиро главный герой
1
Ах. Я не собираюсь впадать в спячку! У меня 512 Гб оперативной памяти. О, хорошо ... (У меня достаточно места на жестком диске 10 ТБ, но для перезагрузки потребуются часы!)
Алексис Уилк
9

Используйте UUID раздела подкачки вместо его точки монтирования в параметре RESUME resume=UUID=<#>в обоих /etc/default/grubи/etc/initramfs-tools/conf.d/resume

Создайте запись для раздела подкачки /etc/fstab без точки монтирования примерно так

# Entry for Swap : 
UUID=# none  swap    sw              0       0

В /etc/default/grubя использовал отдельную запись для возобновления гибернации

# FOR HIBERNATION 
GRUB_CMDLINE_LINUX="resume=UUID=..."

Создайте policykit в местном органе власти (pkla)

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

[Enable hibernate to be run via cron]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=yes

После этого обновите initramfs и GRUB.

sudo update-initramfs -u -k all
sudo update-grub

Перезагрузитесь, откройте некоторые приложения и используйте systemctl hibernate(без sudo), чтобы увидеть, работает ли он

Roey
источник
работает отлично! большое спасибо.
Yossarian42
спасибо человек, ты спас меня!
Вахе
1

Для меня это всегда работало до 18.04, а после 18.04 я включил его, как и во многих статьях, но он вдруг перестал работать только вчера (работает нормально в течение 4-5 месяцев),

и вот ... одна вещь, которая снова заработала ...

Скажите grub2, где находится раздел подкачки:

Сначала выясните, в каком разделе он находится, используя следующую команду:

cat /etc/fstab

Мой на sda7, как следующий вывод:

своп был включен / dev / sda7 во время установки

Затем добавьте в Grub2 следующее дополнение к следующей строке, используя следующую команду:

sudo gedit / etc / default / grub

GRUB_CMDLINE_LINUX_DEFAULT = "intel_pstate = отключить резюме = / dev / sda7"

Важная часть resume=/dev/sda7

/ dev / sda7 в моем случае

Затем обновите Grub с помощью следующей команды, и после этого он снова начнет работать идеально:

sudo update-grub

После многих попыток это сработало, возможно, только из-за обновления ядра, которое все испортило, тем не менее, это сработало.

markackerman8-gmail.com
источник
0

надеюсь, это кому-нибудь поможет, но я использую popos / ubuntu 19.04. В моей настройке я был в состоянии гибернации с помощью s2disk или pm-hibernate, но возобновление не удавалось. Чтобы это исправить, моя система загружается с использованием UEFI вместо grub. Мне просто пришлось переустановить загрузчик. Чтобы проверить, используете ли вы UEFI, используйте следующее:

[ -d /sys/firmware/efi ] && echo "Installed in UEFI mode" || echo "Installed in Legacy mode"

если в режиме UEFI я следовал этому руководству, чтобы переустановить загрузчик, это зависит от того, используете ли вы диск nvme или диск sata: https://support.system76.com/articles/bootloader/

убедитесь, что в ваших настройках kernalboot вы указываете раздел или UUID того, откуда продолжить, например, что-то вроде этого:

резюме = UUID = ed8347ed-2eb4-40bc-bc77-cc53b987ed88

Вы можете добавить это одним из следующих способов: 1) заглушка-ядро sudo -a "resume = UUID = ..." 2) отредактируйте файл /etc/initramfs-tools/conf.d/resume и добавьте: resume = UUID = ed8347ed- 2eb4-40bc-bc77-cc53b987ed88

проверьте файл / var / log / syslog на что-то вроде этого: 4 августа, 22:26:42 pop-os / usr / bin / kernelstub [19639]: kernelstub: DEBUG kopts: root = UUID = b37019a8-91f5-445f-94c1 -7359a49ed5df ro quiet loglevel = 0 systemd .show_status = false резюме = UUID = ed8347ed-2eb4-40bc-bc77-cc53b987ed88

Если резюме отсутствует или неправильное, вам необходимо снова обновить загрузочный ядро.

Lingster
источник
0

Помимо создания свопа резюме точки в жратву упоминается в Sam73 в ответ , я обнаружил , что мой Ubuntu 18,04 необходимо также установить laptop-mode-tools:

$sudo apt install laptop-mode-tools

затем измените ENABLE_LAPTOP_MODE_ON_AC=1в файле конфигурации:

$sudo vim /etc/laptop-mode/laptop-mode.conf

запустить режим ноутбука с:

$sudo laptop_mode start

PS Вы можете проверить, если ноутбук запускается или нет

$cat /proc/sys/vm/laptop_mode

Если он печатает 0, laptop_modeон не работает, в противном случае он указывает, что он работает нормально.

Yossarian42
источник