Ubuntu 18.04 non può riprendere dopo l'ibernazione


17

Hibernate ha funzionato correttamente quando avevo usato Ubuntu 17.04. Dopo l'aggiornamento alla 17.10 non sono riuscito a riprendere a causa della schermata nera dopo il ripristino ( questo errore ).

Dopo l'aggiornamento alla 18.04 se provo ad avviare il mio computer dopo l'ibernazione, si avvia come se non fosse stato eseguito l'ibernazione.


Ho lo stesso problema con 18.04, penso che la soluzione debba essere nel specificare la giusta partizione per il curriculum, ma non riesco ancora a trovare il modo di farlo. Tutto ciò che ho scoperto è che Google non ha funzionato per me.
user2819650

La partizione è impostata correttamente in /etc/initramfs-tools/conf.d/resume al mio scambio. Sospetto che l'ibernazione non sia stata eseguita correttamente o che il ripristino durante l'avvio non funzioni. Ma non so come eseguirne il debug. Syslog e dmesg non danno alcun indizio qual è il problema.
Kamil,

Risposte:


29

Sono state apportate modifiche alle impostazioni predefinite rispetto al precedente LTS (16.04). Nel mio caso l'ibernazione non ha funzionato fino a quando non ho fatto diversi passaggi, tra cui aumentare la dimensione del file di scambio, accenderlo, assicurarsi che le politiche lo consentissero, ecc.

Questa potrebbe essere la mia risposta più lunga su StackExchange, quindi ho cercato di rendere descrittive le intestazioni .

Stivali perché non c'era letargo

Sarebbe prudente dare un'occhiata ai tuoi registri ( dmesgpotrebbe aiutare) e vedere se c'è qualcosa. Ci sono ragioni per cui, nonostante tu dica al sistema di andare in letargo, in realtà non lo farà, o invece sospenderà su RAM (sospensione).

Dare un'occhiata kern.loge syslogcercare eventuali messaggi relativi all'ibernazione non farebbe male. Le sezioni che iniziano con "problema" possono aiutarti con problemi specifici.

Scambia file o scambia partizione

Uno dei cambiamenti cruciali è che ora NON AVETE una partizione di swap, ma avete un FILE di swap.

Il file di scambio potrebbe non funzionare per la tua miscela di hardware / driver / sistema operativo e ibernazione.

Ibernazione disattivata

Le politiche possono anche disattivare o impedire l'ibernazione.

Gergo

Sospendi su RAM: la RAM mantiene i dati, il computer va a dormire più velocemente, consuma più energia quando viene sospeso, si sveglia più velocemente. Alcuni chiamano questo sonno.

Sospendi su disco - alias ibernazione. La RAM viene salvata per scambiare (partizione o file), il computer va a dormire più lentamente, consuma meno energia durante il letargo, si sveglia più lentamente.

Suspend-to-RAM in Linux di Rafael J. Wysocki e A. Leonard Brown

Prerequisiti: hai abbastanza spazio?

Per andare in letargo, è necessario (semplificazione qui) salvare l'intera RAM sul disco rigido. Quindi, è necessario riservare spazio sufficiente per farlo. Se non lo fai, questo fallirà e non andrai in letargo.

  1. free -m ti dirà quanta memoria hai, usa e quanto è nel tuo swap.
  2. df -h ti dirà quanto spazio su disco hai su ogni punto di montaggio e quanto viene utilizzato, libero, ecc. Questo è importante poiché potresti voler specificare in seguito dove si troverà il tuo file di scambio, o quale partizione "tagliare" avere abbastanza spazio per il tuo scambio.
  3. cat fstabdovrebbe darti informazioni se hai una partizione o un file di scambio. Secondo Ubuntu Hibernation, le FAQ swapfilepotrebbero non funzionare sempre con alcune combinazioni di hardware / driver.

Se non hai abbastanza spazio, segui le FAQ di scambio di Ubuntu . Ti dice come aumentare il file di scambio, aggiungerne un altro, controllare se è usato ecc. Con comandi e spiegazioni. Risorsa davvero bella.

Non ho abbastanza spazio per adattarmi alla mia RAM!

I documenti del kernel dicono:

/ sys / power / image_size controlla la dimensione dell'immagine creata dal meccanismo di sospensione su disco. Può essere scritta una stringa che rappresenta un numero intero non negativo che verrà utilizzato come limite superiore della dimensione dell'immagine, in byte. Il meccanismo di sospensione su disco farà del suo meglio per garantire che la dimensione dell'immagine non superi tale numero. Tuttavia, se ciò risulta impossibile, proverà comunque a sospendere utilizzando l'immagine più piccola possibile. In particolare, se "0" è scritto in questo file, l'immagine di sospensione sarà il più piccola possibile. La lettura di questo file visualizzerà il limite di dimensione dell'immagine corrente, che è impostato su 2/5 della RAM disponibile per impostazione predefinita.

