“UbuntuHelp:ExternalDriveStandby”的版本间的差异
来自Ubuntu中文
小 |
小 |
||
第73行: | 第73行: | ||
</nowiki></pre> | </nowiki></pre> | ||
The above would cause external drives to spin-down after 25-27 min of inactivity. Even though 25 min (1500 sec) is specified, the internal delay loop can add a couple minutes to the reaction time. | The above would cause external drives to spin-down after 25-27 min of inactivity. Even though 25 min (1500 sec) is specified, the internal delay loop can add a couple minutes to the reaction time. | ||
+ | Use: | ||
+ | <pre><nowiki> | ||
+ | sg_start --pc=3 /dev/sda | ||
+ | </nowiki></pre> | ||
+ | ..for "standby" mode, which still causes the disc to spin down but allows it to automatically spin back up when accessed. | ||
Enjoy! | Enjoy! | ||
---- | ---- |
2010年5月19日 (三) 22:18的最新版本
点击翻译: |
English |
请不要直接编辑翻译本页,本页将定期与来源同步。 |
Automatic Spin-Down For Idle External Hard Drives
It is often desirable to have external hard drives - such as those attached by USB and Firewire - spin down into a power-saving or 'standby' mode after a certain period of inactivity. Since these external drives cannot have their standby parameters set with 'hdparm' (which only handles IDE devices and not the pseudo-SCSI ones), some way other than the built-in method is required to make these drives spin down.
Requirements
K/Ubuntu 7.04 or later; The 'sg3-utils' package.
The Script
Save the following code as 'scsi-idle' and set the execute flag for it: Note: You must delete the space before the #!/bin/bash on line 1.
#!/bin/bash declare -a DID declare -a DSTATUS declare -a DTIME declare -a DOFF interval=$1 sleepval=120 buspath=/sys/bus/scsi/devices while [ true ]; do thetime=`date +%s` for scsidev in $( ls --format=across $buspath ); do if devenum="$( ls ${buspath}/${scsidev} | grep 'block:' )"; then devdir=$buspath/$scsidev/$devenum read devsize < ${devdir}/size read devremove < ${devdir}/removable if [ $devremove -eq 0 ] && [ $devsize -gt 0 ]; then # device is the right type read newstat < ${devdir}/stat hhit=0; listlen=${#DID[@]} #; echo $listlen $scsidev for ((i=0;i<$listlen;i++)); do if [ ${DID[$i]} = $scsidev ]; then if [ "${DSTATUS[$i]}" = "$newstat" ]; then if [ $[ ${thetime} - ${DTIME[$i]} ] -ge $interval ] \ && [ ${DOFF[$i]} -eq 0 ]; then sg_start --pc=5 /dev/${devenum:6} # put into sleep mode # sg_start --stop /dev/${devenum:6} # alternate method echo stop /dev/${devenum:6} DTIME[$i]=$thetime DOFF[$i]=1 fi else DSTATUS[$i]=$newstat DTIME[$i]=$thetime DOFF[$i]=0 fi hhit=1; break fi done if [ $hhit -eq 0 ]; then # add new drive to watch list DID[$listlen]=$scsidev DSTATUS[$listlen]=$newstat DTIME[$listlen]=`date +%s` DOFF[$listlen]=0 fi fi fi done sleep $sleepval done
Run it in the background like this:
$ sudo ./scsi-idle 1500 &
The above would cause external drives to spin-down after 25-27 min of inactivity. Even though 25 min (1500 sec) is specified, the internal delay loop can add a couple minutes to the reaction time. Use:
sg_start --pc=3 /dev/sda
..for "standby" mode, which still causes the disc to spin down but allows it to automatically spin back up when accessed. Enjoy!