Resume hibernasi gagal pada kernel linux 4.9.0, Debian 9

9

Saya baru-baru ini meningkatkan kernel saya dari 3.16.4 (Debian jessie) ke 4.9.0 (Debian stretch). Semuanya baik-baik saja, sampai saya mencoba "Hibernate" (menangguhkan ke disk).

Ketika saya menggunakan opsi Hibernate di LXDE, sepertinya hibernate. Saya bisa mendengar disk spindle berdetak dan menulis data. Tetapi masalah muncul saat melanjutkan dari hibernasi. Kernel berhasil mengembalikan gambar dari swap, tetapi kemudian macet dan reboot, dengan semua pekerjaan yang hilang. Saya tidak dapat menemukan jawaban di internet. Orang-orang hanya menyelesaikan beberapa kesalahan di sekitar tidak mengatur /etc/initramfs-tools/conf.d/resume atau telah menetapkan parameter kernel, atau salah memasukkan di / etc / fstab. Saya punya ini benar. Perbaiki UUID di /etc/initramfs-tools/conf.d/resume, perbaiki fstab dan jangan setel resume kernel paramter.

  • Saya memindahkan partisi swap di luar partisi extended ke primer. UUID telah disimpan dan diterapkan ke swap baru.

  • Sistem mencapai "Memulihkan gambar 100%" dan kemudian "Menangguhkan konsol", dan kemudian mati dan boot secara normal, dengan semua pekerjaan hilang.

  • Sudah mencoba pemasangan yang bersih, tetapi tidak berhasil.

  • Terjadi hanya pada i386 (32-bit x86), amd64 (64-bit x86) tidak menderita.

Tata letak tabel partisi disk:

NAME   FSTYPE LABEL    UUID                                 MOUNTPOINT
sda                                                         
├─sda1 ext4   HDD      <ROOT-UUID> /
└─sda2 swap   HDD-SWAP <SW-UUID> [SWAP]
sr0

Sda2 itu logis (berada di dalam-diperpanjang) sebelum upgrade.

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>

Kernel cmdline

BOOT_IMAGE=/boot/vmlinuz-4.9.0-3-686-pae root=UUID=<ROOT-UUID> ro quiet

Sistem Informasi:

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

(Saya tahu prosesornya 64bit tapi awalnya 32bit, jadi saya pikir 32bit sampai saya memeriksa / proc / cpuinfo)

Enginecrafter77
sumber

Jawaban:

4

Masalahnya adalah karena konflik antara hibernate dan kASLR pada x86-32 . Ini dapat diatasi dengan menonaktifkan kASLR dengan opsi boot kernel nokaslr . x86-64 tidak terpengaruh.

Untuk Grub ini dapat dilakukan dengan mengedit / etc / default / grub dan menambahkan nokaslr ke opsi boot, misalnya: GRUB_CMDLINE_LINUX_DEFAULT = "quiet nokaslr "

Kemudian jalankan update-grub untuk memperbarui konfigurasi dan reboot untuk mencobanya.


Saya memiliki masalah yang sama persis dan tampaknya hanya kernel PAE yang terpengaruh oleh masalah itu. Kernel yang sama tanpa PAE berfungsi tanpa masalah.

Solusinya bagi saya adalah menginstal linux-image-686 dan menghapus linux-image-686-pae dan linux-image-4.9.0-4-686-pae. Versi kernel yang tepat dapat berubah dari waktu ke waktu karena peningkatan, tetapi pada dasarnya kernel PAE yang saat ini berjalan perlu diganti dengan kernel tanpa PAE.

Sebenarnya tidak ada hubungannya dengan PAE mendukung CPU, karena CPU saya mendukung PAE menurut / proc / cpuinfo. Namun PAE toh tidak banyak digunakan pada notebook lama.

Ini juga tidak ada hubungannya dengan kernel 4.9 PAE karena masalah yang sama terjadi dengan kernel 4.13 PAE dari backport Debian.

