Ubuntu 18.04 tidak dapat dilanjutkan setelah hibernasi

17

Hibernate berfungsi dengan benar ketika saya menggunakan Ubuntu 17.04. Setelah memutakhirkan ke 17.10 saya tidak bisa melanjutkan karena layar hitam setelah melanjutkan ( bug ini ).

Setelah memutakhirkan ke 18,04 jika saya mencoba memulai komputer saya setelah hibernasi boot seolah-olah tidak ada hibernasi dilakukan.

Kamil
sumber
Saya memiliki masalah yang sama dengan 18,04, saya kira solusinya harus dalam menentukan partisi yang tepat untuk melanjutkan tetapi masih tidak dapat menemukan cara untuk melakukan ini. Yang saya temukan hanyalah Google tidak bekerja untuk saya.
user2819650
Partisi diatur dengan benar di /etc/initramfs-tools/conf.d/resume ke swap saya. Saya menduga bahwa hibernasi tidak dilakukan dengan benar atau melanjutkan selama boot tidak berfungsi. Tapi saya tidak tahu bagaimana cara men-debug lebih lanjut. Syslog dan dmesg tidak memberikan petunjuk apa pun masalahnya.
Kamil

Jawaban:

29

Ada perubahan yang dilakukan pada pengaturan default jika dibandingkan dengan LTS sebelumnya (16.04). Dalam kasus saya hibernasi tidak berfungsi sampai saya melakukan beberapa langkah, di antaranya meningkatkan ukuran file swap, menyalakannya, memastikan kebijakan mengizinkannya, dll.

Ini mungkin dengan mudah jawaban saya yang paling panjang di seluruh StackExchange jadi saya mencoba membuat header deskriptif .

Boot karena tidak ada hibernasi

Akan lebih bijaksana untuk melihat log Anda ( dmesgmungkin membantu) dan melihat apakah ada sesuatu di sana. Ada alasan ketika meskipun Anda memberitahu sistem untuk hibernasi, sebenarnya tidak, atau malah akan menangguhkan-ke-RAM (tidur).

Melihat kern.logdan syslogmencari pesan terkait hibernasi juga tidak ada salahnya. Bagian yang dimulai dengan "masalah" dapat membantu Anda dengan masalah tertentu.

Tukar file atau tukar partisi

Salah satu perubahan penting adalah bahwa sekarang Anda TIDAK MEMILIKI partisi swap, tetapi Anda memiliki FILE swap.

File swap mungkin tidak berfungsi untuk perpaduan perangkat keras / driver / OS dan hibernasi.

Hibernasi dimatikan

Kebijakan juga dapat mematikan atau melarang hibernasi.

Jargon

Suspend to RAM - RAM membuat data, komputer tidur lebih cepat, menggunakan lebih banyak energi saat ditangguhkan, bangun lebih cepat. Ada yang menyebut tidur ini.

Tangguhkan ke disk - alias hibernasi. RAM disimpan untuk ditukar (partisi atau file), komputer menjadi lebih lambat, menggunakan lebih sedikit energi saat hibernasi, bangun lebih lambat.

Suspend-to-RAM di Linux oleh Rafael J. Wysocki dan A. Leonard Brown

Prasyarat - apakah Anda memiliki cukup ruang?

Untuk hibernasi, Anda perlu (penyederhanaan di sini) menyimpan seluruh RAM Anda ke hard drive Anda. Jadi, Anda perlu menyisihkan cukup ruang untuk melakukannya. Jika tidak, ini akan gagal dan Anda tidak akan hibernasi.

  1. free -m akan memberi tahu Anda berapa banyak memori yang Anda miliki, gunakan, dan berapa banyak yang ada di swap Anda.
  2. df -h akan memberi tahu Anda berapa banyak ruang disk yang Anda miliki di setiap titik pemasangan dan berapa banyak yang digunakan, gratis, dll. Ini penting karena Anda mungkin ingin nanti menentukan di mana file swap Anda akan ditempatkan, atau partisi mana yang harus "trim" untuk memiliki cukup ruang untuk swap Anda.
  3. cat fstabharus memberi Anda informasi jika Anda memiliki partisi atau file swap. Menurut Ubuntu Hibernation, FAQ swapfilemungkin tidak selalu berfungsi dengan beberapa kombinasi perangkat keras / driver.

