Desligar (spindown) os discos automaticamente
Esta dica funciona melhor em sistemas com mais de um disco rígido (por exemplo, um homeserver, como é o meu caso) ou num portátil.A ideia é arranjar maneira de desligar o motor dos discos rígidos quando estes não estão a ser usados. Poupa-se energia, pois o disco consome menos com o motor desligado obviamente e pode prolongar-se o tempo de vida do disco. Para prolongar o tempo de vida do disco é preciso definir um tempo espera generoso antes de fazer o spindown, pois demasiados ciclos de desligar e reiniciar o motor vão ter o efeito contrário, isto é, diminuir o tempo de vida do disco.
Assim, vou usar 30 minutos como tempo recomendado.
Há um projeto aqui http://code.google.com/p/spindown/ de um daemon que faz exatamente o que se pretende, mas eu quero uma solução mais "caseira", que assente mais em bash e que não seja preciso andar a compilar código.
Vou usar Debian para este projeto, pois ando desanimado com o Ubuntu. Está cada vez mais parecido ao Windows.
É preciso executar todos os comandos como root.
1. Instalar o sg3-utils
apt-get install sg3-utilsO pacote sg3-utils tem o comando sg_start que podemos usar para parar o motor do disco.
Aparentemente também se pode fazer com o sdparm e com o hdparm, mas ainda não experimentei.
2. Criar um script
Criei um script em /root/bin/spindown.sh com o seguinte conteúdo:# !/bin/sh
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
if [ -z $1 ]; then
echo Usage: $0 sdX
exit 1
fi
# isto estava a causar alguns problemas, por enquanto fica desligado
#if ! [ -e /dev/$1 ]; then
# echo /dev/$1 not found
# exit 1
#fi
NEWFILE=/tmp/NewState.$1
OLDFILE=/tmp/OldState.$1
date +"%F %T"
# Get new state from diskstats
NEWstate=$(cat /proc/diskstats | grep $1)
echo $NEWstate > $NEWFILE
if [ -z $(diff OLDstate.txt NEWstate.txt) ]; then
echo Stopping $1...
# sdparm --flexible --command=stop /dev/$1 &>/dev/null
sg_start --stop /dev/$1
else
echo $1 active
fi
# Write current state to file
echo $NEWstate > $OLDFILE
Não esquecer de ligar o bit executável no ficheiro:
chmod +x spindown.sh
3. Adicionar ao crontab
Adicionar ao crontab a linha:
*/30 * * * * /root/bin/spindown.sh sdc
Deve ser adicionada uma linha por cada disco que se pretende controlar, mudando o 'sdc' de acordo com o disco, claro.
Como o script faz algumas verificações antes de ser executado, deve ser seguro de executar na linha de comandos para testes (sem garantias...),
Não é uma solução muito elegante, mas é relativamente simples.
Sem comentários:
Enviar um comentário