- L'ibernazione in GNU/Linux salva l'intero stato della RAM per lo swap e spegne il computer, mentre la sospensione mantiene la memoria nella RAM con un basso consumo energetico.
- Affinché la modalità di ibernazione funzioni in modo affidabile, sono necessari il supporto del kernel e uno spazio di swap sufficiente, ovvero una partizione di swap o un file di swap ben configurato.
- Diversi strumenti (systemd, pm-utils, uswsusp e PolicyKit) consentono di abilitare, controllare o disabilitare l'ibernazione e la sospensione a seconda dello scenario di distribuzione e di utilizzo.
- La scelta tra sospensione, ibernazione o riavvio con ripristino della sessione dipende dall'equilibrio ricercato tra risparmio energetico, velocità di ritorno al lavoro e stabilità del sistema.

La ibernazione in GNU/Linux Rimane una di quelle funzionalità di cui tutti hanno sentito parlare, ma che non sempre viene compresa a fondo o configurata correttamente. Molti utenti arrivano qui dopo aver riscontrato problemi con Windows o laptop che si spengono improvvisamente e vogliono sapere esattamente a cosa serve ogni modalità di risparmio energetico e come gestirla nella loro distribuzione Linux.
Nelle ultime versioni del kernel e nelle principali distribuzioni le cose sono migliorate notevolmente, ma sono ancora presenti. Importanti sfumature tra ibernazione, sospensione e spegnimento con riapertura dei documentiOltre ai dettagli tecnici, come l'uso dello spazio di swap (in partizioni o file), che è importante comprendere, spiegheremo tutto questo in modo calmo, ma chiaro e pratico.
Ibernazione, sospensione e riavvio con ripristino della sessione: quali sono le differenze
Prima di toccare qualsiasi cosa nelle impostazioni, è fondamentale capire cosa fa realmente ogni modalità di risparmio energeticoPerché spesso i concetti vengono confusi e poi arrivano gli spaventi, come la perdita di dati o la scarica delle batterie.
Quando parliamo di ibernazione nei sistemi operativi, ci riferiamo a un processo mediante il quale l'intero stato del sistema viene congelatoProgrammi aperti, documenti, servizi, impostazioni del desktop, buffer, ecc. Tutto il contenuto della RAM viene salvato su un supporto di memorizzazione persistente (solitamente uno swap su disco) e la macchina viene completamente spenta.
Questo implica che L'ibernazione non è la stessa cosa che lasciare semplicemente i file aperti. Non è la stessa cosa che spegnere il computer, né che metterlo in sospensione. È più lento della sospensione su RAM, ma consente di risparmiare molta più energia perché il computer è completamente spento, senza alcun consumo di energia.
D'altra parte, alcuni sistemi offrono qualcosa di simile a un "riavvio con riapertura del documento", in cui il sistema si spegne normalmente, ma al riavvio Le applicazioni aperte vengono riavviate automaticamente.In GNU/Linux molte distribuzioni imitano questo comportamento dell'ambiente desktop, ma non si tratta di ibernazione: si tratta comunque di un avvio a freddo con tutti i servizi avviati da zero.
Il vantaggio dell'ibernazione rispetto al riavvio con ripristino dell'app è che Il kernel e lo spazio utente non vengono riavviati da zero.Viene invece ripristinata un'immagine completa dello stato precedente. Pertanto, quando tutto funziona correttamente, è possibile riprendere il lavoro esattamente dal punto in cui si era interrotto, senza riaprire documenti o riconfigurare finestre.
Cos'è la sospensione in Linux e perché vale la pena usarla?
In modalità sospensione, il sistema operativo genera un quadro vivido dello stato attuale (i tuoi programmi, i tuoi documenti, il desktop) ma, invece di scriverli sul disco, li lascia nella RAM, che è volatile.
Quando il kernel è in sospensione, spegne praticamente tutti i dispositivi hardware: disco, schermo, la maggior parte del chipset... L'unico componente che rimane alimentato è il RAM e specifiche minime della scheda madre in modo che possa "riattivarsi" quando si preme un tasto, si muove il mouse o si apre il coperchio del portatile.
Questa modalità è ottima quando vuoi un ritorno quasi istantaneo al desktop E non devi preoccuparti troppo del consumo energetico quando il computer è inattivo. Un laptop moderno può rimanere in modalità sospensione da uno a tre giorni con l'alimentazione a batteria, ma durante questo periodo continua a consumare energia per mantenere attiva la RAM.
Le sospensioni standard sono particolarmente consigliate se si dispone di più di 2 GB di RAM e poco spazio su disco (ad esempio, su SSD di piccole dimensioni) o se si prevede di utilizzare nuovamente il computer molto presto. Questo è tipico quando si chiude il coperchio per qualche minuto tra una lezione e l'altra o ci si ferma per pranzo.
Sospensioni ibride: un mix di RAM e disco
Esiste un terzo modo, meno conosciuto: il sospensioni ibrideIn questo caso, il sistema esegue l'intero processo di ibernazione (scarica il contenuto della memoria sul disco, solitamente per effettuare lo swap), ma invece di spegnersi completamente, entra in uno stato di sospensione nella RAM.
Ciò crea uno scenario misto: se la batteria regge, Solleverai il sistema con la stessa rapidità di una sospensione normale.Tuttavia, se si verifica un'interruzione di corrente, l'immagine salvata sul disco consentirà di ripristinare la sessione come se fosse stata ibernata.
Il rovescio della medaglia è che Ci vuole più tempo per entrare e uscire. È più di una semplice sospensione, perché scrive su disco e mantiene anche alimentata la RAM. Ecco perché viene spesso utilizzato su server o workstation che necessitano di un ulteriore livello di sicurezza contro la perdita di stato.
Come funziona internamente l'ibernazione in GNU/Linux
Quando si iberna un sistema GNU/Linux, il kernel esegue una serie di passaggi abbastanza ben definiti per catturare e ripristinare lo stato completo della macchinaNon si tratta semplicemente di "salvare la RAM in un file" e basta.
Il tipico processo di sospensione su disco (suspend-to-disk) La sequenza generale è la seguente:
- I processi utente vengono arrestati per congelarne lo stato e impedirgli di continuare a modificare la memoria mentre è in corso l'acquisizione.
- I dispositivi hardware vengono bloccati o arrestati per impedire modifiche alla memoria associate ai controller e al DMA.
- L'immagine del letargo è creata: L'intero contenuto della RAM viene copiato con interruzioni disattivate.
- I dispositivi hardware vengono riattivati in modo controllato.
- L'immagine è scritta nel spazio di swap, che viene quindi considerata un'area di sospensione (swsusp o linux-suspend).
- Infine, tutti i dispositivi vengono sospesi e il computer viene spento completamente.
Al riavvio, il sistema di avviamento Controlla se esiste un'immagine di ibernazione valida:
- Se ce n'è uno, Non si avvia normalmente.ma legge l'immagine dallo swap.
- I dispositivi vengono nuovamente bloccati per evitare interferenze.
- L'immagine viene copiata dallo swap alla RAM e riattivare processi e dispositivi come erano prima di andare in letargo.
Un dettaglio curioso osservato nei test del mondo reale: dopo l'ibernazione, la vecchia "partizione linux-swap" appare etichettata come linux-suspend o swsusp In strumenti come GParted o parted. Questo cambio di tipo è uno degli indizi che il sistema usa per sapere se ripristinare il sistema dall'ibernazione o ripartire da zero.
L'importanza dello scambio durante il letargo
L'intero meccanismo implica un requisito fondamentale: l'ibernazione in Linux Hai bisogno di uno spazio di swap adattosia in termini di dimensioni che di configurazione. Senza swap, il sistema non avrà spazio dove memorizzare l'immagine RAM.
Lo scambio può essere:
- Un partizione dedicata con tipo di sistema linux-swap.
- Un file di scambio situato in un normale file system (ad esempio, in /swapfile).
Per scopi pratici, il kernel tratta entrambi come spazio di swap in modo trasparente. Tuttavia, per utilizzare un file di swap come destinazione di ibernazione È necessario comunicare al kernel, tramite il boot manager, parametri come resume= (dispositivo) e resume_offset= (spostamento all'interno del file). In caso contrario, il sistema verrà riavviato da zero e non ripristinerà l'immagine, anche se scritta su disco.
Per quanto riguarda le dimensioni, la raccomandazione classica per un letargo affidabile è che lo swap dovrebbe avere almeno la dimensione della RAM fisicaÈ vero che se il sistema è fortemente sottoutilizzato, a volte è possibile ibernare con uno spazio di swap leggermente più piccolo, ma non è una soluzione certa e non dovrebbe essere generalizzata. Su sistemi con 32 GB o 64 GB di RAM o più, molti amministratori sconsigliano del tutto l'ibernazione a causa di limitazioni di tempo e di spazio di archiviazione.
Vale anche la pena ricordare che esistono meccanismi come zram o zswapche creano un'area di swap compressa all'interno della RAM stessa. Sono fantastiche per migliorare le prestazioni su sistemi con memoria limitata, ma non sono adatte come destinazione per l'ibernazione: essendo volatili, L'immagine scompariva quando veniva interrotta la corrente..
Ibernazione sulla partizione di swap vs. swapfile
Per anni è stato considerato quasi obbligatorio avere una partizione di swap dedicata Se si desiderava ibernare senza complicazioni, il comportamento del kernel e di strumenti come initramfs si basava in gran parte su quel modello classico.
Tuttavia, molte distribuzioni moderne, come Ubuntu nelle versioni più recenti, sono passate a utilizzarlo di default. un file di swap invece di una partizioneCiò non significa che la capacità di ibernazione venga persa, ma cambia semplicemente il luogo in cui viene salvato lo stato.
In entrambi i casi, il processo di base è lo stesso: L'immagine dalla RAM va in uno spazio di swap persistenteLa differenza è che, con uno swapfile, il sistema deve conoscere il blocco esatto sul disco in cui inizia il file (da qui il parametro). resume_offset) per poter leggere l'immagine in anticipo durante l'avvio.
Esperimenti pratici su macchine Debian e derivate hanno dimostrato che, se La partizione di swap è formattata o eliminata Dove è stata salvata l'immagine di ibernazione, il successivo avvio sarà pulito, come se l'ibernazione non si fosse mai verificata. Ciò conferma che l'immagine è effettivamente salvata nello spazio di swap e non altrove sul disco.
Requisiti del kernel e supporto nelle distribuzioni
Oltre allo spazio di scambio, è necessario che il Il kernel Linux ha il supporto per l'ibernazione abilitatoSe compili il tuo kernel e disabiliti questa opzione, non sarai in grado di ibernare il sistema, indipendentemente da quanto modifichi la configurazione della distribuzione.
In pratica, la maggior parte delle distribuzioni utilizza il kernel confezionato dal progetto stesso, e in quei casi Di solito la modalità di ibernazione è abilitata per impostazione predefinita. insieme al resto delle consuete funzioni e driver di gestione dell'alimentazione.
Tuttavia, non tutte le distribuzioni visualizzano sempre il pulsante "Ibernazione" nei loro menu grafici. Alcune, come Ubuntu in alcune versioni, Per impostazione predefinita, nascondono l'opzione sul desktop. nonostante il kernel e l'infrastruttura di ibernazione siano pienamente operativi.
Come abilitare la sospensione in Ubuntu utilizzando PolicyKit
Nei sistemi Ubuntu in cui l'opzione di ibernazione non appare nel menu di spegnimento, è possibile riabilitare in modo relativamente semplice Modificando alcune regole di PolicyKit, l'idea è quella di autorizzare gli utenti normali a richiamare le azioni di ibernazione di upower e logind.
La procedura tipica prevede la creazione di un file di configurazione, ad esempio com.ubuntu.enable-hibernate.pklacon contenuto simile a questo (adattato alla sintassi utilizzata dai tuoi strumenti):
Identità=unix-user:*
Action=org.freedesktop.upower.hibernate
RisultatoAttivo=sì
Identità=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
RisultatoAttivo=sì
Una volta creato il file, è necessario inserirlo in /etc/polkit-1/localauthority/50-local.d/Per fare ciò, puoi aprire il tuo file manager come amministratore (ad esempio con gksudo nautilus negli ambienti che lo supportano ancora) e incollarlo in quella directory.
Dopo aver riavviato il sistema, il desktop Ubuntu mostrerà l'opzione di ibernazione Oltre alle funzioni di spegnimento, riavvio o sospensione, ovviamente, sono ancora necessari uno spazio di swap sufficientemente ampio e un kernel con supporto per l'ibernazione.

Comandi di ibernazione e sospensione dal terminale
Se preferisci il terminale o utilizzi ambienti leggeri (Fluxbox, IceWM, Openbox, JWM, ecc.) in cui non sono presenti pulsanti di accensione preconfigurati, puoi controllare ibernazione e sospensione direttamente con i comandi.
Utilizzo di pm-utils
In molte distribuzioni Debian/Ubuntu classiche, il pacchetto pm-utils Fornisce diversi comandi semplici:
- pm-sospendereQuesta operazione sospende il computer nella RAM. La maggior parte dei dispositivi viene spenta e lo stato viene mantenuto in memoria. Il consumo energetico viene notevolmente ridotto, ma l'energia continua a essere utilizzata.
- pm-ibernazione: iberna il sistema salvando la RAM sul disco (swap) e spegnendo completamente il computer.
- pm-suspend-hybridEsegue la sospensione del disco e, invece di spegnerlo, mette la RAM in modalità sospensione, ottenendo così una "sospensione ibrida".
L'uso di base sarebbe:
sudo pm-suspend
sudo pm-hibernate
sudo pm-suspend-hybrid
Sui sistemi derivati da Arch Linux e altri che lo mantengono nei loro repository, puoi anche usare questi comandi, sebbene pm-utils è stato abbandonato a favore di systemd in molte distribuzioni moderne.
Utilizzo di systemd (systemctl)
Nelle distribuzioni con systemd (OpenSUSE, molte versioni di Arch e derivate, Debian moderna, ecc.), il metodo consigliato è quello di utilizzare systemctl:
- systemctl sospende: sospende la RAM.
- systemctl ibernazione: iberna su disco.
- systemctl hybrid-sleep: attiva le sospensioni ibride.
Ad esempio, in OpenSUSE o in qualsiasi tipico sistema systemd, è possibile chiamare direttamente:
sudo systemctl ibernazione
In molte distribuzioni, se si preferisce mantenere la compatibilità con gli strumenti più vecchi, pm-ibernazione Rimane disponibile e semplicemente delega o coesiste con systemd a seconda della configurazione.
Utilizzo di uswsusp: s2ram, s2disk e s2both
Un'altra famiglia di strumenti, oggi meno comune, è uswsuspche fornisce i comandi s2ram, s2disk e s2both. Era disponibile in Debian e Ubuntu fino ad alcune versioni (Debian 10; Ubuntu 20.04 e successive lo hanno deprecato).
- s2ram: sospende il sistema nella RAM (modalità S3). Equivale a pm-suspend o systemctl suspend.
- s2disk: salva lo stato completo su disco e spegne la macchina (ibernazione classica).
- s2both: combina entrambe le cose: scrive l'immagine sul disco e poi la sospende nella RAM, ottenendo un comportamento ibrido.
I comandi sarebbero:
sudo s2ram
sudo s2disk
sudo s2both
Queste utilità richiedono una corretta configurazione initramfs in modo che, all'avvio, il meccanismo di ripresa si chiama (resume) e ripristinare l'immagine se esiste.
Come disattivare la sospensione e l'ibernazione sui sistemi GNU/Linux
In alcuni ambienti, come aule, computer condivisi o postazioni di lavoro pubbliche, la sospensione e l'ibernazione possono causare arresti imprevisti, problemi di rete o blocchi difficili da spiegare agli utentiIn questi casi, a volte la cosa più pratica da fare è disattivare completamente queste funzioni.
Disabilitare l'utilizzo di systemd (maschera di destinazione)
Se il tuo sistema utilizza systemd, basta mascherare gli obiettivi legati al sonno e al letargo in modo che non possano essere attivati né dai menu grafici né dal terminale:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Ciò reindirizza tali obiettivi a / Dev / nullIn altre parole, li manda simbolicamente "nel cestino". Dopo un riavvio, qualsiasi tentativo di sospensione o ibernazione fallirà in modo netto.
Se in seguito si desidera ripristinare il comportamento normale, sarà sufficiente utilizzare:
sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target
Disabilitare i pulsanti di sospensione e ibernazione con PolicyKit
Un'altra opzione più raffinata è quella di utilizzare PolicyKit per rimuovere i permessi di sospensione/ibernazione a tutti gli utenti. Ad esempio, puoi creare file in /etc/polkit-1/localauthority/90-mandatory.d/ come:
/etc/polkit-1/localauthority/90-mandatory.d/disable-suspend.pkla
Identità=unix-user:*
Action=org.freedesktop.upower.suspend
RisultatoAttivo=no
Risultato inattivo=no
ResultAny=no
Identità=unix-user:*
Azione=org.freedesktop.login1.suspend
RisultatoAttivo=no
Identità=unix-user:*
Action=org.freedesktop.login1.suspend-multiple-sessions
RisultatoAttivo=no
E per il Hibernación:
/etc/polkit-1/localauthority/90-mandatory.d/disable-hibernate.pkla
Identità=unix-user:*
Action=org.freedesktop.upower.hibernate
RisultatoAttivo=no
Risultato inattivo=no
ResultAny=no
Identità=unix-user:*
Action=org.freedesktop.login1.hibernate
RisultatoAttivo=no
Identità=unix-user:*
Action=org.freedesktop.login1.hibernate-multiple-sessions
RisultatoAttivo=no
Dopo il riavvio, i pulsanti di sospensione e ibernazione scompariranno dai menu grafici. impedendo all'utente di attivarli involontariamente.
Blocca le scorciatoie da tastiera e i comandi diretti
Anche se nascondi i pulsanti, alcuni desktop e tastiere li hanno comunque. tasti speciali per la sospensione/ibernazione che può continuare a funzionare. Negli ambienti più vecchi con GNOME classico, questo poteva essere modificato con comandi come:
gconftool -s /apps/gnome-power-manager/buttons/hibernate -t stringa interattiva
Inoltre, puoi creare script in /etc/pm/sleep.d/Come /etc/pm/sleep.d/000cancel-hibernate-suspendche semplicemente Annullare qualsiasi tentativo di sospensione o ibernazione Restituire il controllo al sistema. Uno schema tipico sarebbe:
# / Bin / sh
# impedisce l'ibernazione e la sospensione
. «$PM_FUNCTIONS»
caso «${1}» in
sospendere|ibernare)
inibire
;;
riprendere|scongelare)
esci da 0
;;
che C
Non dimenticare di dargli i permessi di esecuzione:
chmod 0755 /etc/pm/sleep.d/000cancel-hibernate-suspend
Quando è opportuno andare in letargo e quando no?
Con tutta questa teoria sul tavolo, rimane la parte pratica: Quando vale davvero la pena ibernare GNU/Linux? Non esiste una risposta univoca, ma ci sono alcune linee guida ragionevoli.
Se la tua priorità principale è risparmiare energia (Ad esempio, su un portatile che lasci inutilizzato per molte ore) e hai molto spazio su disco per l'immagine di memoria, l'ibernazione è un'opzione molto interessante; puoi leggere come scegliere tra Spegni, sospendi o iberna il tuo PCIl consumo energetico in modalità ibernazione è pari a zero e, una volta tornati alla normalità, il computer si riavvia molto più velocemente rispetto a un avvio a freddo.
Se quello che vuoi è la massima velocità quando torni al desktop e lasci il computer inattivo. solo per un breve periodoSospendere su RAM potrebbe essere più comodo. Il computer consumerà comunque un po' di batteria, ma la ripresa sarà quasi istantanea.
Nei sistemi con molta RAM, o dove la stabilità alla ripresa non è garantita (certo hardware insolito, driver esotici, ecc.), spesso vale la pena rinunciare alla modalità di sospensione e optare per una buona funzione di sospensione e un riavvio pulito con ripristino del documento Quando necessario.
In definitiva, una comprensione approfondita di come si basano sullo swap, di cosa fa il kernel sotto il cofano e di come controllarli con strumenti come systemd, pm-utils, uswsusp o PolicyKit consente di trattare l'ibernazione e la sospensione come strumenti a tuo favoree non funzioni misteriose che a volte funzionano e a volte lasciano il portatile "bloccato" senza alcuna spiegazione apparente.
Sommario
- Ibernazione, sospensione e riavvio con ripristino della sessione: quali sono le differenze
- Cos'è la sospensione in Linux e perché vale la pena usarla?
- Sospensioni ibride: un mix di RAM e disco
- Come funziona internamente l'ibernazione in GNU/Linux
- L'importanza dello scambio durante il letargo
- Ibernazione sulla partizione di swap vs. swapfile
- Requisiti del kernel e supporto nelle distribuzioni
- Come abilitare la sospensione in Ubuntu utilizzando PolicyKit
- Comandi di ibernazione e sospensione dal terminale
- Come disattivare la sospensione e l'ibernazione sui sistemi GNU/Linux
- Quando è opportuno andare in letargo e quando no?
