Forçar spin-down do disco rígido externo no linux (raspberry pi)


16

Atualmente, estou configurando um servidor doméstico usando um Raspberry Pi com um disco rígido externo conectado via USB. No entanto, meu disco rígido nunca ficará inativo quando estiver ocioso.

Eu já tentei as dicas fornecidas no raspberrypi.org ... sem sucesso.

1.)

sudo hdparm -S5 /dev/sda

retorna

/dev/sda:
 setting standby to 5 (25 seconds)
SG_IO: bad/missing sense data, sb[]:  70 00 04 00 00 00 00 0a 00 00 00 00 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

2.)

sudo hdparm -y /dev/sda

retorna

/dev/sda:
 issuing standby command
SG_IO: bad/missing sense data, sb[]:  70 00 04 00 00 00 00 0a 00 00 00 00 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

... e 3.)

sudo sdparm --flexible --command=stop /dev/sda

retorna

/dev/sda: HDD         1234

... sem redução da unidade.

Eu uso o seguinte hardware:

  • Estação de ancoragem Inateck FDU3C-2 de portas duplas USB 3.0 HDD
  • Western Digital WD10EZRX Verde 1TB

É possível que os sinais de rotação enviados sejam substituídos / perdidos / ignorados?


1
Atualização: A estação de acoplamento Inateck mencionada possui uma funcionalidade para clonar discos rígidos, fornecendo uma porta principal / fonte e uma porta secundária / secundária para HDDs. Ao conectar o HDD à porta escrava, execute os comandos mencionados acima. Isso limita o problema de falta de rotação para a porta principal.
user258346

1
Se você acha que isso é solução, você deve aceitar sua própria solução. Embora pareça foleiro, é útil para futuros leitores com o mesmo problema.
MariusMatutiae 22/10

1
Você percebe, é claro, que o comando que você usa no seu script é exatamente o mesmo que você declarou que não estava funcionando, certo? hdparm -y / dev / sda ...
MariusMatutiae

Respostas:


4

Não tive sorte com hd-ocioso; funcionou mas não funcionou. Acabei escrevendo o script abaixo:

#!/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="sda"
#
#
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.txt

4
Eu pensei hdparm -yque não funcionou.
Cristian Ciupitu 19/07/2014

Obrigado, funciona perfeitamente. Meu disco rígido azul WD gira agora, quando não é usado. Qual é um intervalo razoável para o cron chamar o script, na sua opinião? Eu chamo isso a cada 15min por enquanto.
Tarator

5

Sim, é possível, mas exigirá algum trabalho de desenvolvimento personalizado e não trivial, e o código será específico para o chip ponte USB-> SATA DENTRO do seu gabinete.

O negócio é que a ponte USB serve como mais do que um conversor elétrico. Um HDD conectado a USB emula uma unidade SCSI que possui um conjunto de comandos diferente. Enquanto os comandos padrão de leitura / gravação / busca são traduzidos o tempo todo, os movimentos mais exóticos para cima / baixo não. A maioria das fichas não faz isso. Além disso, NÃO existe uma API universal de nível de chip. Então, se eu escrevesse o código, teria que ter um manual de programação para o chip ponte USB.

Resumindo, a menos que você tenha detalhes de programação no chip e esteja familiarizado com o conjunto de instruções ATA e SCSI e com os comandos de passagem de encapsulamento, então você terá que ficar sem. Muito trabalho e sem padrão.


5

É perfeitamente possível que os sinais que você está enviando sejam negligenciados. Você não forneceu a saída de

sudo hdparm -I /dev/sdX

o que nos diria os recursos do disco, mas muitos discos simplesmente não respondem a esses comandos.

Felizmente, existe um utilitário muito conveniente, hd-ocioso, que você pode baixar aqui , permitindo forçar a rotação de um disco após um lapso de tempo especificado. O programa foi desenvolvido especialmente para o Debian (mas funciona no Linux em geral), para que sua instalação seja muito fácil para você. Só espero que ele também funcione em uma arquitetura ARM, algo que não posso testar.

Edit: compila e instala corretamente no raspbian.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.