sábado, 9 de junio de 2012

Reparar discos con sectores defectuosos en Linux


Se trata del error hardware más frecuente en cualquier tipo de servidor/ordenador o dispositivo dedicado de almacenamiento:
Fallos de disco duro con errores de escritura
Lo aconsejable en estos casos sería hacer un backup del disco que presenta problemas y sustituirlo. Con la frecuencia que estos errores se presentan, provocadas por factores de entorno (humedad, temperatura, vibraciones, fallos electricos o mecánicos, … ) o por fin de vida útil, la prevención es la herramienta más eficaz de forma que:
Se disponga de un sistema que controle dichas variables de entorno (Utilizar herramientas de monitorización basadas en SMART) y El sistema tenga tolerancia a fallos de disco ( por ejemplo RAID1,5) de forma que cuando presenta un fallo, el disco es aislado y solicita a su administrador que lo sustituya, previniendo las pérdidas de datos y su acceso , ya sea por recostrucción automática en disco auxiliar (spare) y/o recreación de la información (algoritmos de paridad).
No siempre se administran sistemas con un diseño previsor a estos tipos de errores, pueden ser por deficiencias provocadas por los presupuestos de la empresa ( el disco duro históricamente era un soporte de almacenamiento bastante caro) o por algo muy “typical spanish”:
El aprendizaje a base de palos porque no hay previsión.
Por ejemplo, errores hardware en el almacenamiento que provoca caida de algunos de los servicios básicos de una empresa, incluso con pérdidas  datos valiosos e irrecuperables.  Esto generará entonces un replanteamiento de la seguridad en el almacenamiento. Una auditoría y una inversión acorde con el valor y cantidad de datos eliminaría este riesgo, no olvidemos que se suele cumplir la máxima de:
Se tiene lo que se paga. Aún así, sean técnicos o responsables de sistemas de una empresa, convertidos en unos Mc Gyver, tratan de cubrir muchas deficiencias de las instalaciones informáticas, al recaer en ellos la responsabilidad de mantener unas instalaciones inseguras y con bajo presupuesto … Me refiero a esos Googleadores natos, con el destornillador siempre a mano, que tienen disponibilidad absoluta cuando el jefe lo llama a las 12 de la noche porque no puede conectarse a la VPN de la empresa desde su casa.
La migración de entornos a Linux es una opción muy típica para estas instalaciones, debido a la compatibilidad con el hardware, facilidad de control y supervisión y por lo tanto seguridad, con paquetes completos para estas labores de administración sin ningún coste (para los más arerriesgados), o disponer de un soporte de todo el software de una distribución Enterprise a bajo precio.
En la actualidad, debido al aumento de capacidad y la bajada de precios del disco duro, hasta un usuario particular puede permitirse pagarse el hardware para un sistema raid tolerante a fallos de disco en el PC de su casa, …, tema pendiente para otro post.
Volviendo al tema que tocamos ahora, que hacer cuando hay que reparar unos sectores defectuosos, por ejemplo de un disco sin garantía o contrato de soporte o simplemente testear cuales son esos sectores para valorar el riesgo. Se pueden usar herramientas específicas para esta causa, que tienen los fabricantes de discos y que están basado en la tecnología SMART. Poniendo un ejemplo, en la creación de un raid 5 para uso doméstico, me encontré que la herramienta de software  para raid mdadm se negaba a integrar en el nuevo volumen uno de los discos de tera y medio comprados específicamente para esta función. La finalización del paso de creación del raid  (mdadm –create) terminaba con un sistema degradado. Después de varias búsquedas por internet, por sintomatología determino que es error de escritura para un sector de la LBA específico, por lo que me dispongo abrir un caso a Soporte de Seagate. Soporte me solicitó usar una herramienta propia para diagnóstico y reparación de sectores defectuosos, pero el consejero Google me llevó por otros derroteros, e intenté repararlo con herramientas propias de la distribución. Por equivalencia, como estas herramientas de diagnóstico se basan en SMART instalé smartmontools, paquete de aplicaciones que incluye Debian y demás distros en linux para diagnóstico de discos con SMART implementado.   Lo que a continuación expondré son unos pasos prácticos para en primer momento diagnóstico, y si es posible reparación.
Para diagnosticar y reparar, en el campo que sea lo primero es formarse y el conocimiento no aparece de forma espontánea, viene después de mucho trabajo y experiencia, aunque una cultura de base acelera el proceso de aprendizaje de forma exponencial. Dejo varios links para este propósito:
Básico
Procedente de la Wikipedia: Una magnífica introducción al disco duro, componentes físicos, divisiones físicas y lógicas, formas de direccionamientos, tecnologías usadas,  … , Un trabajo inmejorable de síntesis en un artículo y en castellano!
Procedente de Wikipedia: Definición de tecnología SMART,  parámetros que controla para diagnóstico de error y en castellano.
Procedente de Monografías: Aunque es información básica, en ocasiones obsoleta y orientado a entornos de Microsoft. Se definen conceptos básicos como tiempos de acceso o buffer de disco interesantes.
Procedente de Wikipedia: Definición, historia, especificaciones,… sobre discos SATA (Serial-ATA).
Google: El oráculo de Delfos, hasta ahora …  responde preguntas y sobre todo crea nuevas para seguirte respondiendo.
Herramientas referidas en este post
smartmontools – Paquete que contiene dos utilidades smartctl y smartd, para controlar y monitorizar sistemas de almacenamiento que usan SMART.
sg3-tools – Paquete para enviar comandos scsi a dispositivos scsi.
Seatools for DOS: Herramienta de Seagate para diagnóstico y reparación de discos.
Procedimiento de diagnóstico de sectores defectuosos
En este ejemplo se tratará de un entorno GNU/Linux, distribución Debian, al usar sus repositorios se usará la utilidad de paquetes nativas (apt-get) de la distribución, de forma análoga se usará yum en las variantes de Red Hat, Yast en Novell/Suse, …
En un sistema Debian, podremos tirar de repositorio para instalar el paquete smartmontools:
Comprobar que está en repositorio:
nas-ferras:~# apt-cache search smartmontools
smart-notifier – graphical hard disk health status notifier
smartmontools – control and monitor storage systems using S.M.A.R.T.
Instalar paquete smartmontools:
nas-ferras:~# apt-get install smartmontools
Leyendo lista de paquetes… Hecho
Creando árbol de dependencias
Leyendo la información de estado… Hecho
Se instalarán los siguientes paquetes NUEVOS:
smartmontools
0 actualizados, 1 se instalarán, 0 para eliminar y 1 no actualizados.
Se necesita descargar 0B/332kB de archivos.
Se utilizarán 848kB de espacio de disco adicional después de esta operación.
Seleccionando el paquete smartmontools previamente no seleccionado.
(Leyendo la base de datos …
91982 ficheros y directorios instalados actualmente.)
Desempaquetando smartmontools (de …/smartmontools_5.38-2+lenny1_amd64.deb) …
Procesando disparadores para man-db …
Configurando smartmontools (5.38-2+lenny1) …
Not starting S.M.A.R.T. daemon smartd, disabled via /etc/default/smartmontools (warning).
Comprobar la versión instalada:
nas-ferras:~# dpkg -l smartmontools
Desired=Unknown/Install/Remove/Purge/Hold
| Estado=No/Instalado/Config-files/Desempaquetado/Fallo-config/Medio-inst/espera-disparo/pendiente-disparo
|/ Err?=(ninguno)/Retenido/Requiere-reinst/X=ambos problemas (Estado,Err: mayúsc.=malo)
||/ Nombre                            Versión                          Descripción
+++-=================================-=================================-==================================================================================
ii  smartmontools                     5.38-2+lenny1                     control and monitor storage systems using S.M.A.R.T.
DIAGNÓSTICO
Ejecución de test sobre disco sospechoso:
Se puede usar la versión short o long:
nas-ferras:~# smartctl -t long /dev/sda
smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: “Execute SMART Extended self-test routine immediately in off-line mode”.
Drive command “Execute SMART Extended self-test routine immediately in off-line mode” successful.
Testing has begun.
Please wait 255 minutes for test to complete.
Test will complete after Wed Oct 14 01:13:52 2009
Use smartctl -X to abort test.
Una revisión del log mostrará los resultados de los diferentes tests ejecutados sobre el disco de la siguiente forma:
nas-ferras:~# smartctl -l selftest /dev/sda
smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       90%        99         2597324513
# 2  Extended offline    Completed: read failure       90%        62         2597324513
# 3  Short offline       Completed: read failure       90%        61         2597324513
# 4  Short offline       Completed: read failure       90%        61         2597324513
# 5  Short offline       Completed: read failure       90%        61         2597324513
# 6  Short offline       Completed: read failure       90%        60         2597324513
# 7  Extended offline    Completed: read failure       90%        60         2597324513
# 8  Extended offline    Completed: read failure       90%        58         2597324513
# 9  Extended offline    Completed: read failure       90%        58         2597324513
#10  Extended offline    Completed: read failure       90%        58         2597324513
Que apunta en todos sus test ejecutados a fallos de lectura en el sector 2597324513.
Ya tenemos diagnóstico,  un sector está defectuoso, siendo el causante de que mdadm no lo quiera integrar como elemento en el raid5, etiquetándolo como disco en fallo.
REPARACIÓN
La reparación será una reasignación del sector en fallo, para un disco SCSI/Fibra sería posible realizarlo con las herramientas del paquete sg3-utils siguiendo los siguientes pasos: Instalación #apt-get install sg3-utils, confirmación del sector defectuoso #sg_verify –lba=2597324513 /dev/sda y reasignar el sector en el firmware del disco con # sg_reassign –grown /dev/sda #sg_reassign –address=2597324513 /dev/sda. Más detallado se encuentra éste procedimiento basado en un caso práctico en éste link.
Para nuestro caso, se trata de un disco SATA, en principio no podemos disfrutar de las sg3-utils para los tipo SCSI, pero una pregunta a Google responde que este paquete en versiones actuales ya tiene soporte para este tipo de discos y trataremos de probar suerte.
nas-ferras:~# sg_verify –lba=2597324513 /dev/sda
verify (10):  Descriptor format, current;  Sense key: Medium Error
Additional sense: Unrecovered read error – auto reallocate failed
Descriptor type: Information
0x0000ffff9ad006e1
medium or hardware error, reported lba=0xffff9ad006e1
nas-ferras:~# sg_reassign –address=2597324513 /dev/sda
REASSIGN BLOCKS not supported
nas-ferras:~# sg_verify –lba=2597324513 /dev/sda
verify (10):  Descriptor format, current;  Sense key: Medium Error
Additional sense: Unrecovered read error – auto reallocate failed
Descriptor type: Information
0x0000ffff9ad006e1
medium or hardware error, reported lba=0xffff9ad006e1
En un principio no responde nada parecido a dispositivo no soportado por la herramienta y la información que proporciona es coherente, pareciendo que interactúa con dispositivos SATA. Pero partiendo  de que se trata de una herramienta que a bajo nivel trabaja con dd, tampoco parece raro que detecte errores de lectura para cualquier dispositivo ya que no tendría porque usar los driver sg ( SCSI generic) para dispositivos SCSI y fibra en esta comprobación.
Nos quitará las dudas cuando forzaremos la reasignación del sector(reallocate):
nas-ferras:~# sg_reassign –grown /dev/sda
READ DEFECT DATA (10) not supported
nas-ferras:~# sg_reassign –address=2597324513 /dev/sda
REASSIGN BLOCKS not supported
En un principio parece que esta tools no está preparada para la reasignación de sectores en dispositivos  SATA, o el firmware del disco no es compatible con las sg3-tools. De todas formas no encuentro referencias a que interactúe con dispositivos SATA en ninguna parte del man de sg3-tools o sg_reassign.
Persistiendo en la forma de realizar una reasignación del sector defectuoso desde linux, se formatea el disco en ext3 y se sigue la guía Bad block HOWTO for smartmontoolspara el caso de una partición extended:
Se formatea en ext3
nas-ferras:~#mkfs.ext3 /dev/sda2
Se recogen los atributos de la partición /dev/sda:
nas-ferras:~# smartctl -A /dev/sda
smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 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   103   097   006    Pre-fail  Always       -       88063229
3 Spin_Up_Time            0×0003   100   100   000    Pre-fail  Always       -       0
4 Start_Stop_Count        0×0032   100   100   020    Old_age   Always       -       45
5 Reallocated_Sector_Ct   0×0033   100   100   036    Pre-fail  Always       -       2
7 Seek_Error_Rate         0x000f   100   253   030    Pre-fail  Always       -       675601
9 Power_On_Hours          0×0032   100   100   000    Old_age   Always       -       103
10 Spin_Retry_Count        0×0013   100   100   097    Pre-fail  Always       -       0
12 Power_Cycle_Count       0×0032   100   100   020    Old_age   Always       -       45
184 Unknown_Attribute       0×0032   100   100   099    Old_age   Always       -       0
187 Reported_Uncorrect      0×0032   060   060   000    Old_age   Always       -       40
188 Unknown_Attribute       0×0032   100   093   000    Old_age   Always       -       59
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0×0022   061   055   045    Old_age   Always       -       39 (Lifetime Min/Max 25/40)
194 Temperature_Celsius     0×0022   039   045   000    Old_age   Always       -       39 (0 21 0 0)
195 Hardware_ECC_Recovered  0x001a   039   030   000    Old_age   Always       -       88063229
197 Current_Pending_Sector  0×0012   100   100   000    Old_age   Always       -       1
198 Offline_Uncorrectable   0×0010   100   100   000    Old_age   Offline      -       1
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
240 Head_Flying_Hours       0×0000   100   253   000    Old_age   Offline      -       59180354371687
241 Unknown_Attribute       0×0000   100   253   000    Old_age   Offline      -       3587000442
242 Unknown_Attribute       0×0000   100   253   000    Old_age   Offline      -       3852047273
Se busca comienzo de la partición sda2:
nas-ferras:~# fdisk -lu /dev/sda
Disco /dev/sda: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders, 2930277168 sectores en total
Units = sectores of 1 * 512 = 512 bytes
Disk identifier: 0x0009ec06
Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1   *          63    29302559    14651248+  83  Linux
/dev/sda2        29302560 2930272064  1450484752+  83  Linux
Como sda2 empieza en el sector 293302560 y el sector en error es 2597324513, para obtener la posición del sector en error relativo a la partición sda2 hay que hacer la resta 2597324513 – 293302560 = 2304021953.
Para saber el tamaño de bloque usado por el sistema de ficheros en sda2 :
nas-ferras:~# tune2fs -l /dev/sda2 | grep Block
Block count:              362621188
Block size:               4096
Blocks per group:         32768
Para finalizar las cuentas nos queda por saber que bloque del sistema de ficheros contiene esta LBA. Que sigue la siguiente ecuación
b = (int)((L-S)*512/B) Donde: b = Número de bloque en el sistema de ficheros B = Tamaño de bloque en bytes del sistema de fichero L = LBA del sector defectuoso S = Sector de comienzo de la partición que muestra la herramienta fdisk -lu y (int) que denota la parte entera. En nuestro ejemplo quedaría así: b=((int)(2597324513 - 293302560)*512/4096)= (int) 288002744,125=288002744 Comprobamos que el bloque no está en uso:
nas-ferras:~# debugfs
debugfs 1.41.3 (12-Oct-2008)
debugfs:  open /dev/sda2
debugfs:  testb 288002744
Block 288002744 not in use
Y por último realizar un dd para forzar un reallocate del sector defectuoso como se describe en la guía:
nas-ferras:~# dd if=/dev/zero of=/dev/sda2 bs=4096 count=1 seek=288002744
1+0 records in
1+0 records out
4096 bytes (4,1 kB) copied, 0,000607736 s, 6,7 MB/s
Ejecuto test dos veces:
nas-ferras:~# smartctl -t short /dev/sda
smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: “Execute SMART Short self-test routine immediately in off-line mode”.
Drive command “Execute SMART Short self-test routine immediately in off-line mode” successful.
Testing has begun.
Please wait 1 minutes for test to complete.
Test will complete after Wed Oct 14 01:14:43 2009
Sorpresa !! No se ha producido una nueva reasignación de sectores, se puede comprobar mirando del atributo Reallocated_Sector_Ct en la salida del comando smartctl -A /dev/sda:
nas-ferras:~# smartctl -A /dev/sda
smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 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   103   097   006    Pre-fail  Always       -       89275771

No hay comentarios:

Publicar un comentario

Los comentarios serán supervisados antes de su publicacion

Related Posts Plugin for WordPress, Blogger...

Entradas populares

LinuxSur.org Img

LinuxSur.org Img