使用 休眠後systemctl hibernate
,系統會正常啟動,就像關機一樣。我在核心行中有resume參數,在mkinitcpio.conf中有resume鉤子
這些是相關的內核訊息:
$ dmesg | grep -i swap
[ 0.000000] Command line: initrd=\initramfs-linux.img root=/dev/sda2 rw resume=/dev/sda4
[ 0.000000] Kernel command line: initrd=\initramfs-linux.img root=/dev/sda2 rw resume=/dev/sda4
[ 0.350295] PM: Checking hibernation image partition /dev/sda4
[ 8.776686] Adding 8191996k swap on /dev/sda4. Priority:-1 extents:1 across:8191996k FS
$ dmesg | grep -i hibern
[ 0.350295] PM: Checking hibernation image partition /dev/sda4
[ 0.350301] PM: Hibernation image not present or could not be loaded.
所以剩下的唯一可能就是systemctl
沒有寫入磁碟。事實上,當我運行該命令時,螢幕首先會空白幾秒鐘,然後我可以再次看到我的終端,最後它會自行關閉。
我讀到 pm-utils 不能很好地與 systemd 配合使用,所以我不想切換到那些。有什麼建議麼?
謝謝!
答案1
要詳細闡述@AdrianRatnapala 的評論,您必須:
尋找交換分區的 uuid。假設分區是sdb3,那麼
$ ls -l /dev/disk/by-uuid/ | grep sdb3 lrwxrwxrwx 1 root root 10 окт. 9 08:59 1dd7e123-1f82-45f0-a202-0ff3ea6f081a -> ../../sdb3
打開
/etc/default/grub
,找到以 開頭的行GRUB_CMDLINE_LINUX_DEFAULT="
。在引號之間添加resume=/dev/disk/by-uuid/your-swap-uuid
。舉個例子:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/disk/by-uuid/1dd7e123-1f82-45f0-a202-0ff3ea6f081a"
- 以 root 身分運行
update-grub
- 需要重新啟動才能使用新的核心命令列。
答案2
我想在這裡分享我的成功,因為它可能會幫助其他人解決這個問題。對於想要跳過細節的人來說,底線是:更改 /etc/default/grub 檔案中的 GRUB_CMDLINE_LINUX_DEFAULT 行並執行 update-grub 後,在嘗試休眠之前完全關閉並重新啟動電腦。
詳細資訊:我剛剛在我的 Lenovo ThinkPad T480(雙重開機 Debian 9 和 Windows)的 Linux 安裝上成功實現了休眠,按照上述建議將resume=UUID= 參數添加到 /etc/default/grub 中的 GRUB_CMDLINE_LINUX_DEFAULT 行。但第一次沒有成功。我添加了參數,運行 update-grub,並嘗試休眠(systemctl-hibernate)。系統似乎處於休眠狀態,但是當重新啟動時,先前的螢幕影像會出現並保留幾秒鐘,然後機器進入通常在首次啟動時出現的登入畫面;冬眠前的所有工作都消失了。我終於注意到(grep 'command line' syslog)更改的 GRUB_CMDLINE_LINUX_DEFAULT 行尚未傳遞到核心。經過更多努力,我發現完全關閉並重新啟動會導致更改的行被傳遞(再次 grep '命令行' syslog )。之後,systemctl hibernate 像以前一樣引發休眠,但在開機時機器的先前狀態已正確恢復。