Cómo prolongar la vida de los discos duros en Linux

24/Jun/2016 | Eder

Inicio » Tutoriales » Cómo prolongar la vida de los discos duros en Linux

Como muchos de mis lectores sabrán, en estos años he estado prescindiendo en su gran mayoría de Windows y reimplementando mis soluciones utilizando Linux y una infinidad de alternativas multiplataforma. El detalle es que para meterse con Linux a fondo hay qué pasar muchas, pero muchas horas haciendo nuestros pinitos para tener un sistema a nuestra medida.

Un problema un tanto complejo es el cuidado de los discos duros (no hablo de los SSD, aclaro) y principalmente cuando se tratan de laptops o discos externos. De hecho si nuestro disco principal tiene instalado Linux hay qué checar lo siguiente,

Un poco de teoría

Leyendo un buenísimo artículo del blog de Vicente Navarro descubrí la solución al siguiente problema: los discos duros que le he puesto a mi laptop (con ArchLinux instalado y corriendo en ellos) cada cierto tiempo de inactividad se detenían unos cuantos segundos y volvían a reanudar su actividad; era algo cíclico que con los años me pareció cada vez más molesto, especialmente que dicho ruido es notable cuando estoy completamente aislado de ruidos externos.

Entre la wiki de Arch, algunas preguntas en ServerFault y otros tantos blogs me di cuenta que el hecho de detenerse y reanudar el disco duro constantemente podría acortar su vida útil; el cual puede medirse mediante un atributo específico de S.M.A.R.T. de la siguiente manera, fijándonos únicamente en la columna que dice RAW_VALUE (como root, por supuesto):

# smartctl -a /dev/sda | egrep "ID|Load_Cycle"

Para ejecutar ese comando necesitamos tener instalado el paquete smartmontools; básicamente el valor de Load_Cycle_Count mide la cantidad de veces que el cabezal del disco duro descansa y vuelve a posicionarse sobre los platillos para leer o escribir información (proceso conocido como spin-down); se dice que un disco duro promedio tolera entre 300 000 y 600 000 ciclos antes de empezar a dar problemas, valores que por supuesto son solamente estadísticos y no deben considerarse como un valor efectivo antes de considerar comprar un nuevo disco duro.

Alargando la vida de nuestro disco duro

Antes de aplicar estos valores, decidí darle una checada a la cantidad de ciclos de descarga con el comando que ya puse arriba:

ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
193 Load_Cycle_Count 0x0032 071 071 000 Old_age Always - 389375

Tras dejarlo unos cuantos minutos, actualizamos el valor:

ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
193 Load_Cycle_Count 0x0032 071 071 000 Old_age Always - 389453

¡Carajo! ¡Necesito hacer algo ya para no matar mi disco duro tan rápido! Así que simplemente, le diré al sistema que nunca siempre mantenga el disco duro encendido para que ese valor no crezca tan rápido y le provoque desgaste excesivo en cuestión de semanas:

# hdparm -B 255 /dev/sda

Explicación: el parámetro -B indica el número (1 a 255) para modificar el comportamiento de algo que se llama Advanced Power Management; con el valor 255 deshabilitamos APM y por tanto el disco siempre se mantendrá activo. La desventaja de esto es que tanto el calor generado como la energía consumida aumentarán, además de que el disco duro puede dañarse más fácilmente si éste sufre un golpe mientras está en movimiento. Por supuesto que /dev/sda es el disco duro de mi laptop y posiblemente tengas qué cambiar ese valor.

Habilitando los cambios permanentemente

Si solamente hacemos lo anterior, los cambios se pierden al suspender o apagar la computadora. Para dejarlos permanentemente crearemos un servicio de Systemd:

El archivo en cuestión se llama /etc/systemd/system/hdparm-suspension.service y se le colocará el siguiente contenido:

[Unit]
Description=Local system resume actions
After=default.target suspend.target

[Service]
Type=simple
ExecStart=/usr/bin/hdparm -B 255 /dev/sda

[Install]
WantedBy=default.target suspend.target

No olvidemos habilitar el servicio:

# systemctl enable hdparm-suspension.service

Resultados

A partir de ahora, el valor de Load_Cycle_Count incrementará en 1 cada vez que suspendamos nuestra máquina o la reiniciemos, por lo que tocará ser más cuidadosos con nuestro disco, en especial a los que poseemos una laptop con Linux felizmente instalado.

Update 20/Ago/2016

La semana pasada decidí comprar un nuevo disco duro para mi laptop, así que en lugar de entrar a mis clases terminé comprando un Toshiba de 1TB. En la semana que llevo probándolo y después de reinstalar ArchLinux en ese nuevo disco, me doy cuenta de algo importantísimo: no todos los discos duros tienen soporte para APM.

Eso explica por qué el valor de Load_Cycle_Count incrementaba cada dos o tres minutos independientemente de haber deshabilitado la característica.

¿Cómo sabemos si nuestro HDD soporta APM? Simplemente utilizando el comando hdparm -I /dev/sdX (recuerda reemplazar /dev/sdX por la ubicación lógica de tu unidad) para ver la información detallada del disco duro.

...
Commands/features:
    Enabled    Supported:
       *    SMART feature set
            Security Mode feature set
       *    Power Management feature set
...

En la sección Commands/features vemos que podemos realizar lo de este tutorial sí y sólo si la característica Power Management feature set aparece con el asterisco. Caso contrario es inútil cambiar los valores de APM.

 

Acerca de Eder
Software Engineer, estudiante politécnico del CECyT No. 3 y ESCOM-IPN.

Comentarios