Hibernate и резюме из файла подкачки

Я настроил новую установку Ubuntu в Notebook для использования файла подкачки вместо раздела подкачки.

По умолчанию невозможно перевести Ubuntu в спящий режим с помощью файла подкачки, поэтому я попробовал это руководство , но оно относится к grub1 , и теперь Ubuntu использует Grub2 .

Кто-нибудь знает, как это сделать?

23
задан 13 March 2017 в 08:31

3 ответа

Будьте в спящем режиме с Файлом подкачки с помощью uswusp

Хотя возможно быть в спящем режиме к файлу подкачки, и это, предположительно, работает с systemd, в спящем режиме путем установки параметров ядра. Однако я не мог заставить это возобновляться так вместо этого переключенный на использование uswsusp (программное обеспечение пространства пользователя приостанавливают). Вот шаги, которые я использовал на Ubuntu 17.04/17.10.

Создайте файл подкачки

Команды для создания отформатированного файла подкачки на 4 ГиБ, смонтированного и добавленного к /etc/fstab:

sudo fallocate -l 4g /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab

Проверьте раздел файла подкачки

sudo findmnt -no SOURCE,UUID -T /swapfile
> /dev/sda1 11cc33ee-1234-abcd-1234-ddeeff112233

Программное обеспечение пространства пользователя установки приостанавливает (uswsusp)

sudo apt install uswsusp

Настройте uswsusp

Создать /etc/uswsusp.conf и воссоздайте initramfs:

sudo dpkg-reconfigure -pmedium uswsusp
  • Yes 'Продолжаться без допустимой области подкачки?' (Мастер не файл подкачки набора все же.)
  • Выберите раздел, от которого своп-файл находится на, перекрестная ссылка с деталями findmnt выше. (Note:not сам своп-файл)

Примечание: Любые изменения, вручную внесенные в /etc/uswsusp.conf потребует воссоздания initramfs впоследствии с этой командой:

sudo update-initramfs -u

Тест uswusp в спящем режиме

sudo s2disk

Должен быть snapshot сообщения на экране на в спящем режиме и возобновляются.

s2disk использования с systemd в спящем режиме

По умолчанию systemd будет использовать свой собственный, в спящем режиме команды, так замените их командами uswusp путем переопределения systemd-hibernate.service:

sudo systemctl edit systemd-hibernate.service

В текстовом редакторе, который открывается, помещает следующий текст (пустой ExecStart требуется). Затем сохраните и выйдите:

[Service]
ExecStart=
ExecStart=/usr/sbin/s2disk 
ExecStartPost=/bin/run-parts -a post /lib/systemd/system-sleep

Это создаст /etc/systemd/system/systemd-hibernate.service.d/override.conf файл с деталями переопределения.

Тест systemd в спящем режиме:

systemctl hibernate 

Примечание: Проверять что systemd override.conf был создан, загружен и никакие ошибки, выполнен:

systemctl status systemd-hibernate.service

Ссылки:

21
ответ дан 13 March 2017 в 08:31

Я быстро прочитал руководство и, если я правильно понял, вам просто нужно указать опции resume в командной строке Linux. С Grub2 это действительно просто, и ваши изменения всегда будут сохранены. Вам нужно отредактировать файл /etc/default/grub, а именно эту строку:

GRUB_CMDLINE_LINUX="resume=... resume_offset=..."

После этого запустите sudo update-grub, чтобы изменения вступили в силу.

Изменение GRUB_CMDLINE_LINUX не повлияет на другие ваши установки Linux (поскольку /etc/grub.d/30_os-prober не использует эту переменную).

О проблеме, с которой вы столкнулись: зашифрован ли раздел файла подкачки? Если это так, гибернация не будет работать. Если нет, то вывод filefrag -v /swapfile может оказаться полезным.

0
ответ дан 13 March 2017 в 08:31

Вот то, что я сделал, чтобы заставить его работать с Ubuntu 18.04.

  • Сделайте Ваш /swapfile имейте, по крайней мере, размер своей RAM

    sudo swapoff /swapfile
    sudo dd if=/dev/zero of=/swapfile bs=$(cat /proc/meminfo | grep MemTotal | grep -oh '[0-9]*') count=1024 conv=notrun
    sudo mkswap /swapfile
    sudo swapon /swapfile
    
  • Отметьте UUID раздела, содержащего Ваш /swapfile:

    $ sudo findmnt -no SOURCE,UUID -T /swapfile
    /dev/nvme0n1p5 20562a02-cfa6-42e0-bb9f-5e936ea763d0
    
  • Реконфигурируйте пакет uswsusp для корректного использования своп-файла:

    sudo dpkg-reconfigure -pmedium uswsusp
    # Answer "Yes" to continue without swap space
    # Select "/dev/disk/by-uuid/20562a02-cfa6-42e0-bb9f-5e936ea763d0" replace the UUID with the result from the previous findmnt command
    # Encrypt: "No"
    
  • Редактирование SystemD в спящем режиме сервисное использование sudo systemctl edit systemd-hibernate.service и заполните его следующим содержанием:

    [Service]
    ExecStart=
    ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
    ExecStart=/usr/sbin/s2disk
    ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep
    
  • Отметьте смещение резюме Вашего /swapfile:

    $ sudo swap-offset /swapfile
    resume offset = 34818
    
  • Настройте Личинку для возобновления от своп-файла путем редактирования /etc/default/grub и измените следующую строку:

    GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=20562a02-cfa6-42e0-bb9f-5e936ea763d0 resume_offset=34818 quiet splash"
    
  • Личинка обновления:

    sudo update-grub
    
  • Создайте следующее /etc/initramfs-tools/conf.d/resume:

    RESUME=UUID=20562a02-cfa6-42e0-bb9e-5e936ea763d0 resume_offset=34816
    # Resume from /swapfile
    
  • Обновление initramfs:

    sudo update-initramfs -u -k all
    

Теперь можно быть в спящем режиме с sudo systemctl hibernate.

Можно также создать те сценарии:

    sudo tee /usr/local/bin/gotosleep <<EOF
    dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    sleep 2
    sudo /usr/sbin/s2both
    EOF
    sudo chmod +x /usr/local/bin/gotosleep
    sudo tee /usr/local/bin/gotohibernation <<EOF
    dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    sleep 2
    sudo systemctl hibernate
    EOF
    sudo chmod +x /usr/local/bin/gotohibernation

Таким образом, можно спать с gotosleep или будьте в спящем режиме с gotohibernation.

Необходимо смочь выполниться sudo s2both, sudo s2ram и sudo systemctl hibernateне имея необходимость вводить Ваш пароль для предыдущих сценариев для работы.

Вы могли сделать это, например, путем создания a powerdev группа, добавляет Ваш текущий пользователь к нему и настраивает следующую конфигурацию sudoers (отредактируйте его с sudo visudo -f /etc/sudoers.d/powerdev):

     %powerdev ALL=NOPASSWD: /usr/sbin/s2both, /usr/sbin/s2ram, /bin/systemctl hibernate

Документация использовала:

11
ответ дан 13 March 2017 в 08:31

Другие вопросы по тегам:

Похожие вопросы: