Recentemente ho letto di scrivere cache, NCQ, bug del firmware, barriere, ecc. Riguardo alle unità SATA, e non sono sicuro di quale sia l'impostazione migliore che renderebbe sicuri i miei dati in caso di mancanza di corrente.
Da quanto ho capito, NCQ consente all'unità di riordinare le scritture per ottimizzare le prestazioni, mantenendo il kernel informato su quali richieste sono state scritte fisicamente.
Scrivere cache rende l'unità in grado di soddisfare una richiesta molto più velocemente, perché non attende che i dati vengano scritti sul disco fisico.
Non sono sicuro di come NCQ e Scrivi cache si mescolino qui ...
I filesystem, specialmente quelli con journaling, devono essere sicuri quando una particolare richiesta è stata scritta. Inoltre, il processo dello spazio utente utilizza fsync () per forzare lo svuotamento di un determinato file. Quella chiamata a fsync () non dovrebbe tornare finché il filesystem non è sicuro che i dati vengano scritti sul disco.
C'è una funzione (FUA, Force Unit Access), che ho visto solo su unità SAS, che forza l'unità a bypassare la cache e scrivere direttamente sul disco. Per tutto il resto, ci sono barriere di scrittura, che è un meccanismo fornito dal kernel che può attivare lo svuotamento della cache sull'unità. Questo costringe a scrivere tutta la cache, non solo i dati critici, rallentando così l'intero sistema se abusato, ad esempio con fsync ().
Poi ci sono unità con bug del firmware o che mentono deliberatamente su quando i dati sono stati scritti fisicamente.
Detto questo .. Esistono diversi modi per impostare i dischi / filesystem: A) NCQ e Scrivi cache disabilitata B) Solo NCQ abilitata C) Basta Scrivi cache abilitata D) Sia NCQ che Scrivi cache abilitata
Suppongo che le barriere siano abilitate. A proposito, come verificare se sono effettivamente abilitate?
In caso di interruzione dell'alimentazione, mentre scrivo attivamente sul disco, la mia ipotesi è che l'opzione B (NCQ, nessuna cache) sia sicura, sia per il journal del filesystem che per i dati. Potrebbe esserci una penalità per le prestazioni.
L'opzione D (NCQ + cache), se si usano barriere o FUA, sarebbe sicura per il journal del filesystem e le applicazioni che usano fsync (). Sarebbe un male per i dati che stavano aspettando nella cache, e spetterà al filesystem rilevarli (checksum), e almeno il filesystem non sarà (si spera) in uno stato instabile. Per quanto riguarda le prestazioni, dovrebbe essere migliore.
La mia domanda, tuttavia, rimane ... Mi sto perdendo qualcosa? C'è qualche altra variabile da prendere in considerazione? Esiste uno strumento in grado di confermarlo e che le mie unità si comportano come dovrebbero?