jump to navigation

Linux puede acabar con tu disco duro 10/04/2009

Posted by linopensoft in Tutoriales.
trackback

Este es un tema que ha sido ampliamente discutido en la red, sin embargo muchas personas lo desconocen y no se le ha dado la importancia y divulgación que se merece. (El asunto es crítico, si eres usuario de Linux y tienes una portátil debes seguir leyendo)

El problema resulta ser más de hardware que software y afecta únicamente a las unidades de disco que cuenten con soporte avanzado de energía. Como es el caso de los discos de las portátiles.

El diseño del hardware en si intenta disminuir el consumo de energía, lo cual es sumamente útil en el caso que se esté operando el portátil usando la batería. Existen varios métodos de ahorrar energía, entre ellos esta el desactivar las interfaces de red que no se estén usando, disminuir el brillo de la pantalla LCD, reducir los ciclos del CPU y detener el disco duro cuando no se utilice.

La acción que se realiza es un park la cual consiste en mover la cabeza de lectura de los platos del disco duro a la posición central, esto ayuda también a que si el disco se mueve o golpea (acciones comunes en una portátil y más si está siendo usada a pilas, ya que se asume que estará sobre el regazo del usuario o en movimiento) la cabeza de de lectura no impacte con el plato provocando daños en la misma o en el plato.

El que identifica cuando el disco duro no esta en uso (lectura / escritura) es su propio controlador. Y para ello determina cuanto tiempo ha pasado desde la última lectura o escritura, dependiendo de ese valor, decide si detiene/park el disco o no. Como todo, cuenta con valores por defecto, los cuales están programados en el controlador y pueden ser modificados por la BIOS (al momento de arrancar la máquina) o por el sistema operativo.

A esta característica de los discos móviles se le conoce como Advanced Power Management y se mide en un valor de 1 a 255, donde 255 es desactivado y 1 el valor más agresivo.

Hasta donde conozco ninguna distribución de Linux se ha preocupado por configurar estos valores, por lo cual se usan los que se tienen configurados por defecto en la unidad o los que el BIOS haya definido al momento del arranque.

El problema ocurre cuando el valor por defecto del fabricante o el configurado en la BIOS es muy agresivo, lo cual producirá que el disco entre y salga del park constantemente, más o menos el equivalente a encender y apagar una bombilla varias veces por minuto, produciendo un desgaste y reduciendo el tiempo de vida de manera considerable.

Lamentablemente el fabricante o la BIOS establecen valores agresivos por defecto, por lo cual si el sistema operativo no reescribe estos valores (como lo hacen Windows y Mac OS) la vida de nuestro disco duro queda reducida a un par de años.

Los primeros en detectar este problema han sido los usuarios de ubuntu pero está presente en casi todas las distribuciones.

Para solucionar esto necesitas tener instalado los programas de SMART, en Debian (y distribuciones basadas en él) se llama smartmontools. Con poco temor a equivocarme puedo decir que todos los discos duros actuales soportan S.M.A.R.T. y los que no, probablemente tampoco tengan características de Advanced Power Management por lo que no debieran tener problemas.

Lo importante es revisar el estado del disco, para ello usamos el comando smartctl, es posible que la versión instalada de smartctl sea vieja y se tenga que especificar el controlador en caso de tener un disco sata, usando –d ata por ejemplo:
smartctl –a /dev/hda
smartctl –a –d ata /dev/sda

En la salida hay dos parámetros importantes que requieren de nuestra atención:
Power_On_Hours – Cantidad de horas de uso
Load_Cycle_Count – Cantidad de veces que se ha hecho park
(En algunos es posible encontrar Power_On_Seconds en lugar de Hours)

Dependiendo de las especificaciones del fabricante del disco duro, cada uno tiene un tiempo de vida basado en el Load_Cycle_Count, en la mayoría es de 600 000. Lo recomendable es tener un Load_Cycle_Count menor de 15 por hora (Load_Cycle_Count / Power_On_Hours).

Si su Load_Cycle_Count aumenta más de esto es necesario tomar acciones. Es posible modificar la configuración manualmente usando el comando hdparm, con el parámetro –B, con el parámetro –I es posible ver el valor actual.

Un valor de 255 (para hdparm –B) desactivará el Advanced Power Management, un valor de 254 es el menos agresivo. Para complicar un poco más las cosas (que si no es complicado no es divertido) algunos controladores no permiten que se desactive esta característica y algunos no son siquiera compatibles con hdparm/kernel por lo que es necesario revisar los valores de smartctl constantemente, existe un daemon que puede ser configurado para este fin y de seguro habrá alguna aplicación gráfica para el escritorio de su preferencia que muestre la información y de paso el valor de Reallocated_Sector_Ct el cual nos puede ayudar a identificar problemas en el disco.

También esta la opción de hdparm –S la cual permite especificar el tiempo sin actividad que se va a esperar antes de detener por completo el motor del disco, en este caso reiniciar la operación puede tardar un poco más, pero es bueno tomarlo en consideración también.

Cuando se lee un archivo en Linux, se produce una operación de escritura para grabar la hora/fecha en la que dicho archivo fue leído por última vez. Esto implica que no hay lectura sin escritura en el disco, lo cual tiene como consecuencia un acceso lento al mismo y una mayor carga, por lo cual es recomendable deshabilitarlo, para ello basta con agregar la opción noatime en el fstab de la partición a modificar:
/dev/sda1       /               ext3    defaults,noatime    0   1

Es posible verificar la presencia de noatime haciendo cat al archivo /etc/mtab. También puede modificarse esto a nivel de archivos con el comando chattr +A nombredearchivo. Aunque lo recomendable es desactivarlo para toda la partición.

En resumen, para ayudar a mejorar la situación podemos crear un script de inicio (rc.local) el cual configure dichos valores, el más radical sería algo como:
Hdparm –B 254 /dev/sda
Hdparm –B 255 /dev/sda     #si falla debería tomar el valor anterior
Hdparm –S 0 /dev/sda

Pero como en todo; los extremos son malos y tampoco conviene tener el disco trabajando a toda marcha. Depende también de los hábitos del usuario, si es un usuario que usa la portátil conectada y sobre un escritorio todo el tiempo, los valores pueden ser menos agresivos que un usuario que use mucho la batería y este en movimiento con el equipo.

Experimentar y monitorear esa es la clave, si se usa la portátil un promedio de 12 horas al día, y se entra en park alrededor de 10 veces por hora, tenemos 120 Load_Cycle_Count por día, tardaremos aproximadamente 13 años en alcanzar el valor crítico de 600 000. Con el valor recomendado (15 ciclos por hora) serían 9 años.

En algunos casos para los cuales después de modificar los valores de hdparm –B aún el Load_Cycle_Count siga aumentando de forma descabellada, la opción smartctl –o on /dev/sda parece funcionar, el por qué aún lo desconozco, en la documentación de smartctl no parece decir nada del parámetro –o relevante a esto, pero para algunos discos el ejecutar smartctl –o on /dev/sda antes de hdparm –B 254 /dev/sda parece habilitar o activar dichos cambios.

Buena Suerte

Anuncios
A %d blogueros les gusta esto: