"DISK FAILURE IS IMMINENT!"
Este es el mensaje que me apareció recientemente mientras me encontraba trabajando tranquilamente en mi computadora. El mensaje apareció no una, sino en repetidas ocasiones en ventanas emergentes que poco ayudaban a controlar el pánico. Además de llenarnos de terror, este mensaje es un buen recordatorio de porqué debemos tener un buen sistema de respaldo. En mi caso, utilizo un conjunto de 4 discos de 1TB configurados en RAID 5. Esto me permite tener un nivel aceptable de redundancia, donde mis datos quedan intactos siempre y cuando solo falle un disco a la vez.
Después de cerrar todas las ventanas y desactivar futuras amenazas de muerte de datos, me puse a investigar el supuesto daño.
$ sudo smartctl --health /dev/sdb
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.0.0-19-generic] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
Failed Attributes:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 023 023 036 Pre-fail Always FAILING_NOW 3168
Basado en mi experiencia, puedo decir que en este punto al disco le queda un lapso de vida de un día hasta 3 meses. Si, así de poco confiable es SMART, y así de impredecibles son los discos duros. Podría jugármela y esperar a que ese "Pre-fail" se convierta en muerte total, pero decidí mejor comprar un disco nuevo y quitarme este pendiente de una vez.
La conveniencia de tener un sistema RAID 5 también trae consigo algunas complicaciones, y fue con este nuevo disco que encontré una de ellas. Poco sabía que dentro del mundo de los discos duros existe un nuevo concepto llamado
Advanced Formatting. En realidad el concepto solo es nuevo para mi, ya existía desde hace muchos años, pero fue hasta el 2011 cuando los fabricantes comenzaron a mudar la mayoría de sus discos a este formato. Básicamente, se trata de que antes se usaban discos duros con sectores de 512 bytes, y ahora se usan de 4096 para mayor eficiencia. Si te interesa conocer a detalle como funciona y las ventajas que
Advanced Formatting otorga,
este pdf de Hitachi es ampliamente recomendable.
Como era de esperarse, los discos que ya tenía, aunque los compré en el 2011, son de sectores 512 bytes. Por lo tanto, cuando intenté agregar el disco a mi arreglo usando Ubuntu Disk Utility, me tocó lidiar con mensajes como este:
WARNING: The partition is misaligned by 1024 bytes. This may result in very poor performance. Repartitioning is suggested.
¿Mal desempeño? ¡A nadie le gusta eso! Comprobé que efectivamente mi disco era uno de los nuevos:
$ cat /sys/block/sdd/queue/physical_block_size
4096
$ cat /sys/block/sdd/queue/logical_block_size
512
Al hacer la misma prueba con mis otros discos, el tamaño fue 512 en los dos casos. Esto empezó a preocuparme. Una alternativa era devolver este disco a Amazon y buscar alguna reliquia que funcionara con el tamaño antiguo, pero la realidad es que iba a tener que actualizarme eventualmente. ¿Sería posible agregar un disco con sectores de diferente tamaño a un volumen RAID existente?
La respuesta es que si, es posible, y la verdad es que esto poco tiene que ver con el problema de la partición mal alineada. El asunto aquí es que el Disk Utility esta intentando crear una partición basándose en los discos existentes, que tienen sectores de diferente tamaño. La solución es simplemente crear la partición manualmente utilizando gparted. Dado que RAID utiliza bloques mucho mas grandes (en mi caso de 64KB), lo único que importa es que el tamaño del bloque sea un múltiplo del tamaño de los sectores.
$ sudo gparted
Esta aplicación nos permite crear una nueva partición en el disco, y además alinearla por megabyte, no por cilindro como lo esta haciendo Disk Utility. Simplemente le ponemos que inicie en 1MB y termine en el máximo espacio disponible. Después nos vamos a "Manage Flags" y habilitamos la bandera de RAID. Con esto queda preparada nuestra partición para agregarla al arreglo utilizando mdadm:
$ sudo mdadm --add /dev/md0 /dev/sdd
$ sudo mdadm --detail /dev/md0
$ cat /proc/mdstat
md0 : active raid5 sdd[3](S) sdc1[0] sdb1[2] sde1[1]
1953519872 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
Como podemos ver, nuestro nuevo disco ahora esta marcado como disco de reserva ([S]pare), y estamos listos para desactivar el disco moribundo:
$ sudo mdadm --manage /dev/md0 --fail /dev/sdb1
$ cat /proc/mdstat
md0 : active raid5 sdd[3] sdc1[0] sdb1[4](F) sde1[1]
1953519872 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 0.0% (155976/976759936) finish=208.6min speed=77988K/sec
Parece que todo va muy bien. El disco viejo ya esta marcado como [F]ailed y mdadm ya comenzó a usar el nuevo para regenerar el arreglo. Ahora si podemos quitar el disco viejo por completo:
$ sudo mdadm --manage /dev/md0 --remove /dev/sdb1
$ cat /proc/mdstat
md0 : active raid5 sdd[3] sdc1[0] sde1[1]
1953519872 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 1.7% (16652688/976759936) finish=226.0min speed=70789K/sec
Le tomará un buen rato regenerar el arreglo, pero una vez mas, RAID salvó el día.