¿Hay alguna manera de proteger SSD de la corrupción debido a la pérdida de energía?

15

Tenemos un grupo de terminales de consumo que tienen instalado Linux, un servidor web local y PostgreSQL. Estamos recibiendo informes de campo de máquinas con problemas y tras una investigación parece que hubo un corte de energía y ahora hay algo mal con el disco.

Asumí que el problema sería que la base de datos se corrompe o que los archivos con cambios recientes se revuelven, pero hay otros informes extraños.

  • archivos con los permisos incorrectos
  • archivos que se han convertido en directorios (por ejemplo, index.phpahora es un directorio)
  • directorios que se han convertido en archivos
  • archivos con datos codificados

Hay problemas con la base de datos que se corrompe, pero eso es algo que podría esperar. Lo que me sorprende más son los problemas más básicos del sistema de archivos, por ejemplo, permisos o cambiar un archivo a un directorio. Los problemas también están ocurriendo en archivos que no cambiaron recientemente (por ejemplo, el código y la configuración del software).

¿Es esto "normal" para la corrupción de SSD? Originalmente pensamos que estaba sucediendo en algunos SSD baratos, pero tenemos esto sucediendo en una marca (grado de consumo).

FWIW, no estamos haciendo autofsck en arranque sucio (no sé por qué, soy nuevo). Tenemos UPS instalados en algunos lugares, pero a veces no se hace correctamente, etc. Esto debería repararse, pero incluso entonces las personas pueden apagar el terminal de forma sucia, etc., por lo que no es infalible. El sistema de archivos es ext4.

La pregunta: ¿hay algo que podamos hacer para mitigar el problema a nivel de sistema?

Encontré algunos artículos que se refieren a apagar el caché de hardware o montar la unidad en modo de sincronización, pero no estoy seguro de si eso ayudaría en este caso (corrupción de metadatos y cambios no recientes). También leí una referencia sobre el montaje del sistema de archivos en modo de solo lectura. No podemos hacer eso porque necesitamos escribir, pero podríamos hacer una partición de solo lectura para el código y la configuración si eso fuera de ayuda.

Este es un ejemplo de una unidad 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
Yehosef
fuente
55
Puedes comprar mejores SSD. Los SSD empresariales típicos han incorporado condensadores para proporcionar suficiente energía al dispositivo para terminar de escribir datos en vuelo en caso de una falla de energía. El dinero que ahorra al no tener que recuperarse de un sistema de archivos totalmente codificado justificará fácilmente el modesto costo adicional.
Michael Hampton
1
Bueno, nadie dijo que tenías que reemplazarlos a todos . Pero podría usar los mejores SSD para reemplazos y / o nuevas instalaciones.
Michael Hampton
2
"No es simple reemplazarlos a todos", lo es totalmente. Comience diciéndole al tipo que toma la decisión de compra que es responsable por el costo debido a la negligencia grave y la incompetencia. Alguien cometió un error bastante sustancial al no ser competente al límite.
TomTom
77
WriteCache=enabled. Este es un gran problema. La caché de escritura nunca debe habilitarse en discos duros que tengan una base de datos. Algunos proveedores, HP, por ejemplo, en realidad evitan habilitar el almacenamiento en caché de escritura en el disco duro por esta misma razón.
Greg Askew
3
@Yehosef tenga en cuenta que deshabilitar el almacenamiento en caché de escritura en el sistema operativo no solucionará el hecho de que su unidad corrompe los datos en la pérdida de energía. En aras de una mayor velocidad y durabilidad, los SSD de grado de consumidor pueden no escribir datos en la memoria no volátil cuando escribe en un archivo, y desafortunadamente no hay un mecanismo de hardware para que la unidad lleve los datos de la caché volátil al almacenamiento no volátil en falla de energía, solo los SSD empresariales pueden hacer eso. Lo creas o no, estaba en una situación similar en la que alguien compró muchos SSD de consumo, nuestro proveedor que citó este hardware no tenía idea de que esto sucedería.
jrh

Respuestas:

14

Cuando de repente pierde energía, los SSD MLC / TLC / QLC tienen dos modos de falla:

  • pierden las escrituras en vuelo y solo en DRAM;
  • pueden corromper cualquier dato en reposo almacenado en la página inferior de la celda NAND que se está programando.

La primera condición de falla es obvia: sin protección de energía, se perderán todos los datos que no se encuentren en un almacenamiento estable (es decir: NAND), sino solo en caché volátil (DRAM). Lo mismo sucede con los discos mecánicos clásicos (y eso solo puede causar estragos en el sistema de archivos que no emite fsyncs correctamente).

La segunda condición de falla es un asunto de MLC + SSD: cuando se reprograma el bit de página alta para almacenar nuevos datos, una pérdida inesperada de energía puede destruir / alterar el bit inferior (es decir: datos comprometidos anteriores ) también.

La única solución verdadera y más obvia es integrar un caché DRAM protegido con pérdida de energía (generalmente usando baterías / supercaps), como lo han hecho desde siempre los controladores RAID de alta gama; esto, sin embargo, aumenta el costo / precio de la unidad. Las unidades de consumo generalmente no tienen cachés protegidas contra pérdida de energía; más bien, usan una variedad de soluciones más económicas como:

  • caché de escritura parcialmente protegida (es decir: Crucial M500 / M550 / M600 +);
  • NAND cambia el diario (es decir: unidades Samsung, consulte el atributo SMART PoR);
  • regiones especiales SLC / pseudo-SLC NAND para absorber nuevas escrituras sin datos previos en riesgo (es decir: Sandisk, Samsung, etc.).

Volviendo a su pregunta: sus unidades Kingstone son ultra económicas, con un controlador no especificado y básicamente sin especificaciones públicas. No me sorprende que una pérdida repentina de energía corrompiera los datos anteriores. Desafortunadamente, incluso deshabilitar la memoria caché DRAM del disco (con la pérdida de rendimiento masiva que ordena) no resolverá su problema, ya que los datos anteriores (es decir, datos en reposo) pueden, y serán, corrompidos por pérdidas de energía no detectadas. Si se basan en el antiguo controlador Sandforce, se puede esperar incluso un bloque de unidad total en las circunstancias "correctas".

Le sugiero que revise su UPS y, a medio plazo, reemplace estas unidades antiguas.

Una última nota sobre PostgreSQL y otras bases de datos de Linux: no deshabilitarán la memoria caché del disco y no deben detectarse para hacerlo. Por el contrario, emiten fsyncs / FUA periódicos / necesarios para confirmar los datos clave en un almacenamiento estable. Esta es la forma en que se deben hacer las cosas a menos que exista una razón muy convincente (es decir, una unidad que miente sobre ATA FLUSHES / FUA).

EDITAR: si es posible, considere migrar a un sistema de archivos de suma de verificación como ZFS o BTRFS. Por lo menos, considere XFS, que tiene suma de comprobación de diario y, últimamente, incluso suma de comprobación de metadatos. Si se ve obligado a usar EXT4, considere habilitar el auto-fsck al inicio (fsck.ext4 es muy bueno para reparar la corrupción).

shodanshok
fuente
Excelente respuesta Consulte mi pregunta relacionada serverfault.com/questions/924054/… . Si desea copiar / adaptar esta respuesta, me complacería votarla / seleccionarla. Parece que deshabilitar el caché de escritura ayudaría solo para el primer caso. ¿Tiene más detalles sobre el segundo modo de falla? ¿Está conectado al reequilibrio / recolección de basura o simplemente a la proximidad?
Yehosef
1
@Yehosef Eche un vistazo aquí, en la sección "pérdida de energía": anandtech.com/show/8528/…
shodanshok
1
El problema con cualquier solución de software es que muchos SSDs mienten directamente al sistema operativo sobre si los datos se almacenan o no de manera segura, incluso en respuesta a los comandos fsync / FUA. Para las unidades empresariales que tienen suficiente almacenamiento de energía para completar el vaciado de su caché cuando se corta la energía, esto no es un problema.
BeowulfNode42
@ BeowulfNode42 Se deben respetar las barreras ATA y FUA . Mientras que en los días IDE / PATA algunos discos falsificados, hoy en día cualquier disco "mentiroso" no es compatible con SATA / SAS, y debe desecharse de inmediato.
shodanshok
y, sin embargo, esas unidades no conformes se venden de todos modos, particularmente en el segmento del mercado de consumo.
BeowulfNode42
11

Si. No obtenga SSD súper barato: cualquier cosa fuera del mercado de consumo de gama baja tiene condensadores y protección total contra la pérdida de energía. Amd realmente no cuesta mucho más.

TomTom
fuente
Son Kingston, así que no sé si se consideran baratos o si es un lote defectuoso. El mayor problema es que las unidades (~ 6k) ya están en el campo y la mayoría no están fallando (quizás solo porque no han tenido pérdida de potencia). Por lo tanto, reemplazarlos es un último recurso costoso que aún no hemos alcanzado.
Yehosef
Se agregó información de la unidad a la pregunta.
Yehosef
55
Son super baratos. Son unidades de usuario final orientadas a los precios. Busque unidades de pequeñas empresas. LEA LAS ESPECIFICACIONES. En general, la protección de falla de energía es algo que está en la especificación.
TomTom
1
Para agregar a @TomTom, a veces en realidad no se llama protección contra fallas de energía, y a veces la protección contra fallas de energía no es realmente una verdadera protección contra fallas de energía. Debe leer un poco para cada fabricante y descubrir cómo lo llaman para su marca particular de SSD empresariales. (Mira, para cada Referencia del fabricante, para los papeles blancos que han escrito sobre cómo realmente superior a sus propias SSD empresariales son.) Y, he encontrado que, al menos para las compras individuales, se hace costar un poco más. Pero no hago compras a granel y supongo que podría ser diferente para cantidades de 100 o más.
davidbak
3
Por lo que he leído hasta ahora, estos fabricantes tienen los nombres de esta característica como: Kingston = "Pfail" como en la serie DC400; Samsung = "Protección contra pérdida de energía"; Intel = "Protección de datos de pérdida de potencia mejorada"; Sandisk = "Protección contra pérdida de datos con protección contra fallas de energía". No sé cómo lo llaman otros fabricantes, pero se requiere una lectura en profundidad de las hojas de especificaciones. Tenga en cuenta que también se puede lograr con el firmware si el fabricante lo proporciona. Si realmente tiene> 6000 de ellos, me pondría en contacto con Kingston y le explicaría la situación y le ofrecería pagar el firmware por unidad.
BeowulfNode42
7

