Discos duros de las laptops y Linux

Bien, primero saludos a toda la comunidad :D. En este articulo voy a tratar de explicar lo mejor posible el tema del problema entre Linux y los discos duros de las laptops ya que no es un tema que veo que se halla tratado previamente aqui y, me parece que es bastante serio y debe ser conocido por todos, especialmente los que poseemos una laptop.

Veran, para comenzar desde cero, los discos duros estan formados, basicamente por el disco (parecido a los CDs), un cabezal de lectura/escritura y una rampa a la que el disco duro pasa cuando la pc se apaga. Para hacernos una mejor idea de esto podemos imaginarnos uno de esos tocadiscos antiguos o, ver esta imagen:

Normalmente, el cabezal solo va a la rampa cuando se apaga la pc. Pero, en las laptops, desde el 2004 mas o menos, los discos incluyen una tecnologia en la que el cabezal pasa entre el disco y la rampa con frecuencia, debido a este comportamiento, ha obtenido el nombre vulgar de tecnologia de carga/descarga (Espanol) o load/unload tech (Ingles). Esta tecnologia, en teoria, permite que el disco duro viva mas, provee mayor proteccion contra golpes y ayuda al ahorro de energia.

Cual es el problema? Bueno.... estos ciclos son finitos, es decir, tienen un limite el cual generalmente esta entre 300k y 600k, siendo cada k 1000 ciclos. Para comprobar cuantos ciclos tenemos, podemos instalar el programa smartmontools y correr lo siguiente como superusuarios:

# smartctl -a /dev/sda | egrep -i "id|load"

El valor que buscamos es el que aparece debajo de RAW_VALUE. Como veremos (A menos de que ya hallamos configurado nuestro Linux para que maneje correctamente este problema) este valor crece rapidamente, si no es tu caso (Si este valor no crece en mas de diez minutos) no tienes nada de lo que preocuparte y puedes irte i seguir leyendo por curiosidad. Por lo general, Linux no maneja esto, a menos de que laptop-mode este activado, en cambio, deja que el disco gire tal y como los fabricantes lo han configurado, sin embargo, como hemos visto, ese valor sigue siendo un tanto alto. Para solucionar este incoveniente tenemos cuatro opciones. La primera es correr el siguiente comando cuando iniciemos Linux como root:

# hdparm -B XXX /dev/sdx

Reemplazando XXX por un numero entre 1 y 254. Si te preguntas por un recomendado, pues, si estas con el cargador conectado deberias ponerlo en 254, si no, 128/180 estaria bien :D. Y sdx por nuestra unidad de disco duro (Comunmente sda).

La segunda es anadir lo siguiente a /etc/init.d:

#!/bin/bash
##El script lo hice yo!! :D
hdparm -B 254 /dev/sdx

La tercera es parecida a la segunda pero anadiendo este script que esta un pelo mejorado:

#!/bin/bash
#Script para que Linux elija con que valor de hdparm debe iniciar
cargador=$(acpi -V | grep -o  -i "on")
if [ "$cargador" = "on" ]
then
hdparm -B 254 /dev/sdx
else
hdparm -B 180 /dev/sdx
fi

La cuarta y recomendada es editar /etc/hdparm.conf y poner lo siguiente:

/dev/sdx {
apm = 254
}

Aunque, cualquiera de las cuatro va a traer estos pequenos inconvenientes:

  • La temperatura del disco va a subir un poco
  • Si configueras HDPARM con un valor muy alto y golpeas la laptop... funeral
  • La energia se va mas rapido

Eres curioso? Quieres saber que hace hdparm con eso? Bueno, configura el APM (Advanced power management) :D. Por cierto, si has pensado en volver a Windows despues de esto (O quizas a MAC OSX)... pos no te preocupes, Windows y Mac tambien tienen este problema :(. Para los que usemos debian lenny, parece que los desarrolladores estan tratando el problema bastante bien alli.

Bueno, eso fue todo, espero que os haya gustado el articulo (Mi primer articulo!!). La info la he sacado principalmente de la entrada de Vicente Navarro en http://www.vicente-navarro.com/blog/2007/10/28/linux-no-mata-discos-duro... y los canales IRC #ubuntu, #hardware y #debian. Pero la redaccion y el script que detecta el cargador son mios :).

Saludos.

Enviado por Jcbaena el 11 Agosto, 2008 - 17:17.

Felicidades por tu comentario. Es ameno y curioso. No tengo linux en mi portatil (laptop) pero al menos sé por donde ir cuando lo instale.

Enviado por Gaucho el 11 Agosto, 2008 - 17:35.

gracias por el aporte y tu tiempo..

saludos

Enviado por NataSHell el 11 Agosto, 2008 - 17:46.

Simplemente Genial!
Mas de uno os agradecemos la información ya digerida.

Saludos!

Enviado por kuie el 11 Agosto, 2008 - 18:07.

Felicidades por tu artículo. Ya había leído anteriormente la referencia de Vicente Navarro pero ni me acoradaba. Me has recordado este tema y aunque en mi laptop con lenny lo tengo controlado ya me va a venir bien para revisar como lo tiene mi novia en su Ubuntu Hardy Heron casi recien instalado. A ver si con lo que ha costado convencerla de pasarse a Linux ahora se va a agotar la vida del hdd y ....... xD

Sólo una duda me surge al ver las soluciones que propones, no sería mejor la solución 3 en vez de la 4. No sé que es lo que hace exactamente hdparm ni que diferencia tiene con apm, pero teniendo en cuenta que en la cuarta opción modificas un archivo que se llama hdparm.conf me parece que relación tendrán.

El caso es que en la cuarta opción propones cambiar el valor de apm en el archivo hdparm.conf a 254 cuando antes en tu texto dices que la tercera opción aporta ventajas porque detecta si el portátil tiene la batería o el cable y así le da un valor más moderado (180 en vez de 254), como creo que tienes razón en el artículo y que un valor algo más bajo cuando la laptop usa la batería es más recomendable creo que la tercera "solución" es más completa que la cuarta.

¿Es válido mi razonamiento o hay algo que paso por alto?

Aún con la anterior "duda" reitero que me parece un buen artículo. Felicidades de nuevo. Un Saludo.

Enviado por DebianUSR el 11 Agosto, 2008 - 22:02.

Me alegro mucho de que os haya gustado y gracias por los comentarios con felicitaciones :D.

@kuie: Deberias chequear rapido lo de tu novia porque Ubuntu Hardy tambien tiene este problema, lo tengo instalado junto con debian y lo he comprobado :(. Lo de la solucion, la verdad tu razonamiento me parece valido y concuerdo contigo en que la tercera es la mejor opcion, sin embargo en la entrada de Vicente Navarro decian que editar hdparm.conf era mejor que anadir un script de inicio, o, por lo menos, mas limpio. Sin embargo si me preguntas cual es la mejor.... te respondo que la tercera, sin duda alguna. Porque como ya dije elige un valor adecuado basado en si la laptop esta conectada a la corriente o no. Editando hdparm.conf te traeria el problema de que no podrias mover la laptop hasta cambiar el valor manualmente.

Enviado por cejodrake el 14 Agosto, 2008 - 16:57.

buen dato , gracias por el aporte

Enviado por MinistroPepon el 16 Agosto, 2008 - 20:10.

Yo tengo un Debian Lenny instalado en un portátil HP y esto me preocupa porque yo manualmente no he configurado nada de esto, ahora bien, he leido esto:
[...]Por lo general, Linux no maneja esto, a menos de que laptop-mode este activado[...]

Y mi pregunta es: ¿qué es esto? no sería más sencillo activar esta opción? ¿Cómo se activaría? es cosa del kernel de linux?

Un saludo y gracias!

Enviado por Lednar el 17 Agosto, 2008 - 02:44.

Hola, lo primero es lo primero:
¡¡¡FELICIDADES POR EL ARTICULO!!!

Y ahora pasemosa extender la masa.

Como todos sabemos Win$ hace una utilización mucho más pesada del disco duro todo el tiempo esta leyendo y escribiendo. Hay muchas leyendas urbanas por allí que si son spyware que envian informacion privada a servidores que a su vez nos mandan spam, que si troyanos con payload alto que intentan convertir el ordenador personal en un servidor. Nadie puede decirlo con exactitud porque razón pero gracias a ello, la cabeza lectora descansa menos que en Linux y por eso no sé golpea tanto contra el soporte que la sostiene en descanso.

Así que pensé, ¿porque no hacer un script que lea y escriba algo ligero al disco duro para que la aguja no descansé?

Dicho y hecho, es algo primitivo, pero este escript durante la utilizaciñon del ordenador congela completamente los ciclos de carga/descarga. Los unicos ciclos que ocurren son al iniciar y al apagar el ordenador, es decir antes de cargar el script y despues de interrumpirlo.

¿Es peligroso? Solo si no lo copias tal y como lo dejo o si acostumbras a dejar caer al suelo el portatil mientras está encendido cosa que es peligrosa aun sin el script...

Bueno sin mas diluvio os dejo el path, nombre y contenido de los scripts:

sudo gedit /usr/local/bin/ciclos.sh

#! /bin/bash
while /bin/true
do
echo "Introducir frase molona aqui.">>/tmp/archivo.txt
sleep 4
done

sudo gedit /etc/init.d/parar_ciclos

#! /bin/bash
if [ -e /tmp/archivo.txt ]; then
exit 0
else
nice -n 19 bash /usr/local/bin/ciclos.sh &
fi


Cuidado el simbolo "&" del final de la quinta linea es muy importante, sin él se congela el sistema al iniciar.

Y por los adictos a la customización, tambien os aviso que el archivo que crea "ciclos.sh" en la carpeta temporal debe tener el mismo nombre que el archivo que busca el "parar_ciclos" en este caso "/tmp/archivo.txt", de lo contrario, no sé lo que pasará porque no me he atrevido a experimentarlo. Si ponéis los 2 tal y como os lo he dejado no habrá problema alguno.
También tenéis que ejecutar los comandos:

cd /etc/init.d
sudo update-rc.d parar_ciclos defaults 90


Si no os permite el valor 90 probad uno más bajo (el que se pueda). Ami me dejo utilizar el valor 90.

Cuidado:
La cuarta linea del archivo "ciclos.sh" debe ser una sola linea, es decir:

echo "Introducir frase molona aqui.">>/tmp/archivo.txt


Si cometeis este fallo de a continuación no funcionará el script:

echo 
"Introducir frase molona aqui.">>/tmp/archivo.txt

Enviado por Lednar el 17 Agosto, 2008 - 03:09.

MinistroPepon escribió:

Yo tengo un Debian Lenny instalado en un portátil HP y esto me preocupa porque yo manualmente no he configurado nada de esto, ahora bien, he leido esto:
[...]Por lo general, Linux no maneja esto, a menos de que laptop-mode este activado[...]

Y mi pregunta es: ¿qué es esto? no sería más sencillo activar esta opción? ¿Cómo se activaría? es cosa del kernel de linux?

Un saludo y gracias!

ESTO de que estamos hablando es sumamente peligroso. Algunos discos duros se calientan como el mismisimo infierno con valores altos del ADVANCED POWER MANAGEMENT o apm.

Si en efecto jugar con el hdparm es un arma de doble filo. Desactivar el apm significa dejar el
disco duro a su suerte y que vaya aparcando cuando quiera. Un valor muy pequeño, es decir 1 para el "hdparm -B" conlleva cierto ahorro de energia pero a cambio el disco duro intenta aparcar como loco, recibiendo la señal correspondiente cada vez que no este escribiendo, por lo tanto más golpes contra el soporte y antes empezará a fallar en la escritura.

Un valor muy alto, es decir 254 obliga el disco duro a consumir energia como loco, con el resultado de que algunos superen la temperatura de funcinamiento recomendada que suele ser 60ºC. El disco se destempla, se vuelve quebradizo y se rompe.

Luego la tercera opcion, el valor 255 que desactiva el apm y deja el disco duro a su suerte.

Esta bien, jugando se aprende, y en efecto cada disco duro es un mundo y no existe numero magico fijo que funcione a la perfeccion para todos los discos duros, solo hay que probar valores, el que menos calienta el disco duro y menos lo haga aparcar. Mi numero mágico resulto ser 192.

Aunque claro al final me cansé de tanto experimento y decidí que mi disco duro haga lo que yo le diga que haga y punto.

Enviado por Lednar el 17 Agosto, 2008 - 03:28.

DebianUSR escribió:

Me alegro mucho de que os haya gustado y gracias por los comentarios con felicitaciones :D.

@kuie: Deberias chequear rapido lo de tu novia porque Ubuntu Hardy tambien tiene este problema, lo tengo instalado junto con debian y lo he comprobado :(. Lo de la solucion, la verdad tu razonamiento me parece valido y concuerdo contigo en que la tercera es la mejor opcion, sin embargo en la entrada de Vicente Navarro decian que editar hdparm.conf era mejor que anadir un script de inicio, o, por lo menos, mas limpio. Sin embargo si me preguntas cual es la mejor.... te respondo que la tercera, sin duda alguna. Porque como ya dije elige un valor adecuado basado en si la laptop esta conectada a la corriente o no. Editando hdparm.conf te traeria el problema de que no podrias mover la laptop hasta cambiar el valor manualmente.

Cuidado con los consejos que das, lo más importante es aportar toda la información, y te recuerdo que la tercera opción tuya puede generar conflictos con los archivos:
/etc/acpi/power.sh

en donde si realmente quieres cambiar los valores del hdparm lo debes hacer donde lo dejo en negrita:

#!/bin/bash

. /etc/default/acpi-support
. /usr/share/acpi-support/power-funcs

function laptop_mode_enable {
    $LAPTOP_MODE start
    
    for x in /sys/bus/ide/devices/*/block*; do 
        drive=$(basename $(readlink $x));
        $HDPARM -S $SPINDOWN_TIME /dev/$drive 2>/dev/null
     $HDPARM -B 1 /dev/$drive 2>/dev/null
    done
    
    for x in /sys/bus/scsi/devices/*/block*; do 
        drive=$(basename $(readlink $x));
        $HDPARM -S $SPINDOWN_TIME /dev/$drive 2>/dev/null
     $HDPARM -B 1 /dev/$drive 2>/dev/null
    done
}

function laptop_mode_disable {
    for x in /sys/bus/ide/devices/*/block*; do 
        drive=$(basename $(readlink $x));
        $HDPARM -S 0 /dev/$drive 2>/dev/null
     $HDPARM -B 255 /dev/$drive 2>/dev/null
    done
    for x in /sys/bus/scsi/devices/*/block*; do 
        drive=$(basename $(readlink $x));
        $HDPARM -S 0 /dev/$drive 2>/dev/null
     $HDPARM -B 255 /dev/$drive 2>/dev/null
    done
    $LAPTOP_MODE stop
}
...

Y en el fichero:
/etc/laptop-mode/laptop-mode.conf

...
#
# Power management for HD (hdparm -B values)
#
BATT_HD_POWERMGMT=1
LM_AC_HD_POWERMGMT=254
NOLM_AC_HD_POWERMGMT=254
...

Ficheros muy importantes de los cuales nisiquiera has hablado en tu articulo.

Ale pues, buena suerte con eso y espero que le encontreis la mejor de las soluciones. Y os deseo que Lenny os traiga todo lo que deseais y tambien espero que disfruteis de este maravilloso SO que no tiene desperdicio (yo lo disfruto como un cosaco).

Y a ver si dejamos de emular Internet Explorer con Wine. xD