Nessun supporto di memorizzazione può dirsi completamente immune al problema della corruzione dei dati. Le novità tecnologiche via via introdotte consentono però di prevenire perdite di dati in maniera più efficace e, in ogni caso, limitare eventuali danni.
Nell’articolo Come verificare se il PC è compatibile PCIe NVMe abbiamo presentato il protocollo NVMe (Non-Volatile Memory Express) il cui utilizzo sulle unità a stato solido (SSD) permette di ottenere prestazioni inarrivabili con altre soluzioni durante le operazioni di lettura e scrittura massimizzando i benefici derivanti dalla bassa latenza e dai meccanismi di parallelizzazione.
Con la specifica NVMe 1.4 introdotta negli SSD di ultima generazione, è stata abilitata una caratteristica chiamata Read Recovery Level (RRL).
Si tratta di un sistema che aiuta l’unità SSD a gestire automaticamente errori che possono portare al danneggiamento dei dati memorizzati.
Proprio con NVMe 1.4 vengono portate al debutto diverse nuove funzionalità incentrate nella gestione degli errori di lettura non risolvibili e dei dati corrotti, soprattutto nelle configurazioni RAID e in quegli scenari simili in cui i dati che presentano dei problemi possono essere recuperati effettuandone l’estrazione da altre sorgenti.
RRL permette al controller dell’unità SSD di impostare le modalità con cui si dovrebbe procedere con il tentativo di ripristino dei dati corrotti in caso di problemi.
Gli SSD utilizzano infatti più livelli per la correzione degli errori (ECC): ogni strato che si aggiunge rende il sistema per il superamento degli errori più robusto ma allo stesso tempo rende l’unità più lenta e aumenta i consumi energetici con una conseguente maggiore produzione di calore.
In una configurazione RAID 1 il controller generalmente preferirà sbarazzarsi rapidamente di un errore semplicemente cercando di leggere gli stessi dati corrottisi sull’SSD attingendo a un’altra unità che compone la configurazione RAID. I dati danneggiati verranno automaticamente sostituiti e tutto continuerà a funzionare normalmente.
Fino ad ora l’SSD doveva cercare di correggere il problema da solo con meccanismi ECC rallentando le prestazioni dell’unità e aumentando notevolmente il consumo energetico e il calore generato. Con ECC, inoltre, non vi è comunque garanzia circa la possibilità di recuperare i dati corrotti anche se il sistema funziona bene quando si verificano semplici errori di lettura.
Per recuperare eventuali errori di lettura, le specifiche NVMe 1.4 permettono di sfruttare fino a un massimo di 16 livelli per la gestione degli errori anche se le unità che implementano questa funzione devono usare un minimo di due livelli per essere conformi a NVMe 1.4.
Uno dei punti di forza di NVMe 1.4 è però l’aggiunta dei comandi Verify e Get LBA Status: si tratta di una soluzione che permette di prevenire proattivamente errori di lettura irrecuperabili. L’unità può così effettuare un controllo a basso livello sui dati memorizzati senza essere vincolata, per lo svolgimento di queste operazioni, alla larghezza di banda dell’interfaccia host.
Alcuni SSD reagiscono a un errore ECC riparabile spostando o riscrivendo i dati interessati da un problema: il comando di verifica attiverà lo stesso comportamento. In questo modo viene ridotta la necessità di eseguire debug e verifica del checksum a livello di file system migliorando le prestazioni.
Ogni operazione di verifica viene “etichettata” con un bit che indica se l’SSD deve scartare rapidamente l’errore o tentare di recuperare i dati.
La funzione Get LBA Status permette all’unità di fornire al controller una lista di blocchi che probabilmente finiranno per presentare errori di lettura irrecuperabili nel caso in cui si provasse ad avviare su di essi un’operazione di lettura o di verifica.
Il controller è così in grado di costruire una lista di dati che sono candidati a evidenziare problemi prevenendo in anticipo eventuali incidenti con la perdita delle informazioni salvate.
Quando il controller dovesse avere notizia che sull’unità SSD ci sono dati “problematici”, sia attraverso la funzione Get LBA Status, sulla base di normali operazioni di lettura o con l’ausilio del comando di verifica, può provare a riscrivere questi dati sullo stesso blocco logico usando una copia delle stesse informazioni ottenuta da qualche altra parte (sistema RAID o un backup); qualunque blocco fisico danneggiato verrà invece automaticamente rimosso.