Doctor, ¿cuanta vida le queda a mi disco?

Es una de las preguntas fundamentales,  y que se le presenta a cualquiera que tiene un servidor en producción durante mucho tiempo, y no sabes si sus discos ya están terminando su vida útil. Aunque tengas medidas para contrarrestar un fallo de disco, si los cambias a tiempo te puedes salvar de muchos sustos.

¿Cuanto tiempo le quedan los discos?. Pues se puede saber mediante una GRAN utilidad que se dispone en casi todas las plataformas, en mi caso, hablaré de Linux. Son las «SMART Monitoring Tools«.

Lo primero instalar, como no:

nas001@nas001:~$ sudo aptitude install smartmontools

Probamos que todo esta bien instalado, preguntándole por la información de un disco:

nas001@nas001:~$ sudo smartctl -i /dev/sdb
smartctl version 5.37 [x86_64-unknown-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.9 family
Device Model:     ST3500641AS
Serial Number:    3PM0ELSV
Firmware Version: 3.AAE
User Capacity:    500,107,862,016 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   7
ATA Standard is:  Exact ATA specification draft version not indicated
Local Time is:    Wed May 12 11:29:08 2010 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Como habéis comprobado, en ningún momento he tenido que desmontar el disco, ya que esto se puede usar mientras tu servidor sigue funcionando normalmente, y en teoría no afecta para nada al rendimiento del disco. Ahora realicemos un test rápido:

nas001@nas001:~$ sudo smartctl -H /dev/sdb
smartctl version 5.37 [x86_64-unknown-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

Mira la linea final: «PASSED«, nos indica que parece que el disco esta bien. Pero no nos da mucha mas información.

Para que nos muestre la información SMART que hay en el disco, solo hay que hacer lo siguiente:

nas001@nas001:~$ sudo smartctl -A /dev/sdb
smartctl version 5.37 [x86_64-unknown-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   107   083   006    Pre-fail  Always       -       174790252
  3 Spin_Up_Time            0x0003   097   097   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       81
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   084   060   030    Pre-fail  Always       -       299958621
  9 Power_On_Hours          0x0032   070   070   000    Old_age   Always       -       26403
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       93
187 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0
189 Unknown_Attribute       0x003a   100   100   000    Old_age   Always       -       0
190 Temperature_Celsius     0x0022   054   047   045    Old_age   Always       -       791543854
194 Temperature_Celsius     0x0022   046   053   000    Old_age   Always       -       46 (Lifetime Min/Max 0/19)
195 Hardware_ECC_Recovered  0x001a   053   048   000    Old_age   Always       -       56032012
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   001   000    Old_age   Always       -       4010
200 Multi_Zone_Error_Rate   0x0000   100   253   000    Old_age   Offline      -       0
202 TA_Increase_Count       0x0032   100   253   000    Old_age   Always       -       0

Aun así, si queremos hacer un test mucho mas profundo, tendremos que lanzarlo con el siguiente comando:

nas001@nas001:~$ sudo smartctl -t long /dev/sdh

¿Pero donde estan los resultados?, pues como lees al lanzarlo, te dice el tiempo que va a tardar (en mi caso ponía unos 225 minutos), y los resultados quedaran almacenados y consultables con el siguiente comando:

nas001@nas001:~$ sudo smartctl -a /dev/sda
smartctl version 5.37 [x86_64-unknown-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

# Mucha información que entenderemos... xD

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Self-test routine in progress 10%      5311         -

Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

Este comando nos muestra mucha información, pero al final vienen las lineas donde nos muestra como va nuestro test, en este caso sigue en progreso, al 10%.

Otra utilidad muy interesante es conocer los errores pasados de nuestro disco, con el comando:

nas001@nas001:~$ sudo smartctl -l error /dev/sda

Pero pensaréis: vaya coñazo, ¿esto no se puede hacer automático?. Pues claro, nos ha instalado un demonio que podremos activar para que nos envie correos con los fallos que vaya encontrando y lance los test automáticamente. Vamos a «/etc/default/smartmontools» y descomentamos la línea:

start_smartd=yes

Ahora en «/etc/smartd.conf», comentamos la línea activa y ponemos:

# Tantos como discos queremos monitorizar
# SATA (en caso de ser IDE quitar el parámetro "-d sat")
/dev/sda -d sat -S on -o on -a -I 194 -m informatica@miempresa.com
/dev/sdb -d sat -S on -o on -a -I 194 -m informatica@miempresa.com

Alehop. Ya tenemos un sistema de monitorización de discos.

Referencias:

Please follow and like us:

Como recuperar un Raid0 tras un fallo de disco en Ubuntu

Hoy me he enfrentado a este problema. Uno de nuestros servidores de respaldo (al menos no era un principal) ha muerto. Tras mirar que ocurría, sencillamente que el raid no existía, nos hemos dado cuenta de que un disco duro había pasado a mejor vida. Obviamente, al ser un Raid0 se pierde toda la información (por lo que hay que tener un respaldo, ya sea en otro equipo, o mediante otro raid), y en nuestro caso, este servidor era el respaldo de otro, por lo que simplemente hay que recuperarlo y volver a sincronizar con el principal.

Antes de nada, recordaros un gran blog que habla mucho sobre estos temas y muchos más, como es el blog de Iván López, que merece ser leído ya que ha hecho cosas muchos más complejas que esto, y del cual saco mucha información que vas a leer más adelante.

¿Como vimos el fallo?. La verdad que fue sencillo ya que tuvimos un apagón y el servidor no se recuperó bien, mediante el comando podemos ver el desastre:

more /proc/mdadm

Todos los discos que forman el raid se encuentran con una (S) a su lado (son discos spare) y falta uno. En nuestro caso, teniamos 7 discos, y solo salian 6.

sudo mount

Y nos encontramos que el raid no esta montado… bueno, toca buscar el disco duro roto. Un buen método es mirar el dmesg y ver cual da error, en nuestro caso no quedaba claro (la bios de la máquina marcaba el disco como conectado, pero luego linux no era capaz de mostrarlo), se fue desconectando uno a uno cada disco hasta que le encontramos. Se substituyo por uno de igual capacidad, ya que no es recomendable mezclar capacidades en Raid0.

Bien, pues substituimos el disco duro que esta averiado por el nuevo, pero este no está preparado para formar parte de un raid, por lo que lo conectamos y arrancamos la máquina (obviamente no montará el raid) y abrimos Gparted (en su defecto lo instalas). Le creas una nueva tabla de particiones, lo formateas a capacidad completa con el tipo de ficheros «sin formato». Aplicamos y luego nos vamos al menú de «Partición > marcas» (no recuerdo exactamente como se dice en castellano, en ingles es «flags», ya que mi servidor esta en inglés) y marcamos sólo «raid» de todas las opciones que nos aparecen. Aceptamos y el disco duro ya está preparado para ser parte de un raid.

Ahora tocaba eliminar todo rastro del antiguo raid, primero en los discos anteriores:

# Se tiene que parar o dará un error de que está en uso.
# Si se tienen dudas mirar en /proc/mdadm
sudo mdadm --stop /dev/md0
# Si incluyes el disco duro nuevo, este dará un error
#  no importará sigue adelante
sudo mdadm --zero-superbloc /dev/sd[a-g]1

Ya tenemos los discos impolutos y listos para volver a montar, pero antes hay que eliminar cualquier configuración de la existencia de raid en «/etc/mdadm/mdadm.conf» eliminando cualquier linea del tipo:

ARRAY /dev/md0 level=raid0 num-devices=7 UUID=1803e03e:db1868b2:d2508c3c:95c11b58

Aunque esto último no es obligatorio, ya que se va a reescribir unos pasos mas adelante, nos vendrá muy bien por si necesitamos un reinicio en la máquina, y así el sistema no tratará de montar de nuevo el raid con el fallo de disco.

Tras esto, ya podemos volver a crear nuestro raid:

sudo mdadm --create --auto=yes --verbose /dev/md0 --level=0 --raid-disks=7 /dev/sd[a-g]1

Ojo, que el parámetro auto del comando mdadm es muy interesante, ya que crea, si no existiera, el dispositivo md0, dentro del directorio «/dev«. Si has hecho un reinicio seguramente no tengas dicho dispositivo ya que se elimina si no esta en uso.

Bien, comprobamos que todo funciona, formateando la nueva partición:

sudo mkfs.ext3 -v /dev/md0

Con un simple:

sudo mount -a

remontamos el sistema de ficheros, y podemos acceder al raid. Perfecto.

Ahora queda el paso final, y es volver a crear el fichero /etc/mdadm/mdadm.conf:

cd /etc/mdadm
sudo cp mdadm.conf mdadm.conf.`date +%y%m%d`
sudo sh -c 'echo "DEVICE partitions" > ./mdadm.conf'
sudo sh -c 'mdadm --detail --scan >> ./mdadm.conf'

Testeamos que todo este bien:

more ./mdadm.conf
DEVICE partitions
ARRAY /dev/md0 level=raid0 num-devices=7 UUID=bed08171:06afc57d:9c8da9aa:858c4c7d

Y ahora solo queda sincronizar el contenido, en mi caso con un rsync que va a tardar al menos unas 6 horas en sincronizar mediante una gigalan directa entre servidores, pero puedes hacerlo como sea, como por ejemplo discos duros externos, y ya tu raid vuelve a funcionar tras el susto del fallo del disco.

Actualización: Aveces, si usamos en el fichero «/etc/mdadm/mdadm.conf» la linea «DEVICES partitions«, al reiniciar no funcionan correctamente los raid, y cuando se realiza un «mdadm –examine /dev/sdxx» nos encontramos que tienen un diferente UUID que no cuadra ni con el fichero «mdadm.conf«.

Para evitar esto, la única solución que he logrado, gracias a esta entrada de la web de Ubuntu-es, encontrar es eliminar la entrada de los «DEVICES» y poner en el fichero «mdadm.conf«:

# Obviamente pon los devices que use tu raid
ARRAY /dev/md0 level=raid0 num-devices=3 metadata=00.90 UUID=e1fbf1e6:da616113:e368bf24:bd0fce41 devices=/dev/sda2,/dev/sdb1,/dev/sdc1

Al añadir al final los «devices» los monta correctamente, y sin hacer cosas raras. Según leo, no es muy recomendable (no se porqué) pero hace que al menos en mis maquinas no falle.

Please follow and like us: