¿Cómo verificar los RAID 'mdadm' mientras se ejecuta?

41

Estoy empezando a obtener una colección de computadoras en casa y para admitirlas tengo mi "servidor" de Linux que ejecuta una matriz RAID.

Actualmente mdadm RAID-1, iré RAID-5una vez que tenga más unidades (y luego RAID-6espero). Sin embargo, he escuchado varias historias sobre datos que se corrompen en una unidad y nunca se da cuenta debido a que se está utilizando la otra unidad, hasta el punto en que falla la primera unidad, y encuentra que su segunda unidad también está atornillada (y 3ro, 4to , 5ta unidad).

Obviamente, las copias de seguridad son importantes y yo también me encargaré de eso, sin embargo, sé que anteriormente he visto secuencias de comandos que afirman ayudar contra este problema y le permiten verificar su RAID mientras se está ejecutando. Sin embargo, al buscar estos guiones nuevamente, ahora me resulta difícil encontrar algo que se parezca a lo que ejecuté antes y siento que estoy desactualizado y no entiendo lo que haya cambiado.

¿Cómo verificaría un RAID en ejecución para asegurarse de que todos los discos todavía se están formando normalmente?

Superviso SMART en todas las unidades y también me he mdadmconfigurado para enviarme un correo electrónico en caso de falla, pero me gustaría saber que mis unidades ocasionalmente también se "comprueban".

djsmiley2k - Vaca
fuente
Parece que ya está en el camino correcto, solo necesita configurar un cron para enviarle los resultados de smartctl para sus unidades.
laebshade

Respuestas:

56

El punto de RAID con redundancia es que seguirá funcionando todo el tiempo que pueda, pero obviamente detectará errores que lo ponen en un modo degradado, como un disco defectuoso. Puede mostrar el estado actual de una matriz con mdadm -D:

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7

Además, el estado de retorno de mdadm -Des distinto de cero si hay algún problema, como un componente fallido (1 indica un error que compensa el modo RAID y 2 indica un fallo completo).

