AlaK4X
Linux lhjmq-records 5.15.0-118-generic #128-Ubuntu SMP Fri Jul 5 09:28:59 UTC 2024 x86_64



Your IP : 3.147.103.33


Current Path : /lib/pm-utils/power.d/
Upload File :
Current File : //lib/pm-utils/power.d/95hdparm-apm

#! /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