Linux 核心 4.9.0、Debian 9 上的休眠恢復失敗
我最近將核心從 3.16.4 (Debian jessie) 升級到了 4.9.0 (Debian stretch)。一切都很好,直到我嘗試“休眠”(掛起到磁碟)。
當我在 LXDE 中使用休眠選項時,它似乎處於休眠狀態。我可以聽到磁碟主軸滴答作響和寫入數據。但是從休眠狀態恢復時會出現問題。核心成功地從交換中恢復了映像,但隨後凍結並重新啟動,所有工作都失去了。我在網際網路上的任何地方都找不到答案。人們只是在解決一些關於未設置 /etc/initramfs-tools/conf.d/resume 或設置核心參數或在 /etc/fstab 中輸入錯誤的錯誤。我有這些正確的。更正 /etc/initramfs-tools/conf.d/resume 中的 UUID,更正 fstab 並且不設置恢復核心參數。
- 我將擴展分區之外的交換分區移至主分區。UUID 已保存並應用於新的交換。
- 系統達到“Restoring image 100%”,然後是“Suspending consoles”,然後關機並正常啟動,所有工作都失去了。
- 嘗試乾淨安裝,但沒有運氣。
- 僅在 i386(32 位 x86)上發生,amd64(64 位 x86)不會受到影響。
磁碟分區表佈局:
NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 ext4 HDD <ROOT-UUID> / └─sda2 swap HDD-SWAP <SW-UUID> [SWAP] sr0
sda2 在升級之前是合乎邏輯的(駐留在內部擴展)。
Fstab:
UUID=<ROOT-UUID> / ext4 errors=remount-ro 0 1 UUID=<SW-UUID> none swap sw 0 0
/etc/initramfs-tools/conf.d/resume
RESUME=UUID=<SW-UUID>
核心命令行
BOOT_IMAGE=/boot/vmlinuz-4.9.0-3-686-pae root=UUID=<ROOT-UUID> ro quiet
系統資訊:
Computer: Compaq CQ60-120ec Swap Size: 3.5GiB Processor: AMD Athlon X2 64 QL-66 GPU: Nvidia Geforce 8200M G Memory: 2G DDR2 667MHz Desktop Environment: LXDE Debian Version: 9 (stretch) Kernel version: 4.9.0-3 Graphics Driver: nvidia legacy 304xxx
(我知道處理器是 64 位的,但它最初帶有 32 位作業系統,所以在我檢查 /proc/cpuinfo 之前我認為它是 32 位的)
該問題是由於x86-32上的 hibernate 和kASLR之間的衝突造成的。這可以通過使用nokaslr核心引導選項禁用 kASLR 來解決。x86-64不受影響。
對於 Grub,這可以通過編輯 /etc/default/grub 並將nokaslr添加到引導選項來完成,例如: GRUB_CMDLINE_LINUX_DEFAULT=“quiet nokaslr "
然後執行update-grub更新配置並重新啟動嘗試一下。
我遇到了完全相同的問題,似乎只有 PAE 核心受到該問題的影響。沒有 PAE 的相同核心可以正常工作。我的解決方法是安裝 linux-image-686 並解除安裝 linux-image-686-pae 和 linux-image-4.9.0-4-686-pae。確切的核心版本可能會因升級而隨時間變化,但基本上目前執行的 PAE 核心需要更換為沒有 PAE 的核心。
它實際上與CPU的PAE支持無關,因為我的CPU根據/proc/cpuinfo支持PAE。但無論如何,PAE 在舊筆記本上用處不大。
它也與核心 4.9 PAE 無關,因為來自 Debian backports 的核心 4.13 PAE 也會發生同樣的問題。