Quindi, prova a modificare la dimensione dell'immagine. Come - fai un'altra domanda per favore.

Prerequisiti: il kernel supporta la sospensione su disco?

Il kernel supporta tutto ciò che è elencato /sys/power/state, quindi:

cat /sys/power/state

Ammessi (a mia conoscenza) Record ci sono: mem, standby, freeze, disk. Spiegazione:

  • mem- ha diversi significati, quale esattamente sul tuo sistema lo scoprirai tramite cat /sys/power/mem_sleep. Io ho:s2idle [deep]
  • standby - Sospensione all'accensione (se supportata)
  • freeze - Suspend To Idle (STI)
  • disk- Suspend to Disk (STD), ibernazione . Questo - tu vuoi.

Quindi dobbiamo controllare cat /sys/power/disk. Se ce l'hai, disabledimmergiti nel BIOS alla ricerca di Secure Boot: questa è l'unica idea che posso offrire e l'unica cosa che so può interferire e disattivare l'ibernazione. Mentre conosco solo SecureBoot, potrebbero esserci altre interferenze, quindi dare un'occhiata al BIOS è una buona idea anche se non si dispone di alcun "avvio sicuro".

Leggendo qui:

  1. Documenti del kernel
  2. Debian Wiki in letargo

TBH, anche se il tuo kernel NON supporta l'ibernazione, puoi provarlo in un altro modo, scorrere fino alla sezioneInterfaces .

Leggi questo - avvertimenti e problemi - nessun BTRFS

Senza un ordine particolare:

  1. Non tutti i chipset funzioneranno (non ho fonti che posso citare qui, quindi diciamo che questo è sentito dire)
  2. VAIO ha dei problemi, presumibilmente c'è una bandiera per contrastarli
  3. SecureBoot viene spesso citato come interferente o disattiva l'ibernazione
  4. Wake-on-LAN consuma energia anche con l'ibernazione
  5. Il numero di moduli (in particolare la grafica) può essere inizializzato PRIMA che il sistema riprenda correttamente dal letargo - questa è di solito la causa dello schermo nero quando si riprende . Guarda ArchLinux Wiki per suggerimenti su come eseguire il debug dei problemi. Suggerirei anche le FAQ di Ubuntu su problemi di ibernazione. Navigare attraverso i bug di Launchpad può anche dare risultati. IIRC, c'è un parametro del kernel che specifica in secondi un ritardo prima di riprendere.
  6. L'autorizzazione alla procedura di ibernazione differisce per le diverse versioni di Polkit

Non utilizzare BTRFS e ibernazione: il risultato saranno dati danneggiati.

Voglio ibernare - scambiare la partizione

Ci sono casi in cui le persone rinunciano al file di scambio e tornano alla partizione di scambio. Dopotutto, ha funzionato su LTS precedente. Non ho provato, quindi non offrirà puntatori.

Voglio andare in letargo - con il file di scambio

  1. Assicurati di avere abbastanza spazio lì. Le FAQ di scambio di Ubuntu ti dicono quanto ti serve, anche i comandi dall'alto lo fanno. Se hai bisogno di maggiori informazioni qui, fai un'altra domanda per favore, poiché questo è un argomento lungo.
  2. Aumenta il file di scambio o creane uno nuovo di dimensioni sufficientemente buone (preferibilmente, sono d'accordo con @muru ) e /etc/fstabpassa a quello nuovo. Il riavvio per vedere il cambiamento è preso bene (archiviare il backup del in fstabmodo da poter facilmente ripristinare per ogni evenienza.
  3. Punta il tuo kernel su questo con i parametri appropriati, in modo che sappia da dove riprendere.
  4. Aggiorna / riconfigura il tuo caricatore di avvio e riavvia.

Parametri del kernel? ! spaventoso

Leggi attentamente e decidi se desideri farlo, ma è solo un modo per configurare il tuo kernel. Potrebbe essere più semplice ibernare tramite systemde uswsusp(vedere Interfacce , di seguito). Può darsi che tu, come me, alla fine deciderai che la sospensione su RAM è sufficiente e che non vuoi avere 32 GB su un file di scambio (non così eccezionale per le persone con un SSD nei loro laptop, per esempio). Ma!

  1. ibernazione nel file di scambio richiede resume=di sapere da quale partizione si trova il file di scambio e resume_offset=di sapere da dove iniziare il ripristino del file di scambio.
  2. ibernazione alla partizione richiede resume=di puntare alla partizione di swap.
  3. la risoluzione dei problemi dello schermo nero potrebbe richiedere resumedelay=.

Documenti del kernel sul ritardare la ripresa dall'ibernazione:

resumedelay = [HIBERNATION] Ritardo (in secondi) per mettere in pausa prima di tentare di leggere i file di ripresa

Parametri richiesti per file di scambio e ibernazione :

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

Per lo resume=scegliere lo stesso stile rootdell'elemento fstab. Quindi, /dev/sdaXo UUIDo LVM. Per ibernazione in un file: fornire una partizione in cui è possibile trovare il file.

Lettura:

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

Problema: intestazione di scambio non trovata

Il file di scambio deve essere formattato correttamente. Se i tuoi registri ti dicono questo, o stai tentando di ibernare in un file o il tuo parametro resume non è corretto.

Passare alla partizione o correggere il file o modificare l'interfaccia utilizzata per l'ibernazione.

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

mkswapviene utilizzato per formattare il file, leggi di più qui

Problema! Ibernazione non consentita!

Test: pm-hibernate(se il pacchetto pm-utils è installato) o systemctl hibernateavvisa che non sei autorizzato. Impostazione predefinita in Ubuntu da IIRC 12.04.

Soluzione / e: dipende dalla versione di Polkit, dalla versione e dal sapore di Ubuntu ... Vedi questa domanda . Inoltre, ArchWiki su Polkit può aiutare.

Per Mint, consultare: https://forums.linuxmint.com/viewtopic.php?t=259912

Problema! Ibernazione disabilitata da qualcosa nel BIOS!

Test: cat /sys/power/diskha disabled. I registri mostrano "Impossibile ibernare il sistema tramite logind: verbo di sospensione non supportato".

Soluzione: cerca nel BIOS e trova la cosa problematica. Spegnilo.

Soluzione 2: provare un'altra interfaccia di ibernazione.

Vedi: Come attivare l'ibernazione in 16.04.1? (systemd) .

interfacce

  1. swsusp - interfaccia del kernel di basso livello. Vedi Prerequisiti - kernel per quali file. La scrittura diretta su file può causare la sospensione (su RAM, su disco e ibrida). Secondo SwapFAQ problematico con il letargo al file.
  2. uswsusp - ArchWiki e Debian Wiki e la bella domanda di AskUbuntu con un commento su come usarlo .
  3. systemd - ArchWiki su di esso
  4. pm-utils - AFAIK che è una raccolta di script originari di Debian - Accolgo volentieri altre informazioni da solo.

Commenti finali

Per me è stata una questione di quasi due giorni di lavoro per compilarlo. Spero che questo ti aiuterà (e altri) a risolvere il problema più velocemente. Ci sono ancora punti che mi sono persi, ma sono le 2 del mattino e non ho voglia di scrivere più ora. Sono ovviamente aperto ai suggerimenti di chiunque per renderlo migliore, quindi commenta. Risponderò una volta che dormo, lavoro ecc. :-)

Non sono certo che il letargo su disco sia fantastico. Sono andato a dormire alla fine. Ma per me il problema era avere un file da 32 GB solo per poter fare il letargo, dato che di solito evito affatto di scambiare. Il mio file di scambio iniziale era di 2 GB ed era quasi vuoto. YMMV. Tuttavia, buona fortuna! E inizia con i registri!


Bella risposta! Ma ciò che alla fine ha risolto il mio caso sono state le FAQ di scambio collegate e mi ha detto di aggiungere "resume = UUID" a una variabile nel mio file di configurazione grub e / o sth simile con initramfs-tools. Per qualche ragione ho avuto un UUID sbagliato lì che probabilmente era il problema. Quindi suggerisco a qualcuno con un problema simile di verificare prima cosa è scritto nelle Domande frequenti su Swap in "Come posso aggiungere o modificare una partizione di swap?" E il terzo punto sull'ibernazione lì.
RimaNari,

1
"disk - Suspend To Disk (STD), ibernazione. Questo - tu vuoi." Sono l'unico a cui è stato dato un calcio? Grazie mille
spakmad,

Bella risposta! una piccola osservazione: su una delle mie macchine riprendere dopo che l'ibernazione ha funzionato solo dopo un secondo tentativo di avvio (al primo tentativo non è stato visualizzato nulla sul monitor). potrei risolvere l'installazione di uno stack HWE: $ sudo apt install linux-generic-hwe-18.04(per alcuni hardware linux-generic-hwe-18.04-edgepotrebbe valere la pena di provare ).
protagonista hiro il

1
Ah. Non andrò in letargo! Ho 512 GB di RAM. Oh bene ... (Ho abbastanza spazio sul mio HDD da 10 TB, ma ci vorrebbero ore per riavviare!)
Alexis Wilke,

9

Utilizzare l'UUID della partizione di swap anziché il suo punto di montaggio nel parametro RESUME resume=UUID=<#>in entrambi /etc/default/grube/etc/initramfs-tools/conf.d/resume

Crea una voce per la partizione di swap /etc/fstab senza un punto di montaggio simile a questo

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

In /etc/default/grubho usato una voce separata per riprendere l'ibernazione

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

Creare un policykit nelle autorità locali (pkla)

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

E inserire lì

[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

Dopo quell'aggiornamento initramfs e GRUB

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

Riavvia, apri alcune app e usa systemctl hibernate(senza sudo) per vedere se funziona


funziona bene! molte grazie.
Yossarian42,

grazie amico, mi hai salvato!
Vahe Shadunts,

1

Per me ha sempre funzionato fino al 18.04 e dopo il 18.04 l'ho abilitato come in molti articoli, ma improvvisamente ha smesso di funzionare solo ieri (funzionando bene per 4-5 mesi),

ed ecco il ... UNA COSA che l'ha fatto funzionare di nuovo ...

Indica a grub2 dove si trova la partizione di swap:

Per prima cosa scopri su quale partizione si trova usando il comando seguente:

cat /etc/fstab

Il mio è su sda7 come il seguente output:

lo scambio era su / dev / sda7 durante l'installazione

Quindi, aggiungi in Grub2 la seguente aggiunta alla seguente riga, usando il seguente comando:

sudo gedit / etc / default / grub

GRUB_CMDLINE_LINUX_DEFAULT = "intel_pstate = disabilita riprendi = / dev / sda7"

La parte importante è resume=/dev/sda7

/ dev / sda7 nel mio caso

Quindi aggiorna Grub con il seguente comando e dopo questo ha ricominciato a funzionare perfettamente:

sudo update-grub

Dopo molti tentativi questa è stata l'unica cosa che ha funzionato, forse è stato solo a causa di un aggiornamento del kernel che l'ha rovinato, eppure tanto meno ha funzionato.


0

spero che questo possa aiutare qualcuno, ma sto eseguendo popos / ubuntu 19.04. Nella mia configurazione sono stato in grado di ibernare utilizzando s2disk o pm-hibernate, ma il ripristino non è riuscito. Per risolvere questo problema, poiché il mio sistema viene avviato utilizzando UEFI anziché grub. Ho dovuto reinstallare il caricatore di avvio. Per verificare se si sta eseguendo UEFI, utilizzare quanto segue:

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

se in modalità UEFI, ho seguito questa guida per reinstallare il bootloader, varia se si utilizza un disco nvme o un disco sata: https://support.system76.com/articles/bootloader/

assicurati che nelle opzioni di kernalboot specifichi la partizione o l'UUID da dove riprendere, ad esempio qualcosa del genere:

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

Puoi aggiungere questo: 1) sudo kernel-stub -a "resume = UUID = ..." 2) modifica il file /etc/initramfs-tools/conf.d/resume e aggiungi: resume = UUID = ed8347ed- 2eb4-40bc-bc77-cc53b987ed88

controlla il tuo file / var / log / syslog per qualcosa del genere: 4 ago 22:26:42 pop-os / usr / bin / kernelstub [19639]: kernelstub: DEBUG kopts: root = UUID = b37019a8-91f5-445f-94c1 -7359a49ed5df ro quiet loglevel = 0 systemd .show_status = false resume = UUID = ed8347ed-2eb4-40bc-bc77-cc53b987ed88

Se il curriculum è mancante o sbagliato, dovrai aggiornare nuovamente il tuo boot kernal.


0

Oltre a impostare il punto di ripresa dello scambio in grub menzionato nella risposta di Sam73 , ho scoperto che il mio Ubuntu 18.04 deve anche installare laptop-mode-tools:

$sudo apt install laptop-mode-tools

quindi modifica ENABLE_LAPTOP_MODE_ON_AC=1nel file di configurazione:

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

avvia la modalità laptop con:

$sudo laptop_mode start

PS È possibile verificare se il laptop si avvia o meno con

$cat /proc/sys/vm/laptop_mode

Se stampa 0, laptop_modenon funziona, altrimenti indica che funziona bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.