Aumentando a vida útil dos HDsRecentemente, uma notícia no br-linux alertou sobre a possibilidade do gerenciamento de energia de algumas distribuições GNU/Linux, do Ubuntu em especial, estarem reduzindo a vida útil dos discos rígidos (HDs). Como noticiado em diversos sites da internet [1,2], isto não é um bug do Ubuntu. Na verdade, o Ubuntu apenas segue as recomendações equivocadas fornecidas pelos próprios fabricantes de notebooks e desktops. Neste artigo, o problema é explicado em detalhes e uma solução bastante simples é apresentada. Esta é baseada em um script que necessita ser executado uma única vez e faz todo o trabalho para correção do problema. Além disso, o artigo termina fazendo uma breve discussão sobre o pacote smartmontools que monitora o estado do HD e informa quando este está na eminência de sofrer alguma falha.
Entendo o problemaPode-se pensar em um HD como aqueles antigos toca-discos usados com os LPs de vinil. Neste caso, o disco de vinil é a superfície de armazenamento, enquanto a agulha pode ser considerada a cabeça de gravação. Normalmente, no caso dos HDs, a cabeça de gravação não toca a superfície do disco. Ao invés disso, esta fica a uma distância segura. Evidentemente, o contato da cabeça de gravação com a superfície do disco durante uma queda ou tombo pode danificá-lo. Então, para permitir o transporte seguro dos equipamentos, foi criada a tecnologia de carga/descarga (load/unload). Basicamente, tal tecnologia permite que a cabeça de gravação seja movida para uma região bem distante da superfície do disco quando este não estiver sendo utilizado, por exemplo, quando o equipamento está em estado de hibernação para economizar energia. É claro, antes do HD poder ser utilizado novamente, a cabeça deve retornar para a sua posição de operação normal.
Desktops também, mas principalmente os notebooks possuem um sistema de gerenciamento de energia. Este desliga alguns dispositivos do hardware que não estão sendo utilizados. É claro que isso também se aplica aos HDs. Assim, para economizar energia, muitas vezes os HDs têm sua rotação reduzida ou até mesmo são desligados temporariamente. Além de economizar energia, se for feito de forma eficiente, isto aumenta a vida útil do HD, pois mantém a sua temperatura mais baixa.
Quando entram em modo de economia de energia, a cabeça de leitura/gravação dos HDs também podem ser descarregadas (unloaded). Quem decide quando fazer isso é o sistema operacional, através de seu sistema de gerenciamento de energia. Este é um ponto importante, pois existe um limite máximo de vezes que a cabeça de gravação pode ser carregada/descarregada. Um valor bastante aceito pare este limite é 600.000 vezes [2]. Contudo, outros autores afirmam que este valor vale apenas para HDs da Hitachi. Para HDs de outros fabricantes, o valor é apenas 200.000 [3]. Após ultrapassar este limite, o HD tem uma grande chance de apresentar perdas de dados.
Em tese, os fabricantes dos notebooks são os mais indicados para decidir a melhor estratégia de carga/descarga dos HDs. Apensar disso, as versões do Windows e do MacOS ignoram as recomendações dos fabricantes e impõem suas próprias estratégias de gerenciamento de energia. Ao contrário, por serem mais fieis aos padrões da indústria, distribuições baseadas no GNU/Linux como, por exemplo, o Ubuntu, realizam o gerenciamento de energia segundo as recomendações dos fabricantes. O problema é que (pasmem) a maioria dos fabricantes fornecem parâmetros absurdos ao sistema operacional. Em alguns casos, se forem seguidos, tais parâmetros podem fazer com que o HD seja carregado/descarregado até 3 vezes por minuto [4]. Neste caso, a vida útil do HD chega ao fim apenas após alguns meses de uso.
Detectando o problemaNo Ubuntu, para verificar se o gerenciamento de energia está impondo ciclos de carga/descarga demais ao HD, é necessário instalar o smartmontools. Para isso, simplesmente, deve ser executado o comando a seguir.
sudo apt-get install smartmontools
Com o smartmontools instalado, pode-se utilizar o smartctl como segue para visualizar o número de ciclos de carga que o HD já foi submetido. O segundo comando abaixo está como hd sda, mas se o seu hd for hda basta trocar o sda por hda. Não sabe se o seu hd é sda ou hda ou sdb? Digite o comando:
sudo fdisk -l
sudo smartctl -A /dev/sda | grep Load_Cycle_Count
Evidentemente, /dev/sda deve ser substituído com o dispositivo que deseja-se inspecionar.
A saída do comando anterior é algo como segue.
193 Load_Cycle_Count 0x0032 189 189 000 Old_age Always - 35715
Em tal saída, a informação importante é o último número, o 35715. Este é o número de ciclos de carga do HD. Deve-se esperar algo em torno de 10 ou 20 minutos antes do smartctl ser executado novamente. Isso dará uma estimativa de quantas vezes por minuto o HD está sofrendo um ciclo de carga/descarga. Sabendo que um HD pode sofrer 200.000 ciclos desse tipo, pode-se estimar quantas horas de vida útil ele tem. O ideal é que, durante o intervalo de uns 20 minutos, não seja feito (quase) nenhum ciclo de carga. Contudo, ao invés disso, se o sistema de gerenciamento de energia estiver sendo muito agressivo com o HD, deve-se corrigir o problema.
Corrigindo o problemaPara corrigir o problema, a forma mais prática talvez seja executando o script abaixo como root.
OBSERVAÇÃO O SCRIPT ESTÁ CONFIGURADO PARA SDA SE VOCÊ USAR HDA OU OUTRO... BASTA SUBSTITUIR AS OCORRÊNCIAS DE SDA POR HDA POR EXEMPLO.
#!/bin/sh
PARAM=255
HD=/dev/sda
echo "#!/bin/sh" > 99-hdd-spin-fix.sh
echo "hdparm -B $PARAM $HD" >> 99-hdd-spin-fix.sh
chmod +x 99-hdd-spin-fix.sh
cp 99-hdd-spin-fix.sh /etc/acpi/suspend.d/
cp 99-hdd-spin-fix.sh /etc/acpi/resume.d/
mv 99-hdd-spin-fix.sh /etc/acpi/start.d/
Parâmetros importantes do script acima são as variáveis PARAM e HD. A variável PARAM pode ser igual a 255 ou 254. O valor 255 desliga o gerenciamento de energia do HD completamente. Assim, os ciclos de carga serão mínimos, mas o HD ficará a uma temperatura mais elevada que o normal. Contudo, é consenso que o HD pode lidar melhor com alguns graus de temperatura a mais do que muitos ciclos de carga. Por outro lado, o PARAM=254 faz com que o gerenciamento de energia para o HD continue ativo, mas de uma forma menos agressiva. Por último, a variável HD deve ser alterada se o dispositivo do HD que se deseja proteger seja diferente de /dev/sda.
Antes de executar o script anterior deve-se copiar e colar as linhas de código acima em um arquivo texto, salva-lo como hdd-spin-fix.sh e torná-lo um arquivo executável.
sudo chmod +x sh hdd-spin-fix.sh
sudo sh hdd-spin-fix.sh
Pronto! Após isso, a próxima vez que o sistema for iniciado, gerenciamento de energia será bem mais gentil com o HD.
Monitorando outros problemasUm fato importante a ser observado é que o smartctl não fornece apenas informações sobre a quantidade de ciclos de carga. Por exemplo, o comando a seguir fornece dezenas de informações sobre o HD em /dev/sda
sudo smartctl -a /dev/sda
Há um excelente artigo do Linux Journal [5] que explica todas as informações retornadas pelo smartctl. Tais informações fornecem estimativas bastantes exatas de quando e porque o HD dará problema. Contudo, não é necessário usar o smartctl frequentemente para monitorar a saúde do HD. Ao invés disso, o pacote smartmontools instala um daemon (o smartd) que é ativado na carga do sistema. Assim, basta instalar o smart-notifier com o comando a seguir para ser notificado por uma janela pop-up quando o HD tem uma grande probabilidade de dar problema.
sudo aptitude install smart-notifier
Evidentemente, para funcionar de forma adequada, o smart-notifier deve ser executado sempre que uma nova sessão for iniciada.
FONTE DE MATÉRIA:
http://alexblog.eeol.org/linux/aumentando-a-vida-util-dos-hds/