2012 ismaro3. Con la tecnología de Blogger.

3/8/14

Mucho se presume del mínimo consumo del pequeño Raspberry Pi, pero un Raspberry Pi por si sólo de poco sirve.

Uno de los elementos que también consume es el disco duro que tengamos enchufado por USB, por lo que nos interesa reducir su consumo.

Para ello, he encontrado este pequeño script que para el disco duro cuando no se ha utilizado en un cierto tiempo. Cuando se vuelve a requerir, se pone en marcha automáticamente. Así, ahorraremos bastante en energía y vida útil del disco duro.

(Algunos discos duros se paran automáticamente sin necesidad de ningún programa. Esto es para aquellos que no lo hacen.)


Requisitos:
  • Raspberry Pi (Cualquier modelo)
  • Disco duro externo USB
  • Distro basada en Debian (Raspbian, Raspbmc...)
(Esto puede hacerse sin Raspberry Pi, en cualquier distro basada en Debian)

Notas:
Los comandos están en negrita.
En las rutas que contienen ~, ~ puede ser sustituído por /home/USUARIO.
Por ejemplo, ~/scripts equivale a /home/USUARIO/scripts, siendo USUARIO tu usuario actual.

Pasos:

Creación del script

  1. Accedemos al terminal del Raspberry ya sea mediante el televisor conectado o mediante SSH.
  2. Ahora crearemos el script a ejecutar para parar el disco duro. Yo personalmente lo guardo en una carpeta "scripts" junto a otros scripts de interés. En mi caso, creé la carpeta en la home con: mkdir ~/scripts
  3. Abrimos el editor de texto con: nano  ~/scripts/spindown.sh
  4. Pegamos el texto inferior (del recuadro gris) (Con Ctrl+Shift+V)
  5. Editamos la 6ª línea del script, la que dice drive="sdb", sustituyendo lo que hay entre comillas por el identificador del disco duro que queremos parar.  Supongo que ya tienes el disco duro funcionando, lo has sabido montar y por lo tanto sabes su identificador.( Si no es así, ejecuta        df -H, que te dará un listado de las particiones activas. Identifica cuál puede ser una de tu disco duro (por el espacio libre, por ejemplo) y quédate con la parte de atrás de la barra sin el número. Ejemplo, si es /dev/sdb4, nos quedamos con sdb. Ese será el identificador de nuestro disco.) 
  6. Guardarmos el archivo con Ctrl+O (y enter para confirmar) y salimos con Ctrl+X .
#!/bin/bash
# This script looks for recent disk access, and if nothing has changed, puts /dev/"drive" into spindown mode.
# This should be used only is the hdparm power management function is not working.
# Call this script with cron or manually as desired.
# Change which drive this script looks at by changing the drive variable below:
drive="sdb"
#
#
current=`date`
caller=$(ps ax | grep "^ *$PPID" | awk '{print $NF}')
filename="/tmp/diskaccess.txt"
if [ -f "$filename" ]; then
    stat_old=`cat "$filename" | tr -dc "[:digit:]"`
    stat_new=`cat /sys/block/"$drive"/stat | tr -dc "[:digit:]"`
    if [ "$stat_old" == "$stat_new" ]; then
        stat="0"
        echo "The disk hasn't been used; spinning down /dev/$drive"
        echo $stat_old
        hdparm -y /dev/$drive > /dev/null
    else
        stat="1"
        echo $stat_old
        echo $stat_new
        echo "The drive has been used..."
        echo $stat_new > $filename
    fi
else
    echo "/tmp/diskaccess.txt file does not exist; creating it now."
    echo $stat_new > $filename
fi
echo $stat " - " $drive " - " $current " - by: " $caller >> /tmp/diskaccesslog.txtGuardamos el archivo con Ctrl+O, y Enter posteriormente para confirmar el guardado.

Ya tenemos el script localizado, en este caso, en /home/USUARIO/scripts/spindown.sh, donde USUARIO es tu usuario, y la ruta puedes cambiarla a tu gusto, siempre que lo recuerdes. 

Probando el script

Nos aseguramos de que no estamos realizando operaciones con el disco duro (Bajar torrents o archivos, hacer streaming de algun vídeo) y ejecutaremos el script un par de veces:


sudo ~/scripts/spindown.sh 

El resultado la primera vez será algo así:

3938691009673601080032407360
4101140124001310010800515013100
The drive has been used...

Volvemos a ejecutar:


sudo ~/scripts/spindown.sh 

Y el resultado debe ser algo así:

The disk hasn't been used; spinning down /dev/sdb
4101140124001310010800515013100


Eso nos confirma que ha detectado que el disco ha sido usado, y por lo tanto lo para.
Si no sale eso, intentadlo varias veces mas. Si aun así no funciona, (no sale ese resultado o seguís oyendo el disco girar) vuestro disco no es compatible con este método...


Ejecutándolo periódicamente

Para ejecutarlo periódicamente, haremos uso de cron, que configuraremos a través de su archivo crontab.

Para ello, editamos el archivo /etc/crontab con sudo nano /etc/crontab  :

Añadimos al final del archivo la línea:

*/20 * * * * root /home/pi/scripts/spindown.sh

Esta línea establece que, todos los días a todas horas, cada 20 minutos, se comprobará si hay que parar el disco (se ejecutará el script). Podéis cambiar la frecuencia, las horas, la ruta... todo lo que queráis, pero es importante mantener el usuario root como el que lo ejecuta.

(*/20 establece una frecuencia de 20 minutos ,mientras que los asteriscos en los demás apartados indican a todas horas, todos los días de la semana... Para más información, ver Manual de crontab. )


Y con esto ya está, tu disco duro se irá parando automáticamente cuando no se use, ahorrando bastante energía y aumentando su vida.

Un saludo!