Dan saya
sumber
Jawaban yang luar biasa ini pantas mendapatkan lebih banyak, tetapi saya hanya bisa memberikan satu.
peterh
Ya terima kasih saya pikir situs ini kehabisan pakar. (Un) Untungnya saya menemukan bahwa versi amd64 berjalan tanpa masalah, jadi saya pikir mereka berhenti untuk mempertahankan versi 686, tetapi saya tidak tahu bahwa ada versi 686 tanpa PAE. Saya harap debian akan memperbaikinya, jika tidak orang akan mengeluh.
Enginecrafter77
3

Mungkin /etc/uswsusp.confingin entri yang diubah untuk 'perangkat resume', jika ini tidak digunakan, myabe hanya mencoba untuk mengambil UUID lama Anda di semua file /etcuntuk menemukan tempat di mana perubahan diperlukan. Juga update-initramfsakan diperlukan, kataku.

Jaleks
sumber
Tidak ada yang membantu mencoba menginstal uswsusp dan memeriksa apakah file itu benar, tetapi tidak berhasil. Dan tidak ada file konfigurasi di / etc yang berisi UUID lama saya.
Enginecrafter77
2

Saya mendapatkan kesalahan yang sama. Menginstal ulang dengan iso netinst terbaru, yaitu debian-9.1.0-amd64-netinst.iso mengatasinya. Bug tampaknya telah diperbaiki (setidaknya untuk arsitektur ini).

vcc
sumber
Ya saya setuju, ini diperbaiki di amd64 (yaitu x64) tetapi bug masih ada di i386 (alias 686 atau x86)
Enginecrafter77
1

Saya menghapus usssp dan hibernasi berfungsi lagi seperti mantra. BTW Saya pikir itu sudah terjadi sebelum Jessie ketika saya menggunakan driver nvidia, saya diuji menggunakan uswsusp dan harus menghapusnya agar hibernasi berfungsi.

Alain
sumber
Saya tidak memiliki uswsusp diinstal pada pengujian komputer 32-bit, tetapi hibernasi masih tidak berfungsi.
Enginecrafter77
Sangat buruk. Apakah Anda sudah mencoba menghapus driver nvidia dan menggunakan nouveau?
Alain
Ya saya mencoba sepenuhnya membersihkan instalasi Debian 9 (32 bit) tetapi masalahnya masih ada. Ini juga terjadi pada komputer dengan grafik intel, jadi saya pikir itu tidak ada hubungannya dengan GPU.
Enginecrafter77
1

Jika Anda memiliki partisi swap (dengan ukuran yang benar) dan jika Anda mengedit "/etc/initramfs-tools/conf.d/resume" dengan hasil "#blkid" dan i386 tidak akan berhibernasi dengan benar daripada bug di Debians i386 4.9 kernel! Perbarui kernel ke versi yang lebih besar dari 4.9 atau putar kembali ke 3.16 kernel.

Lopi Dani
sumber
0

Maafkan sifat umum dari balasan ini. Saya telah melihat pertanyaan serupa di seluruh Web dan memutuskan untuk menulis satu jawaban untuk semua. Saya mengalami masalah yang sama ketika Anda memutakhirkan Debian-Jessie pada Hp2510. Saya beralih ke Ubuntu-desktop dan menemukannya di sana juga. Saya kemudian melakukan pengujian pada Ubuntu dan Hp2510 sehingga mungkin tidak sepenuhnya berlaku untuk situasi Anda.

Beberapa komputer lama yang diperbarui dengan sistem Linux baru mengalami masalah boot. Mereka mungkin tidak bisa boot sama sekali atau mereka bisa memakan waktu selama tiga menit untuk boot. Secara kebetulan, mereka gagal hibernasi atau butuh waktu lama untuk hibernasi dan dehibernasi sehingga kemampuannya tidak berguna. Seringkali ini bukan karena komputer lama hanya lambat tetapi karena perubahan yang diperkenalkan pada kernel Linux 4.8, menyebabkan masalah dengan chipset Intel yang sangat umum, yang mencakup keluaran video. Dimulai dengan kernel ini, komputer apa pun dengan chipset ini akan mengalami masalah boot kecuali argumen baris perintah Linux"video=SVIDEO-1:d"termasuk dalam GRUB_CMDLINE_LINUX. Ini secara signifikan akan mempersingkat waktu boot 64-bit dan 32-bit tetapi memperbaiki masalah hibernasi hanya untuk 64-bit. Tidak ada sistem 32-bit yang mendukung hibernate setelah titik ini. Lebih lanjut, waktu boot untuk semua versi kernel 4.8 dan 4.9 buruk (kecuali 4.8.rc1-7). Ini akhirnya diselesaikan pada 4.10. Kernel 4.8 dan 4.9 harus dihindari (mereka sudah usang).

