Vai al contenuto
Offerte

UEFI NVRAM: la memoria nascosta che può bloccare il PC

In questo articolo Indice dei contenuti 3 sezioni

Nel cuore di ogni computer esiste un piccolo spazio di memoria che pochi conoscono, ma che può fare la differenza tra un avvio regolare e un PC che si rifiuta di partire. Parliamo della UEFI NVRAM, una memoria minuscola saldata sulla scheda madre che custodisce le impostazioni fondamentali per l’accensione della macchina. Ordine di avvio, stato del secure boot, velocità delle ventole e altri parametri che sopravvivono allo spegnimento vivono tutti lì dentro. E come qualsiasi spazio di archiviazione, prima o poi può riempirsi.

Cosa custodisce davvero il firmware del computer

Questa regione di memoria flash si comporta più o meno come un normale dispositivo di archiviazione. È piccola in partenza, a volte appena 64KB, perché deve contenere solo i dati necessari all’avvio insieme alle impostazioni di sicurezza e a qualche altro parametro sparso. Il nome tecnico è UEFI NVRAM, ossia memoria RAM non volatile, e di solito si trova sullo stesso chip SPI che ospita l’immagine del firmware. Al suo interno vengono conservate le cosiddette variabili EFI, cioè le singole impostazioni della macchina, come il timeout di avvio o quale disco provare per primo all’accensione.

Su Linux questo dispositivo è accessibile tramite il percorso /sys/firmware/efi/efivars, attraverso un filesystem chiamato efivarfs. Con qualsiasi kernel degli ultimi anni basta lanciare il comando df -h per vedere la capacità della NVRAM e quanto spazio è già occupato. A contendersi quei pochi kilobyte ci sono diverse cose. Le voci di avvio e l’ordine di boot, ma anche i database delle chiavi del Secure Boot. Uno di questi, chiamato dbx, è una lista di bootloader vulnerabili da revocare, cresciuta parecchio negli anni. Chi ricorda la vulnerabilità BootHole del 2020 sa che la correzione comportò l’aggiunta di una serie di nuove voci a quella lista, quindi più dati scritti nella memoria. Alcuni produttori, poi, scrivono direttamente lì anche log di errori e registri di crash.

Come liberare spazio su un disco che non si vede

Il problema nasce spesso da un dettaglio poco intuitivo. Quando si rimuove una variabile EFI, lo spazio che occupava non torna subito disponibile. Il firmware la marca come non valida, ma la memoria viene recuperata solo quando parte la sua routine di pulizia, la cosiddetta garbage collection, che di solito scatta all’avvio e solo quando lo spazio libero scende sotto una certa soglia. I firmware più vecchi o economici a volte gestiscono male questa operazione, o la saltano del tutto, aumentando il rischio di saturazione.

Vale la pena preoccuparsi della pulizia solo se si stanno davvero riscontrando problemi di capacità. Mettere mano alle variabili EFI senza motivo fa più danni che altro. Su Linux il comando efibootmgr -v elenca tutte le voci di avvio conosciute dal firmware, e se sono stati rimossi dei dischi potrebbero comparire delle voci orfane. Si possono cancellare una alla volta con efibootmgr -b seguito dal numero della voce e dal parametro -B. Ma è meglio non farlo se non compare un errore relativo allo spazio durante un aggiornamento del bootloader.

Per lo spazio morto la soluzione è la deframmentazione. Il comando dmpstore salva tutte le variabili in un file, azzera la NVRAM e le riscrive in modo contiguo. Un utente che aveva incontrato il problema è passato da 60K occupati a 14K dopo un riavvio, con tutte le impostazioni intatte.

Un problema quasi solo dei vecchi computer

Per la maggior parte delle persone si tratta di un non problema. Le schede più recenti hanno più spazio, la garbage collection del firmware è migliorata parecchio e chi non ha mai toccato le voci di avvio potrebbe andare avanti per decenni senza incontrare nulla del genere. Nessuno dovrebbe mettersi a deframmentare preventivamente la propria NVRAM.

Eppure ogni tanto salta fuori anche su macchine moderne, come è successo con alcuni laptop Framework. Lanciando fwupdmgr per aggiornare il firmware, diversi utenti si sono trovati davanti l’errore “Not enough efivarfs space”. La soluzione è stata lasciare che il sistema liberasse spazio con un ripristino alle impostazioni di fabbrica dal menu UEFI, che in pratica forza una deframmentazione e rende di nuovo utilizzabile lo spazio morto. Sapere che tutto questo può accadere è già metà del lavoro. L’altra metà sta nel conoscere i due modi per liberare la memoria, cioè la deframmentazione manuale oppure il ripristino ai valori predefiniti dal UEFI.

Condividi:
81 Condivisioni