Jika Anda tidak memiliki cukup ruang, ikuti FAQ swap Ubuntu . Ini memberi tahu Anda cara menambah file swap, menambahkan yang lain, memeriksa apakah itu digunakan dll. Dengan perintah dan penjelasan. Sumber daya yang sangat bagus.

Saya tidak punya cukup ruang untuk memuat RAM saya!

Dokumen kernel mengatakan:

/ sys / power / image_size mengontrol ukuran gambar yang dibuat oleh mekanisme disk-ke-disk. Dapat ditulis string yang mewakili integer non-negatif yang akan digunakan sebagai batas atas ukuran gambar, dalam byte. Mekanisme suspend-to-disk akan melakukan yang terbaik untuk memastikan ukuran gambar tidak akan melebihi angka itu. Namun, jika ini ternyata tidak mungkin, ia akan tetap mencoba untuk menunda menggunakan gambar sekecil mungkin. Khususnya, jika "0" ditulis ke file ini, gambar yang ditangguhkan akan sekecil mungkin. Membaca dari file ini akan menampilkan batas ukuran gambar saat ini, yang diatur ke 2/5 dari RAM yang tersedia secara default.

Jadi, coba atur ukuran gambar Anda. Bagaimana - tolong ajukan pertanyaan lain.

Prasyarat - apakah kernel Anda mendukung suspend-to-disk?

Kernel mendukung apa pun yang terdaftar /sys/power/state, jadi:

cat /sys/power/state

Diizinkan (untuk pengetahuan saya) entri ada meliputi: mem, standby, freeze, disk. Penjelasan:

  • mem- memiliki beberapa arti, yang mana tepatnya pada sistem Anda Anda akan tahu melalui cat /sys/power/mem_sleep. Saya sudah:s2idle [deep]
  • standby - Power-On Suspend (jika didukung)
  • freeze - Suspend To Idle (IMS)
  • disk- Suspend To Disk (STD), hibernasi . Ini - kamu mau.

Maka kita perlu memeriksa cat /sys/power/disk. Jika Anda telah ada di sana disabledkemudian menyelam di BIOS Anda mencari Boot Aman - itu satu-satunya ide yang bisa saya tawarkan dan satu-satunya hal yang saya tahu dapat mengganggu dan mematikan hibernasi. Meskipun saya hanya tahu tentang SecureBoot, mungkin ada gangguan lain, jadi melihat BIOS Anda adalah ide yang baik bahkan jika Anda tidak memiliki "boot aman".

Baca di sini:

  1. Dokumen kernel
  2. Wiki Debian saat hibernasi

TBH, bahkan jika kernel Anda TIDAK mendukung hibernasi, Anda dapat mencobanya dengan cara lain, gulir ke bawah ke bagianInterfaces .

Baca ini - peringatan dan masalah - tidak ada BTRFS

Tanpa urutan tertentu:

  1. Tidak semua chipset akan berfungsi (tidak memiliki sumber yang bisa saya kutip di sini jadi katakanlah ini hanya kabar angin)
  2. VAIO memiliki masalah, seharusnya ada bendera untuk melawan mereka
  3. SecureBoot sering disebut mengganggu atau mematikan hibernasi
  4. Wake-on-LAN mengkonsumsi daya bahkan dengan hibernasi
  5. Jumlah modul (terutama grafis) dapat diinisialisasi sebelum sistem Anda melanjutkan dengan benar dari hibernasi - ini biasanya menjadi penyebab layar hitam saat melanjutkan . Lihatlah ArchLinux Wiki untuk kiat tentang cara men-debug masalah. Saya juga menyarankan FAQ Ubuntu tentang masalah hibernasi. Menjelajahi bug Launchpad juga dapat memberikan hasil. IIRC, ada parameter kernel yang menetapkan penundaan dalam hitungan detik sebelum dilanjutkan.
  6. Mengizinkan prosedur hibernasi berbeda untuk versi Polkit yang berbeda

Jangan gunakan BTRFS dan hibernasi: data yang rusak akan menjadi hasilnya.

Saya ingin hibernate - swap partisi

Ada kasus, ketika orang meninggalkan file swap dan kembali ke partisi swap. Bagaimanapun, ini bekerja pada LTS sebelumnya. Saya tidak mencoba, jadi tidak akan menawarkan petunjuk.

Saya ingin hibernasi - dengan file swap

  1. Pastikan Anda memiliki cukup ruang di sana. FAQ swap Ubuntu memberi tahu Anda berapa banyak yang Anda butuhkan, perintah dari atas juga melakukannya. Jika Anda memerlukan info lebih lanjut di sini, ajukan pertanyaan lain, karena ini adalah topik yang panjang.
  2. Tambah file swap atau buat yang baru dengan ukuran yang cukup baik (lebih disukai, saya setuju dengan @muru ) dan ubah /etc/fstabke yang baru. Reboot untuk melihat perubahan diambil dengan baik (simpan cadangannya fstabsehingga Anda dapat dengan mudah mengembalikannya untuk berjaga-jaga.
  3. Arahkan kernel Anda pada ini dengan params yang sesuai, sehingga ia tahu dari mana harus melanjutkan.
  4. Perbarui / konfigurasi ulang boot loader Anda dan reboot.

Parameter kernel? Mengerikan!

Baca dengan cermat dan putuskan apakah Anda ingin melakukan itu, tetapi itu hanya cara untuk mengkonfigurasi kernel Anda. Mungkin lebih mudah melakukan hibernasi melalui systemddan uswsusp(lihat Antarmuka , di bawah). Mungkin, bahwa Anda - seperti saya - pada akhirnya akan memutuskan suspend-to-RAM sudah cukup dan Anda tidak ingin memiliki 32GB pada file swap (tidak begitu bagus untuk orang-orang dengan satu SSD di laptop mereka, misalnya). Tapi!

  1. hibernasi untuk bertukar file resume=harus tahu di mana partisi file swap Anda dan resume_offset=untuk mengetahui di mana file swap untuk mulai melanjutkan dari.
  2. hibernasi ke partisi resume=harus mengarah ke swap partisi.
  3. menyelesaikan masalah layar hitam mungkin juga diperlukan resumedelay=.

Kernel docs tentang menunda melanjutkan dari Hibernasi:

resumedelay = [HIBERNATION] Keterlambatan (dalam detik) untuk berhenti sebelum mencoba membaca file resume

Parameter yang diperlukan untuk swap-file dan hibernasi :

resume = [SWSUSP]

      Specify the partition device for software suspend

      Format:

      {/dev/<dev> | PARTUUID=<uuid> | <int>:<int> | <hex>}

resume_offset = [SWSUSP]

      Specify the offset from the beginning of the partition
      given by "resume=" at which the swap header is located,
      in <PAGE_SIZE> units (needed only for swap files).

      See Documentation/power/swsusp-and-swap-files.txt

Untuk resume=memilih gaya yang sama dengan rootelemen dalam fstab. Jadi, baik /dev/sdaXatau UUIDatau LVM. Untuk hibernasi ke file - sediakan partisi tempat file Anda dapat ditemukan.

Bacaan:

  1. https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt
  2. https://wiki.archlinux.org/index.php/Kernel_parameters

Masalah - header swap tidak ditemukan

File swap perlu diformat dengan benar. Jika log Anda memberi tahu Anda hal ini, Anda mencoba hibernasi ke file, atau parameter resume Anda tidak benar.

Beralih ke partisi atau perbaiki file atau ubah antarmuka yang digunakan untuk hibernasi.

Lihat: /unix/43508/debian-hibernate-problem-pm-swap-header-not-found

mkswapdigunakan untuk memformat file, baca lebih lanjut di sini

Masalah! Hibernasi tidak diizinkan!

Tes: pm-hibernate(jika paket pm-utils diinstal) atau systemctl hibernatememberi tahu Anda bahwa Anda tidak diizinkan. Pengaturan default di Ubuntu sejak IIRC 12.04.

Solusi: tergantung pada versi Polkit Anda, versi dan rasa Ubuntu Anda ... Lihat pertanyaan ini . Juga, ArchWiki di Polkit dapat membantu.

Untuk Mint, lihat: https://forums.linuxmint.com/viewtopic.php?t=259912

Masalah! Hibernasi dinonaktifkan oleh sesuatu di BIOS!

Tes: cat /sys/power/disktelah disabled. Log menunjukkan "Gagal hibernasi sistem melalui logind: Kata kerja tidur tidak didukung".

Solusi: cari BIOS Anda dan temukan hal yang bermasalah. Matikan.

Solusi 2: coba antarmuka hibernasi lain.

Lihat: Bagaimana cara mengaktifkan hibernasi di 16.04.1? (systemd) .

Antarmuka

  1. swsusp - antarmuka kernel level rendah. Lihat Prasyarat - kernel untuk file mana. Menulis ke file secara langsung dapat menyebabkan penangguhan (ke RAM, ke disk dan hibrid). Menurut SwapFAQ bermasalah dengan hibernasi ke file.
  2. uswsusp - ArchWiki dan Debian Wiki dan bagus pertanyaan AskUbuntu dengan write-up cara menggunakannya .
  3. systemd - ArchWiki di atasnya
  4. pm-utils - AFAIK yang merupakan kumpulan skrip yang berasal dari Debian - Saya akan dengan senang hati menerima info lebih lanjut.

Kata penutup

Bagi saya itu adalah masalah hampir dua hari kerja untuk menyusunnya. Semoga ini akan membantu Anda (dan orang lain) memecahkan masalah Anda lebih cepat. Masih ada poin yang saya lewatkan tetapi ini jam 2 pagi dan saya tidak ingin menulis lagi sekarang. Saya tentu saja terbuka untuk petunjuk siapa pun untuk menjadikan ini lebih baik, jadi komentarlah. Saya akan menjawab begitu saya tidur, bekerja dll :-)

Saya tidak yakin berhibernasi ke disk bagus. Saya pergi dengan tidur pada akhirnya. Tetapi bagi saya masalah adalah dengan memiliki file 32GB hanya untuk dapat melakukan hibernasi, karena saya biasanya menghindari bertukar sama sekali. File swap awal saya adalah 2GB dan sebagian besar kosong. YMMV. Meskipun demikian, semoga berhasil! Dan mulailah dengan log!

LAFK mengatakan Reinstate Monica
sumber
Jawaban bagus! Tapi apa yang akhirnya menyelesaikan kasus saya adalah Swap FAQ yang tertaut dan ia memberi tahu saya untuk menambahkan "resume = UUID" ke variabel dalam file konfigurasi grub saya dan / atau yang serupa dengan initramfs-tools. Untuk beberapa alasan saya memiliki UUID yang salah di sana yang mungkin masalahnya. Jadi saya menyarankan seseorang yang memiliki masalah serupa untuk memeriksa terlebih dahulu apa yang tertulis di FAQ Swap di bawah "Bagaimana cara menambah atau memodifikasi partisi swap?", Dan poin ketiga tentang hibernasi di sana.
RimaNari
1
"disk - Suspend To Disk (STD), hibernasi. Ini - Anda inginkan." Apakah saya satu-satunya yang mendapat tendangan keluar dari ini? Terimakasih banyak.
spakmad
jawaban bagus! satu komentar kecil: pada salah satu mesin saya melanjutkan setelah hibernate bekerja setelah upaya boot kedua saja (tidak ada yang ditampilkan pada monitor pada upaya pertama). saya bisa memperbaikinya dengan menginstal HWE-stack: $ sudo apt install linux-generic-hwe-18.04(untuk beberapa perangkat keras bahkan linux-generic-hwe-18.04-edgemungkin patut dicoba).
hiro protagonis
1
Ah. Saya tidak akan hibernasi! Saya memiliki RAM 512Gb. Oh well ... (Saya punya cukup ruang di HDD 10Tb saya, tetapi akan butuh berjam-jam untuk reboot!)
Alexis Wilke
9

Gunakan UUID partisi swap sebagai ganti titik pemasangan di parameter RESUME resume=UUID=<#>di keduanya /etc/default/grubdan/etc/initramfs-tools/conf.d/resume

Buat entri untuk partisi swap /etc/fstab tanpa titik pemasangan seperti ini

# Entry for Swap : 
UUID=# none  swap    sw              0       0

Di /etc/default/grubSaya telah menggunakan entri terpisah untuk melanjutkan hibernasi

# FOR HIBERNATION 
GRUB_CMDLINE_LINUX="resume=UUID=..."

Buat policykit di otoritas lokal (pkla)

sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

Dan masukkan di sana

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes

[Enable hibernate to be run via cron]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=yes

Setelah itu perbarui initramfs dan GRUB

sudo update-initramfs -u -k all
sudo update-grub

Mulai ulang, buka beberapa aplikasi dan gunakan systemctl hibernate(tanpa sudo) untuk melihat apakah itu berfungsi

Roey
sumber
bekerja dengan baik! Terima kasih banyak.
Yossarian42
Terima kasih kawan, kau menyelamatkanku!
Vahe Shadunts
1

Bagi saya itu selalu bekerja sampai 18,04 dan setelah 18,04 saya mengaktifkannya seperti dalam banyak artikel, tetapi tiba-tiba berhenti berfungsi baru kemarin (bekerja dengan baik selama 4-5 bulan),

dan di sini adalah ... SATU HAL yang membuatnya bekerja lagi ...

Beri tahu grub2 di mana partisi swap:

Pertama cari tahu partisi mana yang menggunakan perintah di bawah ini:

cat /etc/fstab

Milik saya pada sda7 seperti output berikut:

swap aktif / dev / sda7 selama instalasi

Kemudian, tambahkan Grub2 tambahan berikut ke baris berikut, menggunakan perintah berikut:

sudo gedit / etc / default / grub

GRUB_CMDLINE_LINUX_DEFAULT = "intel_pstate = nonaktifkan resume = / dev / sda7"

Bagian yang penting adalah resume=/dev/sda7

/ dev / sda7 dalam kasus saya

Kemudian Perbarui Grub dengan perintah berikut, dan setelah ini mulai berfungsi dengan baik lagi:

sudo update-grub

Setelah banyak upaya ini adalah satu hal yang berhasil, mungkin itu hanya karena pembaruan pada kernel yang mengacaukannya, apalagi ini berhasil.

markackerman8-gmail.com
sumber
0

Semoga ini bisa membantu seseorang, tapi saya sedang menjalankan popos / ubuntu 19.04. Dalam pengaturan saya, saya bisa hibernasi menggunakan s2disk atau pm-hibernate, tetapi resume gagal. Untuk memperbaikinya, karena sistem saya di-boot menggunakan UEFI, bukan grub. Saya hanya perlu menginstal ulang boot loader. Untuk memeriksa apakah Anda menjalankan UEFI gunakan yang berikut:

[ -d /sys/firmware/efi ] && echo "Installed in UEFI mode" || echo "Installed in Legacy mode"

jika dalam mode UEFI, maka saya mengikuti panduan ini untuk menginstal ulang bootloader, itu bervariasi jika Anda menggunakan disk nvme atau disk SATA: https://support.system76.com/articles/bootloader/

pastikan bahwa dalam opsi kernalboot Anda, Anda menentukan partisi atau UUID tempat untuk melanjutkan, misalnya sesuatu seperti ini:

resume = UUID = ed8347ed-2eb4-40bc-bc77-cc53b987ed88

Anda dapat menambahkan ini dengan: 1) sudo kernel-stub -a "resume = UUID = ..." 2) edit file /etc/initramfs-tools/conf.d/resume dan tambahkan: resume = UUID = ed8347ed- 2eb4-40bc-bc77-cc53b987ed88

periksa file Anda / var / log / syslog untuk sesuatu seperti ini: 4 Agustus 22:26:42 pop-os / usr / bin / kernelstub [19639]: kernelstub: Kopling DEBUG: root = UUID = b37019a8-91f5-445f-94c1 -7359a49ed5df ro quiet loglevel = 0 systemd .show_status = false resume = UUID = ed8347ed-2eb4-40bc-bc77-cc53b987ed88

Jika resume hilang atau salah maka Anda harus memperbarui boot boot Anda lagi.

Lingster
sumber
0

Selain mengatur swap resume point di grub yang disebutkan dalam jawaban Sam73 , saya menemukan bahwa Ubuntu 18.04 saya juga perlu menginstal laptop-mode-tools:

$sudo apt install laptop-mode-tools

kemudian ubah ENABLE_LAPTOP_MODE_ON_AC=1file konfigurasi:

$sudo vim /etc/laptop-mode/laptop-mode.conf

mulai laptop-mode dengan:

$sudo laptop_mode start

PS Anda dapat memeriksa apakah laptop mulai atau tidak dengan

$cat /proc/sys/vm/laptop_mode

Jika ia mencetak 0, laptop_modeitu tidak berfungsi, jika tidak, itu menunjukkan itu berfungsi dengan baik.

Yossarian42
sumber