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

13

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 será desativado quando estiver ocioso.

Já experimentei as dicas fornecidas em 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 diminuição da unidade.

Eu uso o seguinte hardware:

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

É possível que os sinais de giros enviados sejam em algum lugar sobrescritos / perdidos / ignorados?

    
por user258346 29.09.2013 / 13:29

3 respostas

2

Eu não tive sorte com o hd-idle; correu mas não funcionou. Acabei escrevendo o roteiro 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
    
por 15.02.2014 / 22:16
5

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

O acordo é 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 / escrita / busca traduzem o tempo todo, os mais exóticos spin up / down não. A maioria das fichas não faz isso. Além disso, NÃO há uma API de nível de chip universal. Então, se eu escrevesse o código, eu teria que ter um manual de programação para o chip ponte USB.

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

    
por 21.10.2013 / 23:02
5

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

sudo hdparm -I /dev/sdX

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

Por sorte, há um utilitário muito conveniente, hd-ocioso, que você pode baixar aqui , permitindo que você force um disco gira depois de algum 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ê. Eu só espero que ele também funcione em uma arquitetura ARM, algo que não posso testar.

Edit: ele compila e instala corretamente no raspbian.

    
por 22.10.2013 / 10:35