systemctl
어려운 경우에 사용 하고 작동하는 최대 절전 모드
나를 위해, pm-hibernate
항상 실패합니다. 약간의 조정 후, systemd (16.04 이상의 시스템 초기화) 인터페이스를 사용하여 최대 절전 모드를 사용할 수있었습니다. 또한 스왑 파일로 17.04에서 작동하도록했습니다. 이 사례 연구는 문제가있는 다른 사람들에게 유용 할 수 있습니다.
첫 시도:
sudo systemctl hibernate
실패하면 문제 해결을 시작하십시오. 최대 절전 상태 (HTD 또는 ACPI S4)에서 컴퓨터 상태는 디스크에 기록되므로 전원을 보존 할 필요가 없습니다. 상태는 스왑 파티션 또는 스왑 파일에 기록됩니다. 참고 : BTRFS를 사용하는 경우 스왑 파일을 사용하지 마십시오. 파일 시스템이 손상 될 수 있습니다.
스왑 파티션이나 스왑 파일은 최대 절전 모드를 허용 RAM과 같은 크기해야 할 수도 있습니다,하지만 당신이 적어도 2/5 RAM의 크기 인 경우 최대 절전 모드 할 수있는 좋은 기회가에 따라,이 아치 위키 페이지 스왑 크기를 늘리기 전에 다른 단계를 먼저 시도하십시오.
문제가 예상 된 이력서 대신 클린 부팅을하는 경우 최소한 디스크 이미지를 찾기 위해 부팅 매개 변수를 설정해야합니다.
스왑 파티션을 찾으십시오.
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"
최대 절전 모드에서 다시 시작하면 무엇이 잘못되었는지 알 수있었습니다.
필자의 경우 재개 후 WiFi를 잃어 버렸고 커널은 대부분의 명령 (예 : /sys
모듈을로드하거나 모듈을로드하거나 systemctl
명령을 실행하지 않음)이 작동하지 않아 분명히 화를 냈습니다 . 프로세스가 시작되어 멈추는 것처럼 보입니다 (이 모든 것이 물론 재부팅 후 정상으로 돌아갑니다). 시스템을 매우 느리게 종료하고 모든 디버그 메시지를 읽는 것을 보면서 "brcm"에 많은 문제가 있음을 알았 기 때문에 Broadcom 무선 드라이버 모듈이 책임이 있다고 생각했습니다. 물론 최대 절전 모드를 조정하여 모듈을 먼저 언로드하십시오.
sudo modprobe -r brcmfmac
sudo systemctl hibernate
재개시 나는 모듈을 다시 삽입
sudo modprobe brcmfmac
그리고 모든 것이 완벽하게 작동했습니다. 또한 btsdio
호환되지 않는 것으로 보이는 모듈 을 블랙리스트에 추가해야 합니다brcmfmac
업데이트 : 17.04에서 스왑 파일을 사용하는 최대 절전 모드.
다시 한 번 Arch wiki 페이지와 추가 땜질을 통해 17.04에서 스왑 파일을 사용하여 최대 절전 모드로 전환 할 수있었습니다. 여기에는 추가 부팅 매개 변수가 필요했습니다. 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
입니다. 파티션을 다시 시작하려면 여전히 부팅 매개 변수를 설정해야합니다. 이것은 루트 파티션 (또는 스왑 파일이있는 파티션)이 될 것입니다. 내 매개 변수는 다음과 같습니다.
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를 사용하고, 스왑에서 다시 시작하기위한 부팅 매개 변수를 설정하고, 버그가있는 드라이버를 식별하고 언로드하십시오. 해당 모듈없이 시스템이 오랫동안 작동하지 않거나 여러 모듈을 언로드해야하는 경우 간단한 스크립트를 사용하여 최대 절전 모드를 시작하는 것이 더 쉬울 수 있습니다.