Jika Anda menginginkan waktu boot tercepat, gunakan kernel pra-4.8. Saya akan menggunakan Ubuntu-desktop 15.04 dengan kernel diperbarui ke 4.7.10. Ini adalah satu-satunya cara untuk mendapatkan hibernasi dalam sistem 32. Sistem 64-bit melakukan boot 7% ​​lebih lambat dari 32-bit tetapi masih lebih cepat dari versi yang lebih baru. Jika Anda menginginkan sistem 32-bit yang saat ini didukung dan bersedia untuk berhenti hibernasi, gunakan apa saja yang dirilis atau diperbarui ke kernel 4,10 atau lebih baru. Setiap versi 64-bit bekerja setelah 4,8 dengan perbaikan video tetapi untuk kinerja terbaik hindari 4,8 dan 4,9.

Untuk menambahkan perbaikan video, lakukan sudo nano /etc/default/grub . Setelah menutup nano lakukan sudo update-grub. Kecuali GRUB_CMDLINE_LINUX_DEFAULT, yang dimasukkan setelah GRUB_CMDLINE_LINUX, kosong, "video=SVIDEO-1:d"tidak akan menjadi argumen baris perintah Linux terakhir, yang oleh sebagian orang dikatakan perlu. Sebenarnya bisa di mana saja.

Anda selalu dapat memanggil hibernate dengan perintah pm-hibernate di terminal (atau tty) tetapi untuk membuatnya menjadi opsi GUI yang Anda butuhkan untuk membuat atau menambahkan ke file kebijakan /etc/polkit-1/localauthority/50-local.d/ com.ubuntu.enable-hibernate.pkla(jelas distro-spesifik) teks berikut:

[Re-enable hibernate by default for login1]
    Identity=unix-user:*
    Action=org.freedesktop.login1.hibernate
    ResultActive=yes
[Re-enable hibernate for multiple users by default in logind]
    Identity=unix-user:*
    Action=org.freedesktop.login1.hibernate-multiple-sessions
    ResultActive=yes
David McCracken
sumber
0

Terkadang masalahnya bukan di grub atau UUID. Ini juga terjadi ketika Anda kehabisan ruang penyimpanan. Tidak akan ada ruang tulis yang tersisa sehingga melanjutkan dari hibernasi akan membeku.

Ketika Anda mendapatkan kesalahan itu, Anda dapat mengklik alt+ f2/f3/f7atauctrl+alt+ f2/f3/f7 untuk membuka terminal. Login ke akun Anda atau rooting menggunakan terminal.

Kemudian jalankan perintah sudo df -huntuk memeriksa ruang penyimpanan. Dalam kasus saya, saya tidak punya ruang pada saya/dev/sda1 jadi periksa ruang kosong pada drive dalam daftar.

Jika Anda kehabisan ruang, coba hapus beberapa file untuk mendapatkan ruang yang cukup besar.

Setelah itu Anda dapat mengklik alt+f1atau ctrl+alt+f1dan menunggu gui login muncul atau ketikreboot in the terminal to reboot

David Kariuki
sumber
Terima kasih atas upaya Anda, tetapi masalah ini telah diselesaikan. Masalahnya adalah dengan 4.9.0 i386 + PAE kernel. Kemudian saya menemukan PC saya mampu menjalankan perangkat lunak 64bit (walaupun PC selalu berjalan 32 bit sejak saya mendapatkannya), dan kernel 64 bit menyelesaikan masalah.
Enginecrafter77
Oke sama-sama.
David Kariuki