uswsusp 및 s2ram을 사용하여 Ubuntu 18.04에서 상태를 저장하지 않고 일시 중지

uswsusp 및 s2ram을 사용하여 Ubuntu 18.04에서 상태를 저장하지 않고 일시 중지

Ubuntu 18.04에서 "일시 중단" 기능이 올바르게 작동하지 않습니다. 그러나 최대 절전 모드 기능은 예상대로 작동합니다.

문제 설명: 전원 메뉴 또는 "sudo systemctl suspend"에서 일시 중지를 사용할 때 동작은 다음과 같습니다.

  • 기기가 절전 모드로 전환되고 전원 버튼 LED가 천천히 깜박입니다(숨소리).
  • 노트북을 다시 시작하면 OS가 시작되고 평소 로그인 화면이 보이지만 실행 중이던 애플리케이션이 하나도 복원되지 않습니다.

지금까지 내가 한 일:

$ sudo apt-get install uswsusp
$ sudo update-initramfs -u
$ sudo systemctl edit systemd-suspend.service

systemd-suspens.service에 다음 줄을 붙여넣었습니다.

[Service]
ExecStart=
ExecStartPre=-/bin/run-parts -v -a pre /usr/lib/systemd/system-sleep
ExecStart=/usr/sbin/s2ram
ExecStartPost=-/bin/run-parts -v --reverse -a post /usr/lib/systemd/system-sleep
  • 파일을 저장했습니다. /etc/systemd/system/에 저장됩니다.
  • 달리다:

    $ sudo systemctl 데몬-다시 로드

  • 테스트해보세요:

    $ sudo systemctl 일시 중지

결과는 위에 설명된 대로 노트북이 절전 모드로 전환되지만 다시 시작해도 저장된 세션이 복원되지 않습니다.

systemd-suspens.service 스크립트가 호출되고 있다는 것을 알고 있습니다. ExecStart=/usr/sbin/s2ram 행을 ExecStart=/usr/sbin/s2disk로 변경하면 랩탑은 최대 절전 모드로 전환되어 세션을 복원합니다.

추가 정보:

Hibernate를 작동시키기 위해 나는 grub을 변경했습니다:

sudoedit /etc/default/grub

이 줄을 변경했습니다 :

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
 to:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=<string of hex> resume_offset=34816"
  • 그런 다음 실행했습니다.

    $ sudo 업데이트-그럽

커널 정보:

lsb_release -a

Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:   bionic

uname -a 
Linux <machinename> 4.18.0-21-generic #22~18.04.1-Ubuntu SMP Thu May 16 15:07:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux


sudo s2ram -K
This kernel has KMS support.

누락된 단계나 구성 항목이 있습니까?

답변1

답을 많이 검색하고 테이블에 머리를 부딪힌 후 다양한 소스에서 얻은 정보의 조각과 조각을 함께 엮어 스스로 해결책에 도달했습니다. 이 솔루션은 Ubuntu 18.04를 실행하는 Sony Vaio 모델 VPCEB15FM에서 작동하며 마일리지가 다를 수 있습니다.

최대 절전 모드/일시 중지가 올바르게 작동하도록 하는 데 따른 문제 중 하나는 Ubuntu가 /dev/sda2, /dev/sdb2 등을 로드하고 할당하는 방식이었습니다. 드라이브 할당 순서가 부팅마다 변경되는 경우가 있기 때문입니다. 따라서 첫 번째 단계는 스왑 파티션의 UUID를 식별하는 것입니다. UUID는 일정하기 때문에 훨씬 더 안정적인 마운트 지점이 됩니다.

UUID는 다음에서 얻을 수 있습니다.

sudo blkid

"swap"이라는 항목을 찾으세요.

/dev/sda2: UUID="5c555600-2e37-477d-62df-6013d61dc36" TYPE="swap" PARTUUID="2f501554-02"

귀하의 UUID는 내 UUID와 다를 것입니다. 내 것을 사용하지 말고 당신의 것을 사용하십시오.

스왑 파티션 대신 스왑 파일을 사용하는 경우 기본 Linux 파티션의 UUID를 사용하고 스왑 파일에 대한 오프셋도 알아야 합니다.

스왑 파일에 대한 오프셋을 얻으려면:

sudo filefrag -v /swapfile

출력은 다음과 유사합니다.

ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   32767:      34816..     67583:  32768:            
   1:    32768..   63487:      67584..     98303:  30720:            
   2:    63488..   96255:     100352..    133119:  32768:      98304:

찾고 있는 오프셋은 첫 번째 "physical_offset"이며, 이 경우 34816입니다.

이제 시작하는 데 필요한 정보를 얻었습니다.

/etc/default/grub 수정

sudoedit /etc/default/grub

줄을 변경하십시오 :

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

스왑 파티션을 사용하여 다음을 수행하는 경우:

GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=5c555600-2e37-477d-62df-6013d61dc36"

스왑 파일을 사용하여 다음을 수행하는 경우:

GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=5c555600-2e37-477d-62df-6013d61dc36 resume_offset=34816"

uswsusp를 설치합니다.
그러면 s2disk, s2ram 및 s2두 가지 방법이 모두 설치됩니다.

sudo apt-get install uswsusp

systemd-hibernate.service 및 systemd-suspens.service를 설정합니다.
이러한 파일은 /etc/systemd/system/에 있거나 아직 존재하지 않는 경우 해당 파일에 생성됩니다.

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

참고: 내 시스템에는 /lib/systemd/system-sleep 경로가 있고 다른 시스템에는 /usr/lib/systemd/system-sleep과 같은 다른 위치가 있을 수 있습니다.

sudo systemctl edit systemd-suspend.service

다음 줄을 붙여넣으세요.

[Service]
ExecStart=
ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
ExecStart=/usr/sbin/s2both
ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep

"일시 중지" 구성에서는 s2ram 대신 s2both를 사용하십시오. s2ram은 내 시스템에서 작동하지 않았지만 s2both는 항상 작동합니다.

우분투 18.04 및 20.04:

/etc/uswsusp.conf를 편집합니다.

UUID를 사용하고 스왑 파일을 사용하는 경우 오프셋:

sudo nano /etc/uswsusp.conf

UUID 등을 사용하도록 수정하세요.

# /etc/uswsusp.conf(5) -- Configuration file for s2disk/s2both 
resume device = UUID=5c555600-2e37-477d-62df-6013d61dc36
compress = y
# early writeout = y
# image size = 1741570539
# RSA key file = /etc/uswsusp.key
shutdown method = platform
# only needed if using a swapfile
# resume offset = 34816

참고: 모든 매개변수를 완벽하게 설명하는 uswsusp.conf 매뉴얼 페이지가 있습니다. 다른 설정도 많이 있는데 이것이 최소한으로 필요한 설정입니다. 다른 옵션 중 일부를 볼 수 있도록 주석 처리된 줄이 남아 있습니다.

우분투 22.04:

/etc/suspens.conf를 편집합니다.

2022년 9월 16일 /etc/uswsusp.conf 파일이 /etc/susp.conf로 대체되었습니다.

보다:https://wiki.archlinux.org/title/Uswsusp

sudo nano /etc/suspend.conf

오직 "재개 장치" 줄이 위 지침에서 변경되었으나 다른 모든 내용은 동일하게 유지될 수 있습니다.

대신 다음 줄을 사용하세요.

resume device = /dev/disk/by-label/swap

/etc/initramfs-tools/conf.d/resume 편집

sudo nano /etc/initramfs-tools/conf.d/resume

다음 줄을 추가하세요: RESUME=UUID=5c555600-2e37-477d-62df-6013d61dc3

참고: 스왑 파일을 사용하는 경우 오프셋을 추가해야 합니다. 추가: 재개 오프셋 = UUID 뒤의 34816

좋아, 다양한 구성 항목을 처리해야 합니다.

grub 및 initramfs를 업데이트합니다.

sudo update-grub
sudo update-initramfs -u  or update-initramfs -u -k all  to do all kernels

우분투를 다시 시작하십시오.
재부팅 후 최대 절전 모드 및 일시 중지 기능을 테스트합니다. Hibernate는 이력서 파일을 스왑에 쓰고 머신을 종료하는 데 몇 분이 걸릴 수 있습니다. 당황하지 말 것. 일시 중지가 조금 더 빠릅니다.

모두 테스트해 보세요!

sudo systemctl hibernate
sudo systemctl suspend

당신이 봐야 할 것:

  • 최대 절전 모드 - 시스템을 완전히 종료하며 몇 분 정도 걸립니다. 컴퓨터를 다시 시작한 후 응용 프로그램에 다시 로그인해야 합니다. 참고: 재개 프로세스는 몇 분 정도 걸릴 수 있으며 재개가 진행되는 동안 시스템이 정지된 것처럼 보일 수 있습니다. 인내심을 가지십시오.
  • 일시 중지 - 시스템이 "절전" 모드로 전환되고 전원 표시등이 천천히 깜박입니다(숨소리). 주 전원 버튼을 누르면 기기의 절전 모드가 해제됩니다. 로그인 화면이 표시되고 애플리케이션이 재개되어야 합니다.

추가 단계:
전원 메뉴 드롭다운에서 절전/일시 중지 모드로 들어갈 수 있어야 합니다. 드롭다운을 열 때 Alt 키를 누릅니다. 전원 아이콘이 절전 아이콘으로 변경되어야 합니다.

최대 절전 모드 메뉴 옵션도 추가할 수 있습니다. "ubuntu add hibernate power menu"를 검색하면 이에 대한 좋은 튜토리얼이 이미 있습니다.

관련 정보