También puede obtener un resumen rápido de todo el estado del dispositivo RAID mirando /proc/mdstat. También puede obtener información sobre un dispositivo RAID /sys/class/block/md*/md/*; ver Documentation/md.txten la documentación del kernel. Algunas /sysentradas también se pueden escribir; por ejemplo, puede activar una verificación completa de md0con echo check >/sys/class/block/md0/md/sync_action.

Además de estas comprobaciones puntuales, mdadm puede notificarle tan pronto como ocurra algo malo. Asegúrese de que usted tiene MAILADDR rooten /etc/mdadm.conf(algunas distribuciones (por ejemplo Debian) lo configuran automáticamente). Luego, recibirá una notificación por correo electrónico tan pronto como se produzca un error (una matriz degradada) .

Asegúrese de recibir el correo enviado a la raíz en la máquina local (algunas distribuciones modernas omiten esto, porque consideran que todo el correo electrónico pasa por proveedores externos, pero recibir el correo local es necesario para cualquier administrador serio del sistema). Prueba de esto mediante el envío de un correo electrónico de la raíz: echo hello | mail -s test root@localhost. Por lo general, una configuración de correo electrónico adecuada requiere dos cosas:

  • Ejecute un MTA en su máquina local. El MTA debe estar configurado al menos para permitir la entrega de correo local. Todas las distribuciones vienen con MTA adecuados, elija cualquier cosa (pero no correo nulo si desea que el correo electrónico se entregue localmente).
  • Redirige el correo que va a las cuentas del sistema (al menos root) a una dirección que lees regularmente. Puede ser su cuenta en la máquina local o una dirección de correo electrónico externa. Con la mayoría de los MTA, la dirección se puede configurar en /etc/aliases; deberías tener una línea como

    root: djsmiley2k
    

    para entrega local, o

    root: [email protected]
    

    Para entrega remota. Si elige la entrega remota, asegúrese de que su MTA esté configurado para eso. Dependiendo de su MTA, es posible que deba ejecutar el newaliasescomando después de editarlo /etc/aliases.

Gilles 'SO- deja de ser malvado'
fuente
¿Puedes explicar por qué no se debe usar nullmailer? ¿Es por las razones mencionadas en unix.stackexchange.com/questions/1449/… ? ¿Qué MTA recomendarías?
Cameron Martin
@CameronMartin Nullmailer solo reenvía el correo a una máquina remota, no realiza la entrega local. Puede usarlo si tiene un servidor SMTP en algún lugar que acepte el correo de su máquina, pero no si está entregando el correo localmente. He editado mi respuesta para aclarar.
Gilles 'SO- deja de ser malvado'
19

Puede forzar una verificación de toda la matriz mientras está en línea. Por ejemplo, para verificar la matriz /dev/md0, ejecute como root:

echo check > /sys/block/md0/md/sync_action

También tengo un trabajo cron que ejecuta el siguiente comando una vez al mes:

tar c /dir/of/raid/filesystem > /dev/null

No es una verificación exhaustiva de la unidad en sí, pero obliga al sistema a verificar periódicamente que (casi) todos los archivos se puedan leer con éxito del disco. Sí, algunos archivos se leerán de la memoria caché en lugar del disco. Pero me imagino que si el archivo está en la memoria caché, se ha leído con éxito recientemente en el disco, o está a punto de escribirse en el disco, y cualquiera de esas operaciones también descubrirá errores en la unidad. De todos modos, ejecutar este trabajo prueba el criterio más importante de una matriz RAID (“¿Puedo leer mis datos con éxito?”) Y en los tres años que llevo ejecutando mi matriz, la única vez que tuve un disco defectuoso, fue Este comando que lo descubrió.

Una pequeña advertencia es que si su sistema de archivos es grande, entonces este comando tomará mucho tiempo; mi sistema tarda aproximadamente 6 horas / TiB. Lo ejecuto ionicepara que el resto del sistema no se detenga durante la comprobación de la unidad:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null
stharward
fuente
Tenga en cuenta que ionicesolo funcionará si utiliza el programador de E / S CFQ (predeterminado).
Totor
Por lo tanto, esto puede ser obvio para la mayoría, pero no lo es para mí: ¿cómo funciona la ejecución de un script cuya salida se redirige a devnull en realidad le notifica algo? ¿Es el caso que si "tar" encuentra algún error, estos se propagarán hasta el demonio mdadm que (presumiblemente) le enviará un correo electrónico?
ljwobker
Mi pregunta para usted es: ¿cómo detecta los errores de tar si se ejecuta desde un trabajo cron? ¿De dónde sale eso? Pensé que agregarías una redirección para stderr a un archivo que podría monitorearse periódicamente o que la cola se imprima en la consola al abrir una ventana de terminal :)
Madivad
1
@ljwobker Perdón por revivir un hilo viejo. Creo que la intención del comando tar aquí es intentar leer todo el contenido del volumen. Esto verificaría que todo el volumen aún es legible y le daría a md la oportunidad de detectar un disco defectuoso.
mikepj
1
Si proviene de un cronjob, cron normalmente enviará toda su salida directamente a mailto = location, si está configurado, de lo contrario a root. Sin embargo ... Me pregunto si dd sería mejor que el alquitrán, para una sobrecarga más baja.
djsmiley2k - CoW
11

el paquete 'mdadm' de Debian y Ubuntu contiene el archivo

/etc/cron.d/mdadm

que a su vez el primer domingo de cada mes ejecutará el comando

/usr/share/mdadm/checkarray --cron --all --idle --quiet

eso verificará la coherencia de todas sus matrices (a menos que establezca AUTOCHECK en falso en / etc / default / mdadm ). Se enviará un informe al usuario 'root' (asegúrese de recibir dichos correos electrónicos).

am70
fuente
8

Utilizo esta función simple para verificar /proc/mdstat:

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }
jasonwryan
fuente
¡ordenado! me gusta el estilo :) .. esto es exactamente lo que estaba buscando poner en MOTD :) gracias!
jirislav