Lo primero que debe hacer es definir el tiempo de recuperación y los objetivos del punto de recuperación. ¿Cuánto tiempo tiene que recuperar uno de estos terminales y qué punto de datos en el tiempo es aceptable? Quizás dentro de un par de horas necesite ser capaz de recuperarse a la copia de seguridad de la semana pasada.

Pueden ocurrir todo tipo de cosas extrañas a los archivos si se pierden las escrituras en vuelo. La prioridad del sistema de archivos es mantener su propia coherencia de metadatos; es posible que no proporcionen las mismas garantías para sus datos. En otras palabras, fsckno se garantiza la recuperación de sus datos. Su trabajo es conseguirle un sistema de archivos que se monte.

Entonces, poder. Instale, configure y pruebe que UPS apagará el sistema con gracia. Esto permite que los cachés del sistema de archivos y las unidades mismas escriban.

Y, la durabilidad de las escrituras en los discos. Lea el capítulo de confiabilidad de PostgreSQL . Use el diskchecker.plscript vinculado allí para hacer una prueba de bloqueo y determinar si las SSD mienten si las escrituras llegaron al almacenamiento no volátil. Si hay pérdida, considere reemplazarla con SSD que tengan protección contra pérdida de energía.

Editar: agregó detalles de que la caché de escritura estaba habilitada. Puede intentar deshabilitar eso: hdparm -W0 /dev/sdao el comando apropiado para una matriz de hardware. Referencia: guía de administración de almacenamiento RHEL .

Las barreras de escritura del sistema de archivos imponen un orden de confirmaciones de diario. No es una garantía de que los datos estarán intactos, pero es más seguro para el sistema de archivos con un caché volátil. Aunque es el valor predeterminado, agregar la opción de montaje "barrera" claramente documenta que usted valora la consistencia sobre el rendimiento.

Finalmente, la última línea de defensa. Realice una prueba de restauración para asegurarse de que puede llevar su aplicación y base de datos al momento deseado. Esto es útil para todo tipo de pérdida de datos, no solo fallas de energía.

John Mahowald
fuente
Esta caché de escritura en disco es la respuesta probable. Por alguna razón desconocida, parece que Postgres no deshabilita el almacenamiento en caché de escritura en disco, que es una configuración predeterminada terrible.
Greg Askew
1
Para aclarar, tenemos copias de seguridad diarias y estamos sincronizando los datos con la nube, por lo que el problema está menos relacionado con la pérdida de datos de Postgres (es una preocupación, pero creo que hay opciones de configuración de PG que pueden ayudar). El problema más preocupante es que la máquina se vuelve inutilizable conectada a la rareza de los metadatos. FWIW, generalmente la máquina arranca y podemos conectarnos a ella, pero la aplicación falla porque sus archivos han sido codificados.
Yehosef
1
"parece que Postgres no deshabilita el almacenamiento en caché de escritura en disco, que es una configuración predeterminada terrible". @GregAskew Por favor, demuestre cómo deshabilitar la memoria caché DRAM en SSD coimsumer. No se puede deshabilitar.
TomTom
44
Por la forma en que funcionan los SSD. Sin caché de escritura, quemaría el SSD mucho más rápido. Las celdas SSD son grandes y siempre deben estar completamente escritas, por lo que la capacidad de combinar múltiples escrituras pequeñas es crucial para la vida útil de las SSD. Es por eso que NO PUEDE deshabilitarlo en las unidades de consumo (las unidades mienten o no lo permiten) Y NO puede hacerlo en las unidades empresariales (las unidades básicamente pueden mentir ya que no son volátiles: tienen suficientes reservas de energía para escribir el dram a parpadear.
TomTom
3
@Yehosef No, ni siquiera confiable Postgres tiene el poder de la magia para recuperar si envía datos a la unidad, la unidad dice "Bien, obtuvo sus datos", y luego la unidad nunca llegó a escribir esos datos de su volátil temporal interno caché para el almacenamiento no volátil real. Es crucial utilizar solo almacenamiento de calidad empresarial en el que la unidad de disco o banda tiene su caché interna respaldada por batería o condensador. Postgres tiene características (archivo WAL, etc.) para protegerlo de la pérdida de datos aún no enviados a la unidad, pero Postgres no puede recuperar los datos perdidos dentro de la unidad.
Basil Bourque