Esiste un modo per proteggere l'SSD dalla corruzione a causa della perdita di potenza?


15

Abbiamo un gruppo di terminali consumer su cui è installato Linux, un server Web locale e PostgreSQL. Stiamo ricevendo segnalazioni sul campo di macchine con problemi e dopo un'indagine sembra che ci sia stata un'interruzione di corrente e ora c'è qualcosa che non va nel disco.

Avevo supposto che il problema sarebbe dovuto al fatto che il database veniva danneggiato o che i file con le modifiche recenti venivano confusi, ma ci sono altri rapporti strani.

  • file con autorizzazioni errate
  • file che sono diventati directory (ad esempio, index.phpora è una directory)
  • directory che sono diventate file
  • file con dati codificati

Ci sono problemi con il database che viene danneggiato, ma è qualcosa che mi posso aspettare. Ciò di cui sono più sorpreso sono i problemi di base del file system, ad esempio le autorizzazioni o la modifica di un file nella directory. I problemi si verificano anche in file che non sono stati modificati di recente (ad esempio, il codice software e la configurazione).

Questo è "normale" per la corruzione SSD? Inizialmente pensavamo che stesse succedendo su alcuni SSD economici, ma abbiamo avuto questo su un marchio di marca (di qualità consumer).

FWIW, non stiamo facendo autofsck all'avvio impuro (non so perché, sono nuovo). Abbiamo UPS installati in alcune località, ma a volte non è fatto correttamente, ecc. Questo dovrebbe essere risolto, ma anche in questo caso le persone possono spegnere il terminale in modo impuro, ecc., Quindi non è infallibile. Il filesystem è ext4.

La domanda: c'è qualcosa che possiamo fare per mitigare il problema a livello di sistema?

Ho trovato alcuni articoli che si riferiscono allo spegnimento della cache hardware o al montaggio dell'unità in modalità di sincronizzazione, ma non sono sicuro che ciò possa aiutare in questo caso (corruzione dei metadati e modifiche non recenti). Ho anche letto un riferimento sul montaggio del filesystem in modalità di sola lettura. Non possiamo farlo perché dobbiamo scrivere, ma potremmo creare una partizione di sola lettura per il codice e la configurazione, se ciò potesse aiutare.

Questo è un esempio di unità sudo hdparm -i /dev/sda1:

Model=KINGSTON RBU-SMS151S364GG, FwRev=S9FM02.5, SerialNo=<deleted>
Config={ Fixed }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=125045424
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes:  pio0 pio3 pio4
DMA modes:  mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=yes: disabled (255) WriteCache=enabled
Drive conforms to: Unspecified:  ATA/ATAPI-3,4,5,6,7

5
Puoi acquistare SSD migliori. I tipici SSD aziendali hanno condensatori integrati per fornire energia sufficiente al dispositivo per completare la scrittura dei dati in volo in caso di mancanza di corrente. I soldi che risparmi non dovendo recuperare da un filesystem totalmente confuso giustificheranno facilmente il costo aggiuntivo modesto.
Michael Hampton

1
Bene, nessuno ha detto che dovevi sostituirli tutti . Ma potresti usare i migliori SSD per sostituzioni e / o nuove installazioni.
Michael Hampton

2
"Non è semplice sostituirli tutti", lo è totalmente. Inizia dicendo al ragazzo che decide la decisione d'acquisto di cui è responsabile per i costi dovuti a grave negligenza e incompetenza Qualcuno ha fatto un errore abbastanza sostanziale non essendo competente al limite.
TomTom,

7
WriteCache=enabled. Questo è un grosso problema La cache di scrittura non dovrebbe mai essere abilitata sui dischi rigidi che dispongono di un database. Alcuni fornitori, ad esempio HP, in realtà impediscono di abilitare la memorizzazione nella cache del disco rigido proprio per questo motivo.
Greg Askew,

3
@Yehosef nota che disabilitare la memorizzazione nella cache di scrittura nel sistema operativo non risolverà il fatto che l'unità corrompe i dati in caso di interruzione dell'alimentazione. Per motivi di maggiore velocità e durata, gli SSD di fascia consumer potrebbero non scrivere i dati nella memoria non volatile quando si scrive su un file e, sfortunatamente, non esiste alcun meccanismo hardware che consenta all'unità di trasferire i dati dalla cache volatile all'archiviazione non volatile su mancanza di corrente, solo gli SSD aziendali possono farlo. Che ci crediate o no, mi trovavo in una situazione simile in cui qualcuno ha acquistato molti SSD di consumo, il nostro fornitore che ha citato questo hardware non aveva idea che sarebbe successo.
jrh

Risposte:


14

Quando si perde improvvisamente energia, gli SSD MLC / TLC / QLC hanno due modalità di guasto:

  • perdono le scritture in volo e solo in DRAM;
  • possono corrompere qualsiasi dato a riposo memorizzato nella pagina inferiore della cella NAND in fase di programmazione.

La prima condizione di errore è ovvia: senza protezione dell'alimentazione, tutti i dati che non si trovano su una memoria stabile (ovvero: NAND stessa) ma solo su cache volatile (DRAM) andranno persi. Lo stesso accade con i dischi meccanici classici (e questo da solo può provocare il caos nel filesystem che non emette correttamente fsync).

La seconda condizione di errore è una relazione MLC + SSD: durante la riprogrammazione del bit della pagina alta per l'archiviazione di nuovi dati, una perdita di potenza imprevista può distruggere / modificare anche il bit inferiore (ovvero: dati di commit precedenti ).

L'unica vera, e più ovvia, soluzione è quella di integrare una cache DRAM protetta dalla perdita di potenza (generalmente usando batteria / supercaps), come sempre fatto dai controller RAID di fascia alta; questo, tuttavia, aumenta il costo / prezzo dell'unità. Le unità consumer in genere non dispongono di cache protette dalla perdita di potenza; piuttosto, usano una serie di soluzioni più economiche come:

  • cache di scrittura parzialmente protetta (es .: Crucial M500 / M550 / M600 +);
  • Diario delle modifiche NAND (es .: unità Samsung, vedere l'attributo SMART PoR);
  • regioni NAND speciali SLC / pseudo-SLC per assorbire nuove scritture senza precedenti dati a rischio (es. Sandisk, Samsung, ecc.).

Torna alla tua domanda: le tue unità Kingstone sono ultra-economiche, usando un controller non specificato e praticamente nessuna specifica pubblica. Non mi sorprende che un'improvvisa perdita di potenza abbia danneggiato i dati precedenti. Sfortunatamente, anche la disabilitazione della cache DRAM del disco (con l'enorme perdita di prestazioni che comanda) non risolverà il problema, poiché i dati precedenti (ad esempio: dati a riposo) possono e saranno danneggiati da perdite di potenza inaspettate. Se si basano sul vecchio controller Sandforce, nelle circostanze "giuste" ci si può aspettare anche un mattone di unità totale.

Consiglio vivamente di rivedere il vostro UPS e, a medio termine, di sostituire queste unità obsolete.

Un'ultima nota su PostgreSQL e altri database Linux: non disabiliteranno la cache del disco e non dovrebbero essere previsti. Piuttosto, emettono fsyncs / FUA periodici / richiesti per eseguire il commit dei dati chiave in un archivio stabile. Questo è il modo in cui le cose dovrebbero essere fatte a meno che non esista una ragione molto convincente (ovvero: un impulso che risiede su ATA FLUSHES / FUAs).

EDIT: se possibile, considera la migrazione a un filesystem di checksum come ZFS o BTRFS. Per lo meno, considera XFS, che ha checksum journal e, ultimamente, checksum metadata. Se sei costretto a usare EXT4, considera di abilitare auto-fsck all'avvio (fsck.ext4 è molto bravo a riparare la corruzione).


Risposta eccellente. Si prega di consultare la mia domanda correlata serverfault.com/questions/924054/… - se si desidera copiare / adattare questa risposta lì, sarei felice di votarla / selezionarla. Sembra che disabilitare la cache di scrittura sarebbe utile solo per il primo caso. Hai maggiori dettagli sulla seconda modalità di errore? È collegato al riequilibrio / raccolta dei rifiuti o solo alla vicinanza?
Yehosef,

1
@Yehosef Dai un'occhiata qui, nella sezione "perdita di potenza": anandtech.com/show/8528/…
shodanshok

1
Il problema con qualsiasi soluzione software è che molti SSD mentono direttamente al sistema operativo sul fatto che i dati siano archiviati in modo sicuro o meno, anche in risposta ai comandi fsync / FUA. Per le unità aziendali che dispongono di memoria sufficiente per completare lo svuotamento della cache quando viene interrotta l'alimentazione, questo non è un problema.
BeowulfNode42

@ BeowulfNode42 Le barriere ATA e FUA devono essere onorate. Mentre nei giorni IDE / PATA alcune unità scaricano falsi, al giorno d'oggi qualsiasi unità "bugiarda" non è conforme SATA / SAS e dovrebbe immediatamente essere gettata via.
shodanshok,

e tuttavia quelle unità non conformi vengono comunque vendute, in particolare nel segmento di mercato dei consumatori.
BeowulfNode42,

11

Si. Non ottenere SSD super economico: qualsiasi cosa al di fuori del mercato consumer di fascia bassa ha condensatori e protezione completa contro la perdita di potenza. Amd non costa davvero molto di più.


Sono Kingston - quindi non so se quelli sono considerati economici o è un lotto difettoso. Il problema più grande è che le unità (~ 6k) sono già sul campo e la maggior parte non si guasta (forse solo perché non hanno perdite di potenza). Quindi la loro sostituzione è un'ultima risorsa costosa che non abbiamo ancora raggiunto.
Yehosef,

aggiunte informazioni sull'unità alla domanda.
Yehosef,

5
Sono super economici. Sono unità per utenti finali orientate al prezzo. Cerca unità di piccole imprese. LEGGI LE SPECIFICHE. Generalmente la protezione da mancanza di corrente è qualcosa che è nelle specifiche.
TomTom,

1
Da aggiungere a @TomTom - a volte in realtà non è chiamato protezione da mancanza di corrente - e a volte la protezione da mancanza di corrente non è davvero vera protezione da mancanza di corrente! Devi leggere alcune informazioni per ciascun produttore e scoprire come lo chiamano per il loro particolare marchio di SSD aziendali. (Guarda, per ogni prodotto Produttore, per white paper che hanno scritto su come veramente superiore i propri SSD enterprise sono). E, ho scoperto che, almeno per singoli acquisti, si fa il costo un po 'più. Ma non faccio acquisti in blocco e potrebbe essere diverso per quantità pari o superiori a 100, suppongo.
davidbak,

3
Da quello che ho letto finora, questi produttori hanno i nomi di questa funzione come: Kingston = "Pfail" come sulla serie DC400; Samsung = "Protezione contro le perdite di potenza"; Intel = "Protezione avanzata dei dati di perdita di potenza"; Sandisk = "Protezione della perdita di dati con protezione da mancanza di corrente". Non so come lo chiamano altri produttori, ma è necessaria una lettura approfondita delle schede tecniche. Nota che può essere raggiunto anche con il firmware se il produttore lo fornisce. Se ne hai veramente> 6000, contatterei Kingston e spiegherei la situazione e mi offrirei di pagare il firmware per unità.
BeowulfNode42

7

La prima cosa da fare è definire i tempi di recupero e gli obiettivi dei punti di ripristino. Per quanto tempo è necessario ripristinare uno di questi terminali e quale data point è accettabile? Forse entro un paio d'ore devi essere in grado di ripristinare il backup della scorsa settimana.

Se si perdono le scritture in volo, possono succedere cose strane ai file. La priorità del file system è mantenere la coerenza dei metadati, potrebbero non fornire le stesse garanzie per i tuoi dati. In altre parole, fscknon è garantito il recupero dei dati. Il suo compito è procurarti un file system che monterà.

Quindi potenza. Installa, configura e verifica che UPS spenga il sistema con grazia. Ciò consente alle cache del file system e alle unità stesse di scrivere.

E, la durata delle scritture sui dischi. Leggi il capitolo sull'affidabilità di PostgreSQL . Utilizzare lo diskchecker.plscript collegato lì per eseguire un crash test e determinare se gli SSD mentono se le scritture arrivano alla memoria non volatile. In caso di perdita, prendere in considerazione la sostituzione con SSD noti per la protezione della perdita di potenza.

Modifica: sono stati aggiunti dettagli per l'attivazione della cache di scrittura. È possibile tentare di disabilitare quello: hdparm -W0 /dev/sdao il comando appropriato per un array hardware. Riferimento: guida all'amministrazione della memoria RHEL .

Le barriere di scrittura del file system applicano un ordine di commit del journal. Non è una garanzia che i dati saranno intatti, ma è più sicuro per il file system con una cache volatile. Sebbene sia l'impostazione predefinita, l'aggiunta dell'opzione di montaggio "barriera" documenta chiaramente la tua coerenza rispetto alle prestazioni.

Finalmente l'ultima linea di difesa. Esegui un test di ripristino per assicurarti di poter ottenere l'applicazione e il database nel momento desiderato. Ciò è utile per tutti i tipi di perdita di dati, non solo per mancanza di corrente.


Questa cache di scrittura su disco è la risposta probabile. Per qualche ragione sconosciuta, sembra che Postgres non disabiliti la memorizzazione nella cache della scrittura su disco, che è una terribile impostazione predefinita.
Greg Askew,

1
Per chiarire: disponiamo di backup giornalieri e stiamo sincronizzando i dati sul cloud, quindi il problema è meno connesso alla perdita dei dati di Postgres (è un problema, ma penso che ci siano opzioni di configurazione PG che possono aiutare.). Il problema più preoccupante è che la macchina diventa inutilizzabile collegata alla stranezza dei metadati. FWIW, di solito la macchina si avvia e possiamo collegarci ad essa, ma l'applicazione fallisce perché i suoi file sono stati criptati.
Yehosef,

1
"sembra che Postgres non disabiliti la memorizzazione nella cache della scrittura su disco, che è una terribile impostazione predefinita." @GregAskew Dimostrare come disabilitare la cache DRAM su SSD coimsumer. Non può essere disabilitato.
TomTom,

4
A causa del modo in cui funziona SSD. Senza la cache di scrittura si esaurirebbe l'SSD molto più velocemente. Le celle SSD sono grandi e devono sempre essere completamente scritte, quindi la capacità di combinare più piccole scritture è cruciale per la vita dell'SSD. Questo è il motivo per cui NON PUOI disabilitarlo su unità consumer (le unità si trovano o non lo consentono) E non possono farlo su unità aziendali (le unità fondamentalmente possono mentire in quanto non volatili - hanno abbastanza riserve di energia per scrivere il dramma in flash.
TomTom,

3
No cache nella memoria non volatile effettiva. È fondamentale utilizzare solo archiviazione di qualità aziendale in cui l'unità o l'unità raid ha la cache interna supportata da batteria o condensatore. Postgres ha funzionalità (file WAL, ecc.) Per proteggerti dalla perdita di dati non ancora inviati all'unità, ma Postgres non può recuperare i dati persi all'interno dell'unità.
Basil Bourque,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.