5 votos

Robustez del software RAID de Linux para RAID1 frente a otros niveles RAID

Tengo un array RAID5 funcionando y ahora también un raid1 que monté ayer. Dado que RAID5 calcula la paridad, debería ser capaz de detectar la corrupción silenciosa de datos en un disco. Sin embargo, para RAID1 los discos son sólo espejos. Cuanto más lo pienso, me doy cuenta de que el RAID1 es bastante arriesgado. Seguro que me salvará de un fallo de disco, pero puede que no sea tan bueno a la hora de proteger los datos en el disco (que en realidad es más importante para mí).

  1. ¿Cómo almacena realmente el software RAID de Linux los datos de tipo RAID1 en el disco?
  2. ¿Cómo se sabe qué husillo está dando datos corruptos (si el disco(subsistema) no está reportando ningún error)

Si el RAID 1 realmente no me da protección de datos sino de disco, ¿hay algún truco que pueda hacer con mdadm para crear una configuración de dos discos "tipo RAID5"? Por ejemplo, ¿perder capacidad pero mantener la redundancia también para los datos?

6voto

Steven Monday Puntos 1025

Como raid5 calcula la paridad, debería ser capaz de detectar la corrupción silenciosa de datos en un disco.

No. Uno podría borrar totalmente un sector con datos aleatorios, y un RAID5 no se inmutaría. El RAID 1 tiene el mismo problema.

En general, el RAID no proporciona una comprobación de la integridad de los datos en tiempo real. Lo que sí proporciona es tolerancia a los fallos frente a una unidad (o más, con algunos niveles de RAID). Son dos cosas muy diferentes.

Si buscas algo que detecte la corrupción de archivos, necesitas soporte para el sistema de archivos. RAID no lo hace. Al menos, no por sí mismo.

Para responder a sus preguntas concretas:

RAID1 se implementa simplemente como dos (o más) espejos idénticos. Cuando las réplicas no coinciden en el contenido de un sector, se ha producido una corrupción. La cuestión es que el sistema RAID no suele ser consciente de esto, ya que normalmente no lee todas las réplicas cuando se le pide que recupere un sector determinado. Por eficiencia, es probable que sólo programe un disco para leerlo (con suerte, el que tiene las cabezas más cercanas).

Supongamos que, durante una operación de "scrubbing", cuando se pide explícitamente al sistema RAID que verifique la consistencia de todos sus datos, se descubre una inconsistencia. La cuestión de cómo resolver esta inconsistencia no tiene una respuesta sencilla. Tened en cuenta que este problema afecta tanto a RAID 5 como a RAID 1, y también a otros niveles de RAID.

En un RAID1, una incoherencia aparece como dos sectores espejo que contienen datos diferentes. ¿Cómo decide el sistema RAID qué sector representa los datos correctos? Bueno, eso es un detalle de implementación, y honestamente no sé cómo está implementado exactamente el sistema Linux. Pero el problema es fundamental: los sectores reflejados son diferentes, y puede que no haya ninguna indicación de por qué han llegado a ser así. Así que lo mejor que puede hacer el sistema RAID es lanzar una moneda: elegir uno al azar para que sea el dato "correcto".

En un RAID 5 de 3 discos, aparece una incoherencia en forma de un triple de sectores cuyo sector de paridad es incorrecto. La pregunta es: ¿cuál de los 3 sectores es incorrecto? De nuevo, no hay una respuesta obvia. Cualquiera de los tres podría estar corrupto, y probablemente no hay forma de saberlo. Si tienes que elegir un sector para recalcular entre los otros 2, tienes 1 posibilidad entre 3 de elegir el que estaba realmente corrupto. Esto demuestra que el RAID1 es en realidad más "seguro" que el RAID5, en este sentido. El RAID1 tiene un 50% de posibilidades de elegir el sector equivocado, mientras que el RAID5 tiene un 67% de posibilidades de elegir mal.

Para resumir: El RAID no está diseñado para detectar los errores de disco en el momento en que se producen. RAID proporciona tolerancia a los fallos frente a los fallos de todo el disco. Nada más.

6voto

Joel in Gö Puntos 3195

RAID5 no detectará la corrupción silenciosa de datos en el disco; se necesita un sistema de archivos como ZFS o BTRFS, con suma de comprobación a nivel de bloque, para protegerse contra eso. El RAID 5 tampoco funcionará tan bien como el RAID 1 debido a sus cálculos de paridad. Con cualquier tipo de RAID de paridad, deberíais tener cuidado con el Agujero de escritura RAID5 que introduce la posibilidad de que los datos se corrompan, por ejemplo, en caso de apagón.

El software RAID1 de Linux tiene la interesante ventaja de que puedes crear tantas réplicas como quieras: si el tiempo de actividad es tu prioridad número uno, puedes configurar un RAID1 de 8 discos que mantenga 7 copias redundantes.

El potencial de corrupción de datos usando RAID1 está a la par con el uso de un solo disco (sin RAID).

Si realmente te preocupa la corrupción de los datos, deberías utilizar un sistema de archivos con suma de comprobación o comparar regularmente tus datos inalterados con varias copias de seguridad. Una popular historia de éxito de ZFS cuenta la historia de una persona cuyo ordenador estaba corrompiendo silenciosamente sus datos, y ni siquiera lo sabía hasta que empezó a usar ZFS. Después de un poco de resolución de problemas, descubrió que la causa era una fuente de alimentación defectuosa.

También hay que tener en cuenta que el disco duro no es el único lugar en el que se pueden corromper los datos. Si no utilizas una memoria RAM ECC (y una placa base de nivel empresarial que no sólo sea compatible, sino que permita ECC), por ejemplo, un rayo cósmico podría voltear un bit en la memoria. Dependiendo del tipo de datos de los que hablemos, puede que ni siquiera importe. Si se trata de un archivo de vídeo o música, el cambio de bits pasará desapercibido cuando se reproduzca el archivo.

Cuando se llega al fondo del asunto, la corrupción silenciosa de los datos es una cuestión de probabilidades. La probabilidad de que tus datos se corrompan no es muy alta; de lo contrario, todos estaríamos maldiciendo constantemente que nuestros datos se corrompan una vez más. (Todo el mundo probablemente guardaría varias copias de seguridad e incluso copias en papel de todo, porque no confiaría en que el ordenador guardara una sola copia buena). La probabilidad de que te des cuenta de la corrupción de los datos es aún menor. La mayoría de las personas desconocen por completo el concepto de corrupción silenciosa de datos, y se las arreglan sin problemas. También vale la pena señalar que incluso muchos sistemas de almacenamiento en disco de nivel empresarial no protegen contra la corrupción silenciosa de datos a nivel del sistema de archivos. Pero si no eres una persona que apueste por el juego, puede que quieras invertir algo de dinero en hardware de nivel empresarial (RAM ECC, controladores de disco con batería y todo eso), y cambiar a usar ZFS o BTRFS.

4voto

Pons Puntos 1010

Centrándonos en las preguntas reales...

Incluso el RAID 5 no podrá corregir la putrefacción silenciosa de los bits, pero puede detectarla durante un escrutinio de datos. Aunque sí podrá corregir un solo bloque que haya sido reportado por el disco como un Error de Lectura Irrecuperable (URE). Tenga en cuenta que no todos los discos de una franja RAID5 se leen para una lectura de datos normal, por lo que si el error existe en la franja en el disco no utilizado, no se detectará hasta que realice un lavado de datos. La detección silenciosa de pérdida de bits con cualquier RAID estándar sólo puede ocurrir durante el lavado de datos. El RAID 5 no puede hacer ni siquiera esto durante la reconstrucción de un disco que ha fallado, esto es lo que más preocupa hoy en día con el RAID 5.

  1. El RAID 1 de Linux mdadm, como casi todas las implementaciones de RAID 1, es simplemente duplicar/espejar los mismos datos en varios discos. No añade ningún dato de corrección o detección de errores. Si sacas un disco de cualquier RAID 1 y lo usas en otro PC, es muy probable que funcione como un disco individual normal. Linux mdadm añade alguna descripción del array al principio del disco para saber qué particiones pertenecen a qué array, así que mdadm sabrá que era un RAID 1 pero puede montar y usar el disco único de todas formas.
  2. Todos los controladores RAID 1, ya sean de software o de hardware, se basan en que los discos duros utilizan sus propios métodos de detección y corrección de errores. Véase este artículo de wikipeadia para obtener información sobre cómo los discos duros hacen esto, en particular el uso de Codificación de corrección de errores (ECC) .

