Quando ho migrato il mio ThinkPad T14s Gen 2i da Fedora a Debian 13, una delle prime cose che ho notato è che l’hibernazione — chiudere il coperchio e ritrovare tutto esattamente come l’avevo lasciato, senza consumo di batteria — non funzionava subito come su Windows o su Fedora. Il motivo è semplice: Debian, come molte distribuzioni moderne, non crea più di default una partizione di swap dedicata, e senza swap (o senza uno swapfile configurato correttamente) l’hibernazione semplicemente non ha dove scrivere lo stato della RAM.
Configurarla con uno swapfile invece che con una partizione dedicata è stata la scelta giusta per me — più flessibile, ridimensionabile senza toccare le partizioni — ma richiede qualche passaggio in più rispetto al setup classico. Ecco esattamente cosa ho fatto.
Questa guida fa parte del percorso completo su Debian 13 Trixie su ThinkPad.
Perché uno swapfile e non una partizione swap
Le distribuzioni più recenti (Debian compreso, con l’installer che spesso non alloca più swap dedicato se hai abbastanza RAM) tendono a preferire lo swapfile per un motivo pratico: puoi crearlo, ridimensionarlo o eliminarlo senza dover ripartizionare il disco. Se in futuro cambio idea sulla dimensione, modifico un file — non tocco lo schema delle partizioni.
Il compromesso è che configurare l’hibernazione con uno swapfile richiede di recuperare manualmente due informazioni che con una partizione dedicata il sistema troverebbe da solo: l’UUID del filesystem che ospita lo swapfile, e l’offset fisico del file all’interno di quel filesystem.
Requisito: quanto deve essere grande lo swapfile
Per l’hibernazione, lo swapfile deve poter contenere l’intero contenuto della RAM (più un margine di sicurezza). Sul mio ThinkPad con 16GB di RAM, ho creato uno swapfile da 16GB esatti — se hai meno RAM o vuoi un margine più ampio, regola la dimensione di conseguenza.
Configurazione passo-passo
1. Crea lo swapfile
sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Se il tuo filesystem è Btrfs, fallocate da solo non basta — servono attributi specifici (No_COW e compressione disabilitata) prima di popolare il file, altrimenti l’hibernazione non funzionerà correttamente. Su ext4 (il filesystem di default di Debian) i comandi sopra sono sufficienti.
2. Rendilo permanente in fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
3. Trova l’UUID del filesystem
findmnt -no UUID -T /swapfile
Segnati il valore restituito, ti servirà tra poco.
4. Trova l’offset dello swapfile
Questo è il passaggio che quasi tutte le guide generiche saltano o spiegano male. Su ext4:
sudo filefrag -v /swapfile | awk '$1=="0:" {print substr($4, 1, length($4)-2)}'
Il numero restituito è l’offset fisico (in blocchi filesystem) del primo blocco del file. È il valore che permette al kernel, durante il resume, di trovare lo stato salvato senza dover montare prima il filesystem.
5. Configura i parametri del kernel
Modifica la configurazione di GRUB:
sudo nano /etc/default/grub
Nella riga GRUB_CMDLINE_LINUX_DEFAULT, aggiungi (sostituendo con i tuoi valori reali):
resume=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx resume_offset=1234567
Poi applica le modifiche:
sudo update-grub
Se in futuro decidi anche di nascondere i messaggi del kernel e il menu di GRUB all’avvio (io l’ho fatto proprio su questo stesso file), ho scritto una guida dedicata: Boot silenzioso su Debian con GRUB e Plymouth.
6. Configura initramfs-tools
echo 'RESUME=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' | sudo tee /etc/initramfs-tools/conf.d/resume
sudo update-initramfs -u -k all
7. Riavvia e testa
sudo reboot
Dopo il riavvio, testa l’hibernazione direttamente:
sudo systemctl hibernate
Se tutto è configurato correttamente, il PC si spegne completamente e, alla riaccensione, ritrovi la sessione esattamente come l’avevi lasciata — browser aperti, documenti, tutto.
Il problema che quasi mi ha fatto rinunciare: l’offset che cambia
Qui viene la parte che ho imparato a mie spese. L’offset dello swapfile non è fisso per sempre: se il file viene ricreato, deframmentato, o se il filesystem riorganizza i blocchi (capita più spesso di quanto pensi), il valore cambia — e l’hibernazione smette di funzionare silenziosamente, senza errori evidenti, finché non provi a fare il resume e ti ritrovi con un boot pulito invece che con la sessione salvata.
La soluzione che uso è un hook di post-installazione del kernel, che ricalcola l’offset automaticamente ogni volta che viene installato un nuovo kernel (momento in cui initramfs viene comunque rigenerato):
sudo nano /etc/kernel/postinst.d/resume-offset-update
Contenuto dello script:
#!/bin/bash
OFFSET=$(filefrag -v /swapfile | awk '$1=="0:" {print substr($4, 1, length($4)-2)}')
sed -i "s/resume_offset=[0-9]*/resume_offset=$OFFSET/" /etc/default/grub
update-grub
Rendilo eseguibile:
sudo chmod +x /etc/kernel/postinst.d/resume-offset-update
Da quando ho aggiunto questo hook, non ho più avuto sorprese dopo un aggiornamento del kernel — che su Debian, con i rilasci regolari di sicurezza, capita con una certa frequenza.
Un’ultima nota pratica: se il tuo disco è pieno o vicino alla capienza massima, aggiungere uno swapfile da 16GB (o più, in base alla tua RAM) può creare problemi di spazio.
Se sei corto di spazio, un SSD NVMe da 1TB su Amazon costa ormai relativamente poco e ti toglie qualsiasi pensiero sullo spazio libero, sia per lo swapfile che per il resto del sistema.
Conclusione
L’hibernazione con swapfile su Debian 13 richiede qualche passaggio manuale in più rispetto a una partizione swap dedicata, ma una volta capito il meccanismo di UUID e offset è del tutto affidabile — e lo script di aggiornamento automatico elimina l’unico vero punto debole di questo approccio. Se stai configurando da zero un ThinkPad (o un notebook simile) su Debian, questa guida si inserisce bene insieme alle altre sistemazioni che ho documentato per lo stesso setup: dal WiFi Intel AX201 che si disconnette al GNOME Keyring che chiede sempre la password.
L’ho poi disattivata, ma la configurazione è questa.
Articoli correlati:


