Thursday 21 March 2019

Force spin-down of external hard-drive on linux (raspberry pi)


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?



Answer



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

No comments:

Post a Comment

How can I VLOOKUP in multiple Excel documents?

I am trying to VLOOKUP reference data with around 400 seperate Excel files. Is it possible to do this in a quick way rather than doing it m...