Esta es la razón por la que la mayoría de las roturas de bits serán reportadas como un Error de Lectura No Corregible (URE) por los sistemas de disco a mdadm. Sin embargo, todavía hay riesgos para sus datos que no resultarán en ningún error reportado por el disco, tales como

  • si hubo un error de posicionamiento del cabezal durante una escritura, por lo que algún sector cercano aleatorio se sobrescribe con datos y datos ECC correctos para ese bloque. La lectura del bloque que se escribió realmente informará que leyó el bloque bien, aunque no lo sea.
  • el servidor perdió la energía antes de haber escrito sus datos en todos los discos de la matriz, entonces algunos bloques de esa franja estarán en desacuerdo con los demás.

y otros tipos de errores como los descritos en la página ServerFault ¿Es un problema real la putrefacción de los discos duros? ¿Qué se puede hacer al respecto?

Las matrices RAID 6 y RAID 1 con al menos 3 discos son los únicos niveles RAID estándar que tienen el potencial de poder detectar y corregir algunas formas de putrefacción silenciosa de bits que no son reportadas por los discos individuales como errores, aunque No sé si mdadm implementa el código necesario para esto . Utilizando un corrección de errores hacia adelante sistema de votación de estilo.

  • Para el RAID 6: sólo si el error está en uno de los bloques de paridad. Esto se debe a la posibilidad de una votación a tres bandas entre los datos, la paridad 1 y la paridad 2. Si los bloques de paridad 1 o 2 dicen que hay un error pero los otros 2 no, entonces el bloque de paridad puede ser esencialmente expulsado. La razón por la que no puede corregir el problema si el error está en uno de los bloques de datos es que no puede saber qué bloque de datos tiene el error, a menos que sea un 3 discos raid 6, que normalmente no están permitidos . Dudo que cualquier implementación, incluyendo mdadm, se moleste con un esquema de corrección tan oscuro y simplemente lo reporte como un error.
  • Para el RAID 1 con 3 o más discos activos supuestamente ya sincronizados puede realizar una votación por mayoría simple. Aunque, de nuevo, no sé si alguna implementación de RAID se molesta con esta lógica ya que no mucha gente usa un raid 1 de más de 3 discos. Si implementara la lógica requerida un RAID 1 que
    • normalmente tenía 3 discos, un bloque con putrefacción de bits silenciosa podía ser autocorregido, aunque no si era durante una reconstrucción ya que eso reduciría el número de discos activos sincronizados a 2.
    • un raid 1 de 4 discos podría autocorregir cualquier franja con un solo bloque defectuoso incluso durante la reconstrucción de un disco fallido.
    • un disco 5 puede autocorregir una franja con 2 bloques silenciosamente malos, aunque se reduce a 1 si se encuentra durante una reconstrucción de 1 o 2 discos que fallan simultáneamente.

Para que sepas, me he dado cuenta de que los dispositivos Synology DS1813+ utilizan mdadm tanto para las particiones de datos como para las del sistema y que utiliza RAID 1 en los 8 discos para las particiones del sistema.

Como habrás observado, esto confía mucho en que el disco sea capaz de reportar datos malos como un error. Mientras todo el mundo dice que hay que usar ZFS para resolver este problema. Creo que las principales mejoras en la integridad de los datos de ZFS son que proporciona un lavado de datos más frecuente debido a que comprueba los espejos/paridad con cada lectura, y la paridad independiente a nivel de bloque (lo que significa que muchos bloques silenciosamente corruptos ya no son silenciosos y se corrigen si es posible) y que puede implementar la lógica anterior para la corrupción silenciosa de datos.

Para probar si un sistema en particular puede detectar y/o corregir la corrupción silenciosa de datos, utilice el comando dd de Linux para escribir datos aleatorios en una de las particiones del array, y luego pruebe si los datos siguen siendo buenos en el array. Advertencia: no haga esta prueba en un sistema con datos que quiera conservar, ya que su sistema puede fallar la prueba. Para los niveles estándar de RAID necesitarás realizar un lavado de datos entre la corrupción y la lectura de prueba.

3voto

MTilsted Puntos 227

Ni raid1 ni raid5 te protegerán de la corrupción de bits silenciosa si la corrupción la hace el disco duro.

Piensa en ello: Tanto con raid1 como con raid5 es fácil detectar que los datos se han corrompido, pero no hay forma de determinar qué disco recibió los datos buenos y cuál los malos.

Pero recuerda: La corrupción silenciosa de bits en un disco duro ocurre MUY RARAMENTE (el disco duro tiene su propia suma de comprobación interna en todos los bloques), y el raid no elimina la necesidad de hacer copias de seguridad.

Si necesita sobrevivir a la corrupción silenciosa del disco, utilice algo como raid6, o un sistema de archivos que compruebe la suma de todos sus archivos.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: