¿Por qué debe inicializarse un dispositivo raid 10?

9

Al crear un dispositivo raid de software de Linux como un dispositivo raid10, estoy confundido por qué debe inicializarse. La misma pregunta se aplica para raid1 o raid0, realmente.

En última instancia, la mayoría de las personas pondrían un sistema de archivos de algún tipo encima, y ​​ese sistema de archivos no debería asumir ningún estado de los datos del disco. Cada escritura afectará a ambos discos en una configuración raid10 o raid1, donde se escriben los N espejos. No debería haber ninguna razón para que una incursión10 se inicialice inicialmente, ya que sucederá con el tiempo.

Puedo entender por qué para una configuración de raid5 / 6 donde hay un requisito de paridad, pero incluso entonces parece que esto podría hacerse perezosamente.

¿Es solo para que la gente se sienta mejor al respecto?

Michael Graff
fuente
1
Buena pregunta. Es posible omitir la sincronización cuando se está creando el RAID, y he encontrado recomendaciones para hacerlo en caso de que uno o más dispositivos subyacentes sean SSD. No sé si existen escenarios en los que se necesita la sincronización para un funcionamiento correcto.
kasperd

Respuestas:

2

La sincronización inicial es necesaria porque las diferencias entre los espejos aparecerían como errores durante la verificación periódica.

Y deberías estar haciendo controles periódicos.

Simon Richter
fuente
1
Puedo ver por qué las comprobaciones periódicas de legibilidad de datos pueden ser útiles. Pero, ¿de qué sirve una verificación periódica para que las réplicas sean idénticas? Tales comprobaciones pueden ser útiles si las realiza un sistema de archivos que suma datos de suma. Pero en la capa RAID sin conocimiento del sistema de archivos, no puede saber cuál de las dos réplicas diferentes es buena, no puede saber cómo ocurrió la discrepancia en primer lugar, y no puede saber qué archivo (si alguno) se ve afectado. Por lo tanto, parece que las alertas sobre inconsistencias en esta capa son en su mayoría inútiles, ya que no hay nada que el administrador pueda hacer con las alertas de todos modos.
kasperd
Como necesita leer los datos de todos modos, el costo de compararlos es mínimo, pero puede mostrarle que uno de los discos ha desarrollado un problema no detectado (por ejemplo, RAM defectuosa en el propio caché de la unidad). El administrador luego dividiría la matriz, miraría manualmente las diferencias y elegiría qué unidad reemplazar.
Simon Richter
Debería ampliar eso en su respuesta entonces.
kasperd
Sé que han pasado muchos años, pero esta es la única razón válida que puedo ver. No creo que importe lo contrario si los datos no están sincronizados, ya que, por definición, aún no se han escrito esos datos, por lo que el sistema de archivos aplicado a la unidad raid nunca leerá de esos bloques. Sin embargo, asegurarse de que las verificaciones periódicas pasen desde el principio hace que sea necesario. ¡Gracias!
Michael Graff
7

La incursión 1, al ser un espejo, depende de que todos los discos en un espejo sean copias exactas el uno del otro. Tome su disco duro aleatorio y otro disco duro aleatorio, y posiblemente tenga datos diferentes allí, lo que viola esta presunción. Por eso es necesaria la inicialización. Simplemente copia el contenido de la primera unidad a otros. Tenga en cuenta que en algunas condiciones puede salirse con la suya sin inicializar las unidades; por lo general, los dispositivos nuevos de fábrica ya tienen ceros por todas partes, por lo que simplemente puede ignorar esto. La mdadmopción --assume-cleanhace esto, pero te advierte:

   --assume-clean

Dígale a mdadm que la matriz existió previamente y se sabe que está limpia. Puede ser útil al intentar recuperarse de una falla importante, ya que puede estar seguro de que no se verán afectados los datos a menos que realmente escriba en la matriz. También se puede usar al crear un RAID1 o RAID10 si desea evitar la resincronización inicial, sin embargo, esta práctica, aunque normalmente es segura, no se recomienda. Use esto solo si realmente sabe lo que está haciendo.

Si no lo hace, hay una discrepancia entre las unidades y se lee, no se sabe qué leerá la unidad. Debería estar bastante seguro con un sistema de archivos (pero tenga en cuenta a continuación), porque lo más probable es que escriba antes de leer cualquier cosa de ese dispositivo, y luego estará claro.

Tenga en cuenta que al menos Linux's mdadminicializará la matriz en segundo plano. Puede crear felizmente FS encima del primer segundo. El rendimiento va a sufrir hasta que finalice la inicialización, pero eso es todo.

Pero:

a) Al hacer mkfsalgunas utilidades, verifique si ya hay algo en esa unidad. Si bien esto solo toca algunas regiones conocidas de la unidad, se lee antes de escribir algo, lo que lo pone en peligro.

b) Si realiza una resincronización periódica de su matriz, el dispositivo RAID no sabe nada de su FS. Simplemente lee cada bloque de cada dispositivo y los compara. Y si no está utilizando un FS de copia en escritura (por ejemplo, ZFS o BTRFS) y nunca llena su FS, es perfectamente posible que un bloque permanezca sin inicializar desde la perspectiva del FS durante años.

¿Por qué resincronizar con dispositivos RAID1?

Por el mismo motivo, vuelve a sincronizar con dispositivos RAID5 o cualquier otro nivel (excepto RAID0). Lee todos los datos y compara / verifica las sumas de verificación RAID (en RAID 5 o 6). Si se volcó un poco de alguna manera (porque la memoria HD se volteó espontáneamente, porque los teléfonos celulares de usted y sus 5 vecinos interfirieron accidentalmente sobre esta región particular de la bandeja, lo que sea) detectará inconsistencia, pero no podrá ayudarte. Si, OTOH, uno de los discos duros simplemente informa "No puedo leer ese bloque", lo que es más probable con un disco defectuoso, simplemente ha detectado un fallo temprano y ha reducido el tiempo de funcionamiento en modo degradado (contando desde el fallo de la unidad, no desde el momento en que lo notas). Raid no te ayudará si falla una unidad y un mes después la otra falla si no lo haces '

RAID10

Ahora, para RAID10 se cumple todo lo anterior. Después de todo, RAID10 es solo una forma inteligente de decir 'Estoy poniendo mis dos dispositivos RAID1 en un par RAID0'.

Consideración:

Todo esto es comportamiento indefinido. Por qué he comprobado en Linux, usando mdadm, otras implementaciones de software RAID pueden comportarse de manera diferente. Otras versiones del kernel y / o mdadmherramientas de Linux que estoy usando también pueden comportarse de manera diferente.

Torinthiel
fuente
1
Por favor proporcione una cita para If you don't do it, there is a discrepancy between the drives and it's read, the RAID device will report failure of a drive. Creo que esa afirmación es incorrecta. Al menos proporcione un ejemplo del mensaje de error de modo que sea posible consultar la fuente para verificar bajo qué circunstancias se produce.
kasperd
1
Eso es mejor. ¿Verificó la declaración sobre escribir ceros? Creo que no escribe ceros, sino que copia uno de los discos a los otros.
kasperd
1
While this only touches a few well-known regions of drive, it reads before you write anything, thus putting you in danger.¿En peligro de qué? Me doy cuenta de que la lectura puede resultar en cualquier cosa, pero ¿por qué eso resultaría en algún tipo de peligro para el usuario si (a) la información que se lee no se usa en ninguna parte y (b) está por suceder una escritura?
Vegard
1
@kasperd tienes razón, copia el primer dispositivo al segundo. La prueba en un urandomdispositivo inicializado, con linux mdadm muestra que los primeros 80k siguen siendo diferentes, así como los últimos 48k. Esto último probablemente debido al redondeo del tamaño RAID al tamaño del bloque. No he probado con diferentes tamaños de dispositivo, pero el 80 + 48 es exactamente la diferencia de tamaño entre el dispositivo RAID y el dispositivo de bloque subyacente.
Torinthiel
1
Una cosa a tener en cuenta es que, por lo general, durante la inicialización, el sistema RAID SIEMPRE leerá el disco A y lo copiará en el disco B. ¿Por qué? Como puede usar el disco mientras se está inicializando, puede haber escrito datos en el bloque 100,000. Una vez que la incursión init llega a ese bloque, tanto A como B ya son idénticos, por lo que no sucede nada. Si, en cambio, estuviera poniendo a cero los bloques, eliminaría los buenos datos. Por lo tanto, una vez más, veo dos razones para garantizar que los bloques sean idénticos: "siempre se ha hecho" y "para que pueda ejecutar una verificación más tarde". También cuestiono la utilidad de esa verificación. Leer es bueno, ¿comparar? no estoy seguro.
Michael Graff
5

Recuerde que RAID 1 es un espejo, y que RAID 10 es una franja de espejos.

La pregunta es, ¿en qué disco de cada espejo son válidos los datos? En una matriz recién creada, esto no se puede conocer, ya que los discos pueden tener datos diferentes.

Recuerde también que RAID opera a un nivel muy bajo; no sabe nada de sistemas de archivos ni de los datos que puedan almacenarse en el disco. Puede que ni siquiera haya un sistema de archivos en uso.

Por lo tanto, la inicialización en estos arreglos consiste en que los datos de un disco en cada espejo se copian tal cual al otro disco.

Esto también significa que la matriz es segura de usar desde el momento de la creación, y se puede inicializar en segundo plano; la mayoría de los controladores RAID (y mdraid de Linux) tienen una opción para esto, o lo hacen automáticamente.

Michael Hampton
fuente
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Michael Hampton
1

En pocas palabras, ya que no se espera que dos discos nuevos sean copias perfectas en espejo desde el principio.

Deben convertirse en copias perfectas el uno del otro.

Además, la inicialización incluye la configuración del superbloque de metadatos con información sobre la configuración de la matriz también.

El archivo / proc / mdstat debería indicarle que el dispositivo se ha iniciado, que se está reconstruyendo el espejo y un ETA de la finalización de la reconstrucción. La reconstrucción se realiza utilizando el ancho de banda de E / S inactivo. Por lo tanto, su sistema aún debería responder, aunque los LED de su disco también mostrarán mucha actividad.

El proceso de reconstrucción es transparente, por lo que puede usar el dispositivo aunque el espejo esté actualmente en reconstrucción.

HBruijn
fuente
2
Pero, ¿por qué necesitan ser copias perfectas el uno del otro? ¿Qué podría romperse si los dos son inconsistentes en sectores que nunca fueron utilizados por el sistema de archivos?
kasperd
@kasperd RAID se implementa a un nivel inferior que cualquier sistema de archivos. Entonces la pregunta es, ¿cuál es el "sistema de archivos" al que se refiere?
Taemyr
@Taemyr No me estoy refiriendo a ningún sistema de archivos específico. Elija el que prefiera y explique qué se rompería al usarlo en un RAID-1 donde las réplicas no estaban sincronizadas antes de inicializar el sistema de archivos.
kasperd
@kasperd No hay un sistema de archivos que se rompa en el nivel en que opera RAID.
Taemyr
1
En mi caso, como el póster original, no me importa qué sistema de archivos. No conozco ningún sistema de archivos que lea sectores en los que nunca se haya escrito, por lo que no importa el estado indeterminado de esos sectores no escritos.
Michael Graff