123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #! /bin/sh
- #
- # This script adjusts hard drive APM settings using hdparm. The hardware
- # defaults (usually hdparm -B 127) cause excessive head load/unload cycles
- # on many modern hard drives. We therefore set hdparm -B 254 while on AC
- # power. On battery we set hdparm -B 128; this still does not guarantee
- # disk parking, but is safer than causing lots of mechanical wear on disks
- # as we seem to get currently with 127.
- #
- # Refactored from acpi-support's 90-hdparm.sh for pm-utils
- if grep -wq "nohdparm" /proc/cmdline ; then
- exit 0
- fi
- # Do nothing when called via /etc/init.d/acpi-support; udev rules take care
- # of setting the initial hdparm policy for us.
- if ([ "$previous" ] && [ "$runlevel" ]) || [ "$runlevel" = S ]; then
- exit 0
- fi
- if [ -e /usr/sbin/laptop_mode ] ; then
- LMT_CONTROL_HD_POWERMGMT=$(. /etc/laptop-mode/laptop-mode.conf && echo "$CONTROL_HD_POWERMGMT")
- if [ "$LMT_CONTROL_HD_POWERMGMT" != 0 ] \
- && [ -e /var/run/laptop-mode-tools/enabled ]
- then
- # Laptop mode controls hdparm -B settings, we don't.
- exit 0
- fi
- fi
- . /lib/hdparm/hdparm-functions
- resume_hdparm_apm()
- {
- for dev in /dev/sd? /dev/hd? ; do
- apm_opt=
- if [ -b $dev ] && hdparm_try_apm $dev ; then
- for option in $(hdparm_options $dev); do
- case $option in
- -B*)
- apm_opt=$option
- ;;
- *)
- ;;
- esac
- done
- if [ -n "$apm_opt" ]; then
- hdparm $apm_opt $dev
- fi
- fi
- done
- }
- resume_hdparm_spindown()
- {
- for dev in /dev/sd? /dev/hd? ; do
- # Check for force_spindown_time option
- # If defined apply hdaprm -S even if APM is not supported
- # See also #758988
- ignore_apm=
- options=$(hdparm_options $dev)
- case $options in
- (*'force_spindown_time'*)
- ignore_apm='true'
- ;;
- esac
- apm_opt=
- if [ -b $dev ]; then
- if hdparm_try_apm $dev || [ "$ignore_apm" = true ] ; then
- for option in $(hdparm_options $dev); do
- # Convert manually introduced option "force_spindown_time"
- # back to "-S" understandable by hdparm
- option=$(echo $option| sed 's/force_spindown_time/-S/')
- case $option in
- -S*)
- apm_opt=$option
- ;;
- *)
- ;;
- esac
- done
- if [ -n "$apm_opt" ]; then
- hdparm $apm_opt $dev
- fi
- fi
- fi
- done
- }
- case "$1" in
- true|false) # powersaving on/off
- resume_hdparm_apm
- ;;
- thaw|resume)
- resume_hdparm_apm
- # only set the -S option on resuming, not necessary for power.d
- resume_hdparm_spindown
- ;;
- *)
- exit 254
- ;;
- esac
|