Come posso ibernare su Ubuntu 16.04?


87

Come devo ibernare con successo Ubuntu 16.04?

Ho provato quasi tutte le soluzioni sul web, ma nessuna di queste è stata davvero utile. Ho trovato il mio problema quasi completamente simile a questo



Funziona sudo pm-hibernate?
Pilota

2
la situazione non è cambiata con systemd? ora siamo fatti per usare systemctl hibernatequindi forse non un duplicato ... o almeno potrebbe essere necessaria una risposta aggiornata per rendere valida la vecchia domanda per duplicare
Zanna

Quale versione del kernel stai eseguendo? Digita uname -ril terminale (scusa se lo sapevi già).
WinEunuuchs2Unix

si prega di modificare la domanda e aggiungere l'output di in free modo che possiamo determinare se si dispone di un'impostazione di scambio sufficiente per ibernare correttamente.
Elder Geek,

Risposte:


63

Puoi usare

sudo pm-hibernate 

per verificare se l'ibernazione funziona sul tuo sistema ( questo ibernerà il tuo computer ).

Se non funziona, controlla se la dimensione del tuo swap è almeno grande quanto la tua RAM.

Per aggiungere l'opzione al menu delle impostazioni, è possibile creare un file di configurazione. Apri una finestra del terminale ed esegui questo comando:

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

Apre nano con un file vuoto. Copia le righe sottostanti e incollale nella finestra nano.

[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

Quindi salvare le modifiche e chiudere nano e riavviare il sistema per rendere disponibile Hibernate su "Opzioni risparmio energia".

Riferimento: come posso ibernare il mio computer? nella documentazione ufficiale per Ubuntu 16.04.

Spero funzioni. Questo ha funzionato per me dopo aver provato tutte le altre opzioni.


Abbiamo bisogno di un riavvio dopo aver modificato il file per rendere disponibile Hibernate su "Opzioni risparmio energia".
Jus12,

21
'sudo pm-hibernate' ha ucciso il mio sistema immediatamente senza preavviso. Dovresti dire alla gente che cosa succederà.
Yair Daon,

migliore risposta . Questo funziona anche su 17.4 e 17.10.
Saurabh Bhandari,

1
Questa risposta combinata con quella che dice di aggiungere "resume =" al GRUB_CMDLINE_LINUX_DEFAULT lo ha risolto per me - grazie!
Christoph,

Ho 17 GB nella mia partizione di swap e 16 GB di RAM, perché non funziona? Sembra essere in letargo perché ci vuole un'eternità per spegnere il computer mentre se faccio "spegnimento" si spegne quasi immediatamente. Ma quando riaccendo il computer, tutto è chiuso e devo ricominciare da capo. Non è affatto in letargo. Perché non può essere così semplice come in Windows? Vorrei un po 'di aiuto se qualcuno avesse idee su come ottenerlo in letargo.
user1271772

63

Ibernazione che usa systemctle fa funzionare in casi difficili

Per me, pm-hibernatefallisce sempre. Dopo alcune modifiche, sono stato in grado di ibernare usando l'interfaccia di systemd (init system in 16.04 e versioni successive). Sono anche riuscito a farlo funzionare su 17.04 con un file di scambio. Questo caso di studio può essere utile per gli altri con problemi.

Primo tentativo:

sudo systemctl hibernate

Se il problema persiste, iniziare la risoluzione dei problemi: nello stato di ibernazione (HTD o ACPI S4) lo stato della macchina viene scritto sul disco in modo che non sia necessaria alimentazione per conservarlo. Lo stato viene scritto in una partizione di swap o in un file di swap. Nota: se si utilizza Btrfs NON tentare di utilizzare un file di scambio in quanto ciò potrebbe causare la corruzione del file system

La partizione di swap o il file di swap potrebbe essere necessario avere le stesse dimensioni della RAM per consentire l'ibernazione, ma ci sono buone probabilità che tu sia in grado di ibernare se è almeno 2/5 della dimensione della RAM, secondo la pagina wiki di Arch , quindi prova altri passaggi prima di aumentare le dimensioni dello swap.

Se il problema è che si ottiene un avvio pulito anziché il curriculum previsto, almeno è molto probabile che sia necessario impostare un parametro di avvio per trovare l'immagine del disco

Trova la tua partizione di swap:

grep swap /etc/fstab

per me questo ritorna (output parziale)

# swap was on /dev/mmcblk0p3 during installation

dov'è /dev/mmcblk0p3la partizione da specificare

Aggiungi un parametro di avvio:

sudoedit /etc/default/grub

Alla riga iniziale GRUB_CMDLINE_LINUX_DEFAULTaggiungi resume=/dev/YourSwapPartitionalla sezione tra virgolette (sostituisci con la partizione che hai identificato in precedenza). Usando il mio esempio:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mmcblk0p3" 

Ogni volta che si modifica questo file, è necessario eseguire sudo update-grubo le modifiche non avranno alcun effetto.

Ora devi riavviare. Quindi puoi provare a ibernare, eseguendo il comando:

sudo systemctl hibernate

Per riprendere, premi il pulsante di accensione e il sistema si avvierà.

Se i problemi persistono, avviare il debug.

Includo il mio caso di seguito come esempio, ma informazioni dettagliate sul debug degli stati S sono disponibili in questo blog e anche in questo .

Imposta alcuni altri parametri di avvio per acquisire più informazioni. Rimuovere quiete splashaggiungere initcall_debuge no_console_suspendciò causerà la stampa delle chiamate di sistema init sulla console in modo da poter vedere cosa non va. Ho impostato questo:

GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mmcblk0p3 no_console_suspend initcall_debug"

Il che mi ha aiutato a vedere cosa non andava nel riprendere dal letargo.

Nel mio caso, dopo aver ripreso ho perso il WiFi e il kernel era chiaramente sconvolto poiché la maggior parte dei comandi (ad esempio leggere qualcosa da /sys, ricaricare moduli o qualsiasi systemctlcomando) non funzionava - il processo sembrerebbe avviarsi e bloccarsi (tutto questo sarebbe tornato alla normalità dopo il riavvio ovviamente). Guardando il sistema arrestarsi molto lentamente e leggere tutti i messaggi di debug, ho notato che c'erano molti problemi con "brcm", quindi ho indovinato la colpa del mio modulo driver wireless Broadcom. Abbastanza sicuro ho regolato la mia procedura di ibernazione per scaricare prima il modulo:

sudo modprobe -r brcmfmac
sudo systemctl hibernate

al riavvio reinserisco il modulo

sudo modprobe brcmfmac

E tutto ha funzionato perfettamente. Devo anche inserire nella blacklist il btsdiomodulo che sembra essere incompatibile conbrcmfmac


Aggiornamento: ibernazione utilizzando un file di scambio il 17.04.

Ancora una volta con l'aiuto della pagina wiki di Arch e qualche aggiustamento aggiuntivo, sono riuscito a far funzionare l'ibernazione su 17.04 con un file di scambio. Ciò ha richiesto un parametro di avvio aggiuntivo, resume_offset=ndove n è il primo numero sotto physical_offsetnell'output di sudo filefrag -v /swapfile:

$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 1425873920 (348114 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   32767:      34816..     67583:  32768:            
   1:    32768..   63487:      67584..     98303:  30720:            
   .... 

Pertanto, il parametro di avvio aggiuntivo nel mio caso è resume_offset=34816. È ancora necessario impostare un parametro di avvio per la ripresa della partizione. Questa sarà la partizione di root (o qualunque sia la partizione in cui si trova il tuo file di scambio) I miei parametri ora sono:

GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=/dev/mmcblk1p2 resume_offset=34816"

Dov'è la /dev/mmcblk1p2mia partizione di root (la tua è più probabile che sia qualcosa di simile /dev/sda2).

Durante il curriculum ho visto caricare l'immagine con successo, ma nel mio caso (solo un esempio - YMMVAPD) poi alcuni altri driver ( i2c_designware) hanno lanciato alcuni errori e ho ottenuto un blocco completo del sistema al curriculum. L'ibernazione funziona se scarico quei moduli in aggiunta brcmfmac, ma il sistema diventa rapidamente inutilizzabile senza quei moduli. Ho quindi creato una sorta di script per scaricare i moduli con errori e reinserirli immediatamente al riavvio:

# remove buggy modules
modprobe -r brcmfmac i2c_designware_platform i2c_designware_core &&
# hibernate
echo disk > /sys/power/state
# reinsert
modprobe i2c_designware_core i2c_designware_platform brcmfmac

Quando voglio andare in letargo, corro sudo bash script. Funziona benissimo.


TL; DR

Utilizzare systemd, impostare un parametro di avvio per riprendere dallo scambio, identificare i driver con errori e scaricarli prima di avviare l'ibernazione. Se il sistema non può funzionare a lungo senza quei moduli o è necessario scaricarne diversi, potrebbe essere più semplice utilizzare un semplice script per avviare l'ibernazione.


Da dove provengono queste informazioni, che 2/5 della dimensione della RAM potrebbero essere sufficienti e in quali circostanze? Ho un'opzione utente in Gnome, "Hibernate" e sembra in letargo, ma al risveglio, non funziona correttamente. Ho una partizione di swap di 8 GB e 32 GB di RAM. Non è 2/5, ma prima di creare un file di scambio (o partizione) da 32 GB sarebbe bello saperlo.
cslotty,

@cslotty Ho ricevuto queste informazioni dall'Arch wiki IIRC - fammi sapere se riesci a gestirlo per favore
Zanna,

Grazie @Zanna. Ho scoperto che in realtà non è il letargo, quello che voglio, ma sospendere (S3 / STR) - sry.
cslotty,

@cslotty non preoccuparti affatto. In tal caso, lo scambio non è un problema in quanto non è correlato.
Zanna,

1
Grazie, avevo bisogno di una sintesi di questa risposta e del suggerimento su come disabilitare SecureBoot per farlo funzionare alla fine.
Oligofren,

20

Penso che come abilitare l'ibernazione per la risposta 16.04 sia noto a tutti come descritto nel Wiki di Ubuntu (vedi sotto se hai bisogno dei passaggi). Ma le cose che devono essere verificate non sono approfondite, penso. Almeno, è quello che ho trovato.

Cose da controllare

Dai miei test, ho almeno trovato un controllo extra che dovresti eseguire. Non l'ho trovato da nessuna parte in Internet.

Ecco alcuni controlli -

  1. Controlla che non stai usando alcuna partizione btrfs . . Dal mio test, ho scoperto che se si dispone di partizioni btrfs , l'ibernazione non funzionerà. Rimuovere o modificare il tipo di partizione in ext4non mi ha aiutato. Ho dovuto rimuovere il btrfs-toolspacchetto.

    sudo apt-get purge btrfs-tools
    

    Potresti voler controllare altri nuovi tipi di partizione che non sono stati testati bene. Senza rimuovere il pacchetto, anche la lista nera del driver potrebbe funzionare, ma non l'ho provato.

  2. Inoltre, devi verificare di avere una partizione di swap abbastanza grande da contenere il contenuto della RAM. Se la tua RAM è di 4 GB, lo swap dovrebbe essere di almeno 4 GB di dimensioni (dovresti allocare qualche MB in più per sicurezza).

I passaggi per abilitare l'ibernazione

Implica questi passaggi

  1. Crea un file come root in /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla

    sudo -i nano /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
    
  2. Metti questi contenuti su quel file

    [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
    
  3. Salvare il file premendo Ctrl- O. Esci con Ctrl-X

  4. Riavvia il polkitddemone

    sudo systemctl restart polkitd.service
    

Dovrebbe abilitare l'ibernazione.


2
Grazie Anwar. Ho presentato il bug # 1619846 e ti ho inviato la tua risposta sopra. Qualche possibilità che potresti proporre modifiche / aggiunte più esatte a quella pagina nella documentazione ufficiale?
Gunnar Hjalmarsson,

1
@GunnarHjalmarsson proporrei questo avvertimento. Ma avrò bisogno di più tester per verificarlo. Ti farò sapere più tardi
Anwar,

Ok, parliamo di più allora.
Gunnar Hjalmarsson,

Ho installato su una partizione btrfs e rimosso btrfs-toolssecondo le tue istruzioni. Non riesco ancora a ibernare.
Oxwivi,

1
Sul disco c'è solo vfatper UEFI, e btrfse swap. In realtà sospetto che sia dovuto all'hardware (laptop AMD). Ho intenzione di testarlo su un altro sistema con btrfs e rispondere a te.
Oxwivi,

7

Avvio sicuro

(Ho fatto una domanda simile chiedendo di concentrarmi sulle risposte basate su systemd, condividendo qui la mia soluzione per le persone che seguono questa domanda)

Questa soluzione proviene da argomenti Fedora (sono passati a systemd qualche tempo fa, quindi c'è più materiale lì).

Nel mio caso (nuova installazione 16.04.1 su una macchina che supportava sempre l'ibernazione), chiamare l'obsoleto sudo pm-hibernatenon sembrava fare nulla e l'approccio systemd aggiornato systemctl hibernateavrebbe restituito:

Failed to hibernate system via logind: Sleep verb not supported

Si scopre che l'avvio sicuro è stato il colpevole: con l'installazione di 16.04 ti viene chiesto cosa vuoi fare con esso (che è una cosa nuova per quanto posso ricordare) e l'ho tenuto acceso senza pensarci troppo.

Sul mio computer con avvio protetto attivato, ho cat /sys/power/diskrisposto:

 [disabled]

Dopo il riavvio e la disabilitazione dell'avvio protetto nelle impostazioni del BIOS (sono specifiche della macchina, ma di solito piuttosto semplici) ho provato a cat /sys/power/diske ho ottenuto:

 [platform] shutdown reboot suspend 

che sembra migliore. E infatti chiamare systemctl hibernateprovoca una sequenza di ibernazione / disgelo riuscita.

Inoltre, dopo ho potuto vedere l'ibernazione disponibile come opzione in vari punti dell'interfaccia grafica, senza la necessità di alcun polkithack. Quindi, a quanto pare, da quel momento in poi è systemdstato indovinato /sys/power/diskche il sistema non era in grado di andare in letargo.


Ho fatto esattamente quello che hai spiegato qui. Ma dopo aver eseguito il comando "systemctl hibernate" lo schermo è diventato nero per 3 secondi, quindi il desktop è tornato indietro con tutti i miei programmi aperti, proprio come prima di eseguire il comando. Quando ho eseguito il comando "cat / sys / power / disk" ... mi ha mostrato questo testo: "[platform] shutdown reboot suspend test_resume" che è simile al risultato quando hai eseguito lo stesso dalla tua parte ma l'ultimo testo : "test_resume". Hai idea di cosa potrei provare a risolvere il mio problema?
foxhard,

Non troppo sicuro, sembra che l'ibernazione non funzioni immediatamente sull'hardware, motivo per cui è disabilitato per impostazione predefinita, come altri hanno sottolineato. Potresti voler iniziare una domanda separata sul tuo problema specifico.
Marc,

Solo un mezzo lavoro per me. In letargo ma invece di svegliarsi dal letargo, si avvia normalmente, quindi rimane bloccato per sempre fino a un duro arresto fisico.
matt

6

Questa istruzione ha funzionato per la mia installazione di Ubuntu 18.04.

  1. sudo apt install hibernate Installerà l'ibernazione e altre dipendenze necessarie per l'ibernazione
  2. grep swap /etc/fstab (fing UUID)
  3. sudoedit /etc/default/grub Alla riga GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash" aggiungi UUID di swap. La riga è simile al seguente GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash resume = UUID of swap"
  4. sudo update-grub
  5. Riavvia e dopo il riavvio sudo systemctl hibernate. Se tutto funziona, aggiungi le voci di menu.
  6. sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla ora incolla questo:
[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

copiato da https://askubuntu.com/a/819891/712203

  1. Riavvia il computer
  2. Installa https://extensions.gnome.org/extension/755/hibernate-status-button/

1
invece di aggiungere un valore fisso per /etc/default/grubconsiderare l'aggiornamento di initramfs usando update-initramfs -u -k alle cercare un messaggio simile The initramfs will attempt to resume from /dev/dm-0. Questo imposterà automaticamente il dispositivo di ripresa.
ukos,

Grazie, funziona perfettamente su Ubuntu 18.04! Nota che se è la prima volta che usi un'estensione gnome, dovrai installare un'estensione browser e un connettore. Questo è spiegato nel link di estensione in alto.
Karim Sonbol,

4

Espandendo il mio commento alla risposta di Kelvinelove, il file che suggerisce la modifica non esisteva sul mio sistema (Ubuntu 16.04 nuovo). Invece, ho fatto questo:

  1. sudo nano /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla

  2. Cerca queste sezioni (sono una accanto all'altra):

    [Disattiva l'ibernazione per impostazione predefinita in upower] Identità = utente unix: * Azione = org.freedesktop.upower.hibernate ResultActive = no

    [Disattiva ibernazione per impostazione predefinita nel logind] Identità = utente unix: * Azione = org.freedesktop.login1.hibernate; org.freedesktop.login1.handle-hibernate-key; ResultActive = no

  3. Cambia ResultActive = no in ResultActive = yes per entrambi.

  4. Premi Ctrl + O per salvare il file.
  5. Riavvia il tuo computer
  6. L' opzione Ibernazione è ora disponibile nei menu di accensione.

EDIT: Gunnar ha sottolineato che questo file viene sovrascritto se un certo pacchetto viene aggiornato, quindi a seconda delle tue intenzioni probabilmente non è la soluzione migliore.

Fonte: http://www.zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04/


Il file in /etcnon dovrebbe esistere per impostazione predefinita. È un file di configurazione che crei. La modifica di un file di proprietà del pacchetto, come suggerito sopra, è un cattivo consiglio, poiché verrà sovrascritto al prossimo aggiornamento del pacchetto.
Gunnar Hjalmarsson,

@GunnarHjalmarsson In tal caso, direi che dovrebbe essere dichiarato che potrebbe non esistere. Mi aspetto di più da una risposta Ask Ubuntu più votata di una "copia / incolla questo comando" -> risposta in stile "digita questo" che non ha alcun tipo di verifica se stai facendo la cosa giusta (oltre a controllare se ha funzionato) . Cosa succede se qualcuno trova quella risposta tra un paio d'anni, ma ha paura di provarla poiché il file è vuoto e le istruzioni indicano chiaramente di aggiungerlo, implicando che esiste? Tuttavia, apprezzo le informazioni, le aggiungerò alla risposta per il completamento.
fgblomqvist,

1
Punto valido; Ho modificato la risposta di NirajW con questo chiarimento. Va notato che la fonte originale di informazioni in questa pagina parla della creazione .
Gunnar Hjalmarsson,

È perfetto, mi hai salvato fratello :)
Azam Alvi,

4

Per me, funziona per installare il hibernatepacchetto, riavviare e quindi eseguire sudo hibernate-disk. Sono sicuro che è possibile aggiungerlo al menu, ma per me non vale la pena.


3

Innanzitutto, ti consiglio di testare se la tua macchina supporta l'ibernazione, perché il motivo per cui l'ibernazione è disabilitata per impostazione predefinita è perché a volte ha risultati spiacevoli su alcune macchine. Prova la tua macchina aprendo il terminale ( Ctrl+ Alt+ T) e digitandosudo pm-hibernate

La tua macchina dovrebbe andare in letargo. Riattiva la macchina dopo il letargo e osserva se si comporta male o se agisce normalmente. Se si verificano anomalie dopo il letargo, quindi si consiglia di non continuare con la seguente procedura. Tuttavia, se funziona correttamente, continua ad attivare l'ibernazione in questo modo:

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

Modifica il file aperto e aggiungi queste righe:

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

Successivamente, riavvia il computer e dopo aver effettuato l'accesso, dovresti vedere un'opzione di ibernazione aggiunta nel menu di accensione, nell'angolo in alto a destra delle impostazioni.


Ho thinkpad -E550 e non ha problemi con l'ibernazione quando il mio sistema operativo è Ubuntu 15.1 o Windows 8.1. ma usando Ubuntu 16.04, quando uso il comando "sudo pm-hibernate", non si iberna completamente e solo lo schermo diventa nero e la macchina è ancora accesa.
Mahyar,

Nel mio caso, il comando non fa nulla. Il terminale passa alla nuova riga e attende il comando successivo, ovvero il comando precedente è stato eseguito. Ma non fa nullaat all
Aalok,

Questo non funziona per me. Ubuntu 16.04. L'opzione Ibernazione non viene visualizzata e resta disabilitata in Impostazioni -> Potenza, nient'altro?
Daniele Segato,

Modificare la politica già esistente è meglio: zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04
fgblomqvist

Contenuti incompleti in com.ubuntu.enable-hibernate.pkla. Vedi la risposta pubblicata da NirajW.
Gunnar Hjalmarsson,

3

Ci sono alcune ottime risorse qui per aiutarti a risolvere alcuni dei problemi di ibernazione più comuni in Ubuntu.

Nel mio caso, eseguendo Ubuntu 16.10 su un Lenovo u300s, per far funzionare correttamente l'ibernazione ho dovuto fare quanto segue:

  • Crea un file di scambio di dimensioni adeguate (in genere ho impostato per ~ 1x dimensioni, ma ho sentito fino a 1.6x e 2x)
  • Modifica /etc/default/grubper includere la seguente riga:

    GRUB_CMDLINE_LINUX_DEFAULT="splash quiet pci=nomsi RESUME=UUID=92781adb-f2a6-4f15-88fc-e1ce801291dd"
    

RESUME si riferisce al tuo UUID specifico per il file di scambio. In particolare, sulla mia macchina l'impostazione pci=nomsiera la chiave.

Buona fortuna!


Grub case è insensibile? Perché usare RESUME?
Nelson Gon,

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.