Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I'm currently setting up a home-server using a Raspberry Pi with an external hard-disk connected via usb. However, my hard-drive will never spin down when being idle.

I tried already the hints provided at raspberrypi.org ... without any success.

1.)

sudo hdparm -S5 /dev/sda

returns

/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

returns

/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

...and 3.)

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

returns

/dev/sda: HDD         1234

... without spin-down of the drive.

I use the following hardware:

  • Inateck FDU3C-2 dual Ports USB 3.0 HDD docking station
  • Western Digital WD10EZRX Green 1TB

Is it possible, that the sent spin-down-signals are somewhere overwritten/lost/ignored?

share|improve this question
1  
Update: The menioned Inateck docking station has a functionality to clone hard drives, providing a master/source and a slave/sink port for HDDs. When plugging the HDD to the slave port the commands, mentioned above, workout. This limits the problem of missing spin-down to the master port. –  user258346 Oct 15 '13 at 16:54
    
If you think this is solution, you should accept your own solution. Corny though it may seem, it is useful for future readers with the same problem. –  MariusMatutiae Oct 22 '13 at 11:20
    
You do realize, of course, that the command you use in your script is the very same you stated was not working, right? hdparm -y /dev/sda... –  MariusMatutiae Apr 22 at 7:42
add comment

3 Answers

up vote 2 down vote accepted

I didn't have luck with hd-idle; it ran but didn't function. I ended up writing the script below:

#!/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
share|improve this answer
add comment

It is entirely possible that the signals you are sending are neglected. You did not provide the output of

sudo hdparm -I /dev/sdX

which would have told us the disk capabilities, but many disks simply do not respond to these commands.

Luckily, there is a very convenient utility, hd-idle, which you can download from here, allowing you to force a disk spin down after some specified lapse of time. The program has been developed especially for Debian, (but it works on Linux in general), so that its installation should be very easy to you. I just hope it also works on an ARM architecture, something which I cannot test.

Edit: it compiles and installs correctly on raspbian.

share|improve this answer
add comment

Yes, it is possible but will require some custom development work and not trivial and the code is going to be specific to the USB->SATA bridge chip INSIDE of your enclosure.

The deal is that the USB bridge serves as more than an electrical convertor. A USB-attached HDD emulates a SCSI drive which has a different command set. While the standard read/write/seek commands translate all the time the more exotic spin up/down do not. Most chips won't do that. Furthermore there is NOT a universal chip level API. So If I wrote the code I would have to have a programming manual for the USB bridge chip.

Bottom line, unless you have programming specifics on the chip and are familiar with the ATA and SCSI instruction set and encapsulating pass-through commands, then you're just going to have to do without. Too much work and no standard.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.