# Gentoo ciągle wyłącza dysk w laptopie na baterii.

## spinerr

Proszę o pomoc w pilnej sprawie. Mam laptopa N410c z gentoo na dysku. Jeśli laptop pracuje na zasilczu to dysk ciągle się zatrzymuje. Zapis/odczyt, kilka sekund i stop, i tak w kółko. Co ciekawe dysk zapamiętuje to ustawienie - nawet po restarcie dalej tak się dzieje. Dysk zatrzymuje się obojętnie czy jest potem uruchomiony winXP, DOS, czy dysk będzie podpięty do kontrolera ATA-->USB. Jedyne co przywraca normalne działanie to włączenie zasilacza podczas gdy jest uruchomione gentoo. Na zasilaczu wszystko jest OK, nawet po restarcie i włączeniu potem windowsa na baterii dysk cały czas się kręci. Wygląda na to, że gentoo wysyła coś do dysku i ten to zapamiętuje. Dysk HM60HC w niecałe pól roku wykonał grubo ponad 40 000 cykli start/stop !!! Początkowo myślałem, że to problem z dyskiem, zmieniłem na nowy HM160HC i to samo. Po dwóch dniach całkiem nowy dysk ma 380 cykli start/stop! W gnome wyłączyłem opcję wstrzymywanie pracy dysków jeśli możliwe, ale nic nie dało (swoją drogą powinna tam być jakaś regulacja czasu). Oprócz tego na starcie systemu init odpala hdparma z opcją all_args="-S84". Czyli po 7 minutach stop.

Myślę, że można znaleźć winowajce podglądając komendy wysyłane do dysku, ale jak to zrobić?

Proszę o pomoc.

----------

## SlashBeast

Uzywasz laptop-mode?

Anyway, sprawdz czy 'hdparm -B 254 /dev/sda' rozwiazuje problem, u mnie netbook czesto wylaczal dysk, przy takich ustawieniach juz tego nie robi.

----------

## spinerr

Dzięki wielkie. Wygląda na to, że coś przestawia APM na 1. Bardzo ciekawi mnie czy to robi kernel, gnome czy coś innego. Domyślne ustawienie APM na najbardziej agresywny tryb to niezbyt rozsądne rozwiązanie.

Nie używam laptop-mode-tools.

Oto tabela prawdy APM którą znalazłem tutaj:

http://forum.hddguru.com/hddscan-logfile-t7429.html

Niestety wszystkie linki do strony samsunga nie działają, a seagate który przejął fabryki samsunga milczy na ich temat.

```

**APM

Decimal Level

0 Reserved

1 Minimum power consumption with Standby

2-127 Intermediate power management levels with Standby

128 Minimum power consumption without Standby

129-253 Intermediate power management levels without Standby

254 Maximum performance

255 Reserved

***Power Management standby timeout (Table 38)

0 Time-out disabled

1-240 (value * 5) seconds (i.e., 5 seconds to 1200 seconds)

241-251 ((value - 240) * 30) MINUTES (i.e., 30 minutes to 330 minutes)

252 minutes

253 Period between 8 hours and 12 hours

254 Reserved

255 21 min. 15 seconds

```

----------

## SlashBeast

Pewnie gnome ma jakis cudowny przelacznik dla laptopow i zmienia Ci apm. Kolejny powod by nie uzywac DE.

----------

## spinerr

nie wiem czy to gnome. Po uruchomieniu gentoo przełączyłem na pierwszą konsolę, wpisałem

```

/etc/init.d/xdm stop

```

a potem wyłączyłem zasilacz i niestety dalej to samo. Co jeszcze może to powodować?

I jeszcze coś: hdparm -B rozwiązuje problem, ale trzeba to wklepać zawsze po wyłączeniu zasilacza.

Na baterii APM przeskakuje na 1 czyli najbardziej brutalny tryb.

----------

## Garrappachc

Też miałem ten problem, rozwiązaniem jest utworzenie pustego pliku /etc/pm/power.d/harddrive, który jest skryptem nadpisującym /usr/lib/pm-utils/power.d. Pozostaje ustawić APM na 254 i śmiga  :Smile: 

----------

## spinerr

Skrypt ten wykonuje 4 operacje na dysku

-wyłącza/włącza pamięć podręczną zapisu (chroni przed utratą danych przy pracy na baterii, w momencie rozładowania ?)

-ustala czas spindown

-zmienia poziom naszego apm

-zmienia poziom acoustic management

Za realizację powyższych odpowiada hdparm.

Wydaje się, że lepszym rozwiązaniem będzie nie ignorowanie całego skryptu, a modyfikacja zmiennych.

Skąd ten skrypt wczytuje wartości $DRIVE_POWER_MGMT_AC i $DRIVE_POWER_MGMT_BAT ? Chyba nie sam z siebie?

oto zawartość pliku /usr/lib/pm-utils/power.d/harddrive:

```

#!/bin/sh

[ -x /sbin/hdparm ] || exit $NA

# Default values on AC

DRIVE_SPINDOWN_VALUE_AC="${DRIVE_SPINDOWN_VALUE_AC:-0}"

DRIVE_WRITE_CACHE_AC="${DRIVE_WRITE_CACHE_AC:-1}" 

DRIVE_POWER_MGMT_AC="${DRIVE_POWER_MGMT_AC:-254}"

DRIVE_ACOUSTIC_MGMT_AC="${DRIVE_ACOUSTIC_MGMT_AC:-0}"

# Default values on battery

DRIVE_SPINDOWN_VALUE_BAT="${DRIVE_SPINDOWN_VALUE_BAT:-6}"

DRIVE_WRITE_CACHE_BAT="${DRIVE_WRITE_CACHE_BAT:-0}" 

DRIVE_POWER_MGMT_BAT="${DRIVE_POWER_MGMT_BAT:-1}"

DRIVE_ACOUSTIC_MGMT_BAT="${DRIVE_ACOUSTIC_MGMT_BAT:-254}"

# Default devices to operate on

DRIVE_LIST="/dev/[hs]d[a-z]"

help() {

cat <<EOF

--------

$0: Control hard drive spindown, write caching, 

    power management and acoustic management.

This hook has 8 tuneable parameters:

DRIVE_SPINDOWN_VALUE_AC = time until a drive will spin down on AC

Defaults to 0, which disables drive spindown.

DRIVE_SPINDOWN_VALUE_BAT = time until a drive will spin down on battery

Defaults to 6, which will spin the drive down after 30 seconds of inactivity.

See the -S option on the hdparm manpage for more information.

DRIVE_WRITE_CACHE_AC = Whether the drive caches writes on AC

Defaults to 1, which means that the drive will cache writes internally.

DRIVE_WRITE_CACHE_BAT = Whether the drive caches writes on battery.

Defaults to 0 which means that the drive will not cache writes internally.

See the -W option on the hdparm man page for more information.

DRIVE_POWER_MGMT_AC = Drive Advanced Power Management value on AC

Defaults to 254 for max performance.

DRIVE_POWER_MGMT_BAT = Drive Advanced Power Management value on battery

Defaults to 1 for max power savings.

See the -B option on the hdparm man page

Drive acoustic management:

DRIVE_ACOUSTIC_MGMT_AC = Drive Acoustic Management value on AC

Defaults to 254 for max head speed.

DRIVE_ACOUSTIC_MGMT_BAT = Drive Acoustic Management value on battery

Defaults to 128 for max quietness.

See the -M option on the hdparm man page. 

Drives to manage:

DRIVE_LIST = the list of hard drives to manage.

Defaults to "/dev/[hs]d[a-z]", which will manage up to the first 25 drives.

EOF

}

harddrive_ac () {

    for dev in $DRIVE_LIST; do

   # disable write caching, do not spin down the drive, disable APM 

   # and acoustic management, and sync everything to drive.

   printf "Disabling hard drive power management for %s..." "$dev"

   hdparm -W $DRIVE_WRITE_CACHE_AC \

       -S $DRIVE_SPINDOWN_VALUE_AC \

       -B $DRIVE_POWER_MGMT_AC \

       -M $DRIVE_ACOUSTIC_MGMT_AC $dev >/dev/null 2>&1 \

       && echo Done. || echo Failed.

    done

}

harddrive_battery() {

    for dev in $DRIVE_LIST; do

   # disable write caching, enable acoustic management

   printf "Enabling power management for %s..." "$dev"

   hdparm -W $DRIVE_WRITE_CACHE_BAT \

       -S $DRIVE_SPINDOWN_VALUE_BAT \

       -B $DRIVE_POWER_MGMT_BAT \

       -M $DRIVE_ACOUSTIC_MGMT_BAT -F $dev >/dev/null 2>&1 \

       && echo Done. || echo Failed.

    done

}

case $1 in

    true) harddrive_battery ;;

    false) harddrive_ac ;;

    help) help;;

    *) exit $NA ;;

esac

exit 0

```

----------

