[gelöst] hdparm kaputt? Wie mit systemd starten? (Jessie)

Hast Du Probleme mit Hardware, die durch die anderen Foren nicht abgedeckt werden? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
Benutzeravatar
mindX
Beiträge: 1541
Registriert: 27.03.2009 19:17:28
Lizenz eigener Beiträge: GNU General Public License

[gelöst] hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von mindX » 01.09.2014 19:31:27

Hallo,

mir ist gerade aufgefallen, dass meine Festplatte neuerdings rapide altert.

In /etc/hdparm.conf steht zwar

Code: Alles auswählen

/dev/sda {
	apm = 254
	apm_battery = 254
	spindown_time = 0
}
aber

Code: Alles auswählen

hdparm -B /dev/sda

/dev/sda:
 APM_level	= 128
smartctl -a /dev/sda verrät, dass in 5 Tagen knapp 800 Parkvorgänge dazugekommen sind. Per Debianrcconf hatte ich eingestellt, dass hdparm bei jedem Systemstart geladen wird, aber seitdem systemd in Jessie default ist, dürfte das ja irrelevant sein.

Mit der Konfiguration von systemd bin ich allerdings komplett überfordert. Systemadm sagt:
Bild
http://gallery.debianforum.de/var/album ... 1409593276

Hat jemand eine Idee, ob das okay ist bzw. wie ichs repariere falls nicht? Danke! :)
Zuletzt geändert von mindX am 04.09.2014 11:57:24, insgesamt 1-mal geändert.

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von smutbert » 01.09.2014 19:49:15

dass hdparm nicht läuft (Screenshot) ist, denke ich, normal, denn hdparm ist ja kein Dämon, der laufen soll, sondern ein Programm, das gestartet wird, das macht wozu es aufgerufen wurde und sich dann wieder beendet. Wundern würde mich eher, dass es unter systemd als .service-Unit läuft, denn die ist afaik für Dämonen da, aber ich bin weit davon entfernt das komplett zu durchblicken, also habe ich vielleicht auch Blödsinn geschrieben.

Zur eigentlichen Sache:
Geht es um einen Laptop, der auch hin wieder schlafen gelegt wird oder auch öfter nur mir Akku betrieben wird?

Denn einerseits wird nach dem Aufwachen hdparm nicht ausgeführt, d.h. der APM_level landet wieder beim Standardwert und andererseits ändert beim Übergang von Akku zu Netzversorgung oder umgekehrt das Skript /usr/lib/pm-utils/power.d/95hdparm-apm ebenfalls den APM_Level damit im Akkubetrieb die Festplatte durch das Parken uU Strom sparen kann und weniger empfindlich auf Erschütterungen reagiert.
  • Gegen das Problem mit dem Aufwachen hilft ein eigenes Skript in /etc/pm/sleep.d/, das beim Aufwachen ausgeführt wird und den APM_level setzt:
    viewtopic.php?t=142452&p=934109#p933447
  • und gegen den anderen Teil des Problems legt man einfach das hdparm Skript /usr/lib/pm-utils/power.d/95hdparm-apm lahm, indem man eine leere Datei erzeugt, siehe ein paar Beiträge weiter unten: viewtopic.php?t=142452&p=934109#p984776
Darüber hinaus gibt es auch noch ein paar andere Pakete/Programme/Dienste, die die eigenen Einstellungen stären können, zB Debianlaptop-mode-tools (die ebenfalls alle möglichen Werte ändern können) oder vielleicht auch die Einstellungen der Desktopumgebung (gnome-power-manager, xfce-power-manager,…).

maledora4

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von maledora4 » 01.09.2014 21:17:04

Das mit den Parkvorgängen der HDD war mit Einführung von systemd auch für mich ein Problem.
Früher hatte ich das mit einen entsprechenden Eintrag in der /etc/rc.local gelöst. Doch systemd führte die rc.local
nicht mehr aus.

Bei der Suche nach einer Lösung fand ich diesen Weg: https://thomas-leister.de/allgemein/arc ... t-systemd/
und systemd startet nun rc.local

Code: Alles auswählen

...
rfkill block bluetooth

hdparm -B 254 /dev/sda
wieder zu meiner vollsten Zufriedenheit. :wink:

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von catdog2 » 01.09.2014 22:40:42

dass hdparm nicht läuft (Screenshot) ist, denke ich, normal, denn hdparm ist ja kein Dämon, der laufen soll, sondern ein Programm, das gestartet wird, das macht wozu es aufgerufen wurde und sich dann wieder beendet. Wundern würde mich eher, dass es unter systemd als .service-Unit läuft, denn die ist afaik für Dämonen da, aber ich bin weit davon entfernt das komplett zu durchblicken, also habe ich vielleicht auch Blödsinn geschrieben.
Du hast Blödsinn geschrieben ja. Selbstverständlich geht auch das.
smartctl -a /dev/sda verrät, dass in 5 Tagen knapp 800 Parkvorgänge dazugekommen sind. Per Debianrcconf hatte ich eingestellt, dass hdparm bei jedem Systemstart geladen wird, aber seitdem systemd in Jessie default ist, dürfte das ja irrelevant sein.
Nein nicht unbedingt, systemd nudelt auch durch die init skripte und startet die, falls kein entsprechendes .service file vorhanden ist. Es scheint ja laut deinem Screenshot auch ausgeführt worden zu sein. Gibt
journalctl -u hdparm irgendwelche logeinträge aus bzw systemctl status hdparm , (was ähnlich wie diese gui Ausgabe sein sollte) noch irgendwas interessantes (z.B. exit status != 0)?
Das mit den Parkvorgängen der HDD war mit Einführung von systemd auch für mich ein Problem.
Früher hatte ich das mit einen entsprechenden Eintrag in der /etc/rc.local gelöst. Doch systemd führte die rc.local
nicht mehr aus.
Das ist ebenfalls seltsam in debian wird die weiterhin ausgeführt.
Unix is user-friendly; it's just picky about who its friends are.

Benutzeravatar
mindX
Beiträge: 1541
Registriert: 27.03.2009 19:17:28
Lizenz eigener Beiträge: GNU General Public License

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von mindX » 01.09.2014 23:51:39

Erstmal vielen Dank für euer Feedback! :)

Mittlerweile hab ich den ganzen Abend dran rumgebastelt, aber es will immer noch nicht....

Es geht um einen Desktop-Rechner (Lenovo M72e), der bei Nichtbenutzung über "System / Ausschalten / Bereitschaft" (Desktop: Mate) ins S2Ram geschickt wird. Einen Akku hab ich nicht dran, Stromversorgung läuft über ein normales Laptop-Netzteil.

Direkt nach dem booten hat hdparm auch den richtigen apm-Wert: 254. Nach dem Aufwachen sinds zuverlässig wieder 128.

Folgendes hab ich bisher ausprobiert:

@smutbert: Dein Script kopiert, gespeichert, chmod +x. Bei der Ausführung per Hand keine Auswirkungen, aber auch keine Fehlermeldung. Da der Rechner nie mit Akku betrieben wird, hab ich das Problem beim Wechsel der Stromquelle nicht.

Dann habe ich die laptop-mode-tools ausprobiert. Ebenfalls keine Auswirkungen, ausser, dass die Maus umgehend einschläft, ein Abschalten der "Automodule" mit Neustart konnte es nicht beheben, also weiter im Text.

tlp installiert. ( http://thinkwiki.de/TLP_-_Linux_Stromsparen ) Merkwürdigerweise schaltet tlp nach jedem Resume die Stromquelle auf Akku und - trotz manueller Konfiguration auf 254 auch im Akkubetrieb - immer wieder auf 128 um. Also weiter im Text.

@maledora4: Dein Hinweis hat mich auf das Wiki von Archlinux gebracht und da gibt es eine Anleitung zum troubleshooting: https://wiki.archlinux.org/index.php/Hdparm und hier https://bbs.archlinux.org/viewtopic.php?id=159233
Hat leider beides nichts gebracht, ebensowenig wie die udev-Regel...

Code: Alles auswählen

 man systemd-suspend.service
klang für mich eigentlich sehr vielversprechend, leider ohne Wirkung. Den Versuch mit rc.local spare ich mir für morgen abend auf... ;)

@catdog2:

Code: Alles auswählen

journalctl -u hdparm
-- Logs begin at Mi 2014-08-27 22:57:39 CEST, end at Mo 2014-09-01 23:09:49 CEST. --

Code: Alles auswählen

systemctl status hdparm
hdparm.service - LSB: Tune IDE hard disks
   Loaded: loaded (/etc/init.d/hdparm)
   Active: active (exited) since Mo 2014-09-01 23:08:27 CEST; 34min ago
  Process: 155 ExecStart=/etc/init.d/hdparm start (code=exited, status=0/SUCCESS)

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von catdog2 » 02.09.2014 00:24:39

Es geht um einen Desktop-Rechner (Lenovo M72e), der bei Nichtbenutzung über "System / Ausschalten / Bereitschaft" (Desktop: Mate) ins S2Ram geschickt wird. Einen Akku hab ich nicht dran, Stromversorgung läuft über ein normales Laptop-Netzteil.
Direkt nach dem booten hat hdparm auch den richtigen apm-Wert: 254. Nach dem Aufwachen sinds zuverlässig wieder 128.
Ah ok dann funktioniert es ja soweit, wird halt nur ein mal beim booten ausgeführt.
@maledora4: Dein Hinweis hat mich auf das Wiki von Archlinux gebracht und da gibt es eine Anleitung zum troubleshooting: https://wiki.archlinux.org/index.php/Hdparm und hier https://bbs.archlinux.org/viewtopic.php?id=159233
Hat leider beides nichts gebracht,
Eine systemd Lösung funktioniert vermutlich nur, wenn systemd zum in den standby schicken genutzt wird, evtl mal mit systemctl suspend ausprobieren obs da dann klappt.
Den Versuch mit rc.local spare ich mir für morgen abend auf... ;)
Wird dir bei dem suspend problem wohl nix helfen.
Dann habe ich die laptop-mode-tools ausprobiert. Ebenfalls keine Auswirkungen, ausser, dass die Maus umgehend einschläft, ein Abschalten der "Automodule" mit Neustart konnte es nicht beheben, also weiter im Text.
Musst du natürlich entsprechend deinen Anforderungen konfigurieren. Das mit der Maus liegt wohl am USB autosuspend, das können die Dinger immer nicht verünftig...
Unix is user-friendly; it's just picky about who its friends are.

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von smutbert » 02.09.2014 15:51:45

ich meine noch immer, dass sich das Problem, mit dem von mir vorgeschlagenen Skript in /etc/pm/sleep.d lösen lassen können sollte. Ich weiß jetzt nicht wie du es genannt hast, aber was passiert, wenn du es manuell mit dem Parameter resume (!) aufrufst?

Code: Alles auswählen

/etc/pm/sleep.d/deinskript resume
und welchen Wert liefert hdparm danach?


(Ach und mein Hinweis auf die laptop-mode-tools, war eigentlich weniger ein Lösungsvorschlag sondern viel mehr eine Idee, welche Dienste/Skripte sonst noch einen anderen APM_level setzen könnten, als man will.)

Benutzeravatar
mindX
Beiträge: 1541
Registriert: 27.03.2009 19:17:28
Lizenz eigener Beiträge: GNU General Public License

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von mindX » 02.09.2014 22:01:47

Code: Alles auswählen

/etc/pm/sleep.d/deinskript resume
funktioniert - hdparm liefert den Wert aus deinem Script :D

Wie kann ich das automatisieren?

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von smutbert » 02.09.2014 22:28:20

Naja, ich bin es so gewohnt, dass die Skripte in dem genannten Verzeichnis, genauso wie die unter /usr/lib/pm-utils/sleep.d/ automatisch vor dem Einschlafen und beim Aufwachen aufgerufen werden — beim Einschlafen mit hibernate bzw. suspend und beim Aufwachen mit resume bzw. thaw als Argument. Wieso das bei dir nicht der Fall ist und ob das vielleicht an Änderungen durch systemd liegt, weiß ich nicht, aber ich hoffe, dass wir das noch herausfinden.

Hast du die Debianpm-utils und Debianpowermgmt-base installiert?

Benutzeravatar
mindX
Beiträge: 1541
Registriert: 27.03.2009 19:17:28
Lizenz eigener Beiträge: GNU General Public License

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von mindX » 02.09.2014 23:38:43

Beides installiert. Was ich merkwürdig finde: tlp startet beim resume im Akku-Modus, obwohl kein Akku dranhängt. Das hat unter Squeeze immer höchst zuverlässig funktioniert.

Und das hier:

Code: Alles auswählen

# /etc/init.d/hdparm start
[ ok ] Starting hdparm (via systemctl): hdparm.service.
Wie kann ich herausfinden, welche Methode das System zum S2Ram benutzt? Vielleicht mal alles mit sysvinit runterwerfen, das krieg ich hier eh nicht mehr ans laufen?

PS: Auch ein systemctl suspend ergibt nach dem Aufwachen 128.

Frage: Weil die Festplatte wenigstens die Garantiezeit überleben soll, hab ich behelfsweise einen cronjob angelegt. Ist irgendwas gegen eine minütliche Ausführung von hdparm einzuwenden? Mehrfaches tägliches rebooten ist wegen der unberechenbaren Wartezeiten beim shutdown aktuell auch keine Alternative. :(

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von smutbert » 03.09.2014 10:03:19

Ok, du machst immer ein Suspend to Disk? Dann wird das Skript beim Aufwachen nämlich mit Parameter thaw und nicht mit resume aufgerufen — das würde erklären, wieso es nicht geht. Ich schlage zwei Änderungen vor:

Code: Alles auswählen

#!/bin/sh
case "$1" in
    thaw|resume)
        hdparm -B 254 /dev/sda
        echo "erfolgreich ausgefuehrt am $(date)" > /tmp/meinSkript.log
    ;;
esac
…also zusätzlich auf thaw reagieren und nicht nur auf resume und außerdem mit der echo… Zeile in eine Datei schreiben, dass und wann das Skript mit dem Parameter aufgerufen wurde, schließlich könnte es selbst bei der Ausführung von hdparm noch an etwas anderem scheitern.

Wie hast du das Skript eigentlich benannt? Ich bin mir nicht sicher, aber es könnte sein, dass die Dateiname mit 2 Zahlen beginnen muss, die festlegen in welcher Reihenfolge die Skripte in den beiden Verzeichnissen aufgerufen werden.

Benutzeravatar
mindX
Beiträge: 1541
Registriert: 27.03.2009 19:17:28
Lizenz eigener Beiträge: GNU General Public License

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von mindX » 03.09.2014 13:37:53

Ich mache grundsätzlich suspend-to-ram. Das script hab ich jetzt mal umbenannt, aber vielleicht sitzt der Fehler ja auch woanders, z.B. vor dem Bildschirm? :roll:

Hier mal ein kurzer Status-Quo:

Code: Alles auswählen

# cat /etc/pm/sleep.d/01-hdparm
#!/bin/sh
case "$1" in
        thaw|resume) hdparm -B 254 /dev/sda
echo "erfolgreich ausgefuehrt am $(date)" > /tmp/01-hdparm.log

 ;;

esac

Code: Alles auswählen

# ls -l /etc/pm/sleep.d/01-hdparm 
-rwxr-xr-x 1 root root 141 Sep  3 13:15 /etc/pm/sleep.d/01-hdparm

Code: Alles auswählen

# cat /etc/hdparm.conf 
quiet 
/dev/sda {
	apm = 254
	apm_battery = 254
	spindown_time = 0
}

Code: Alles auswählen

# hdparm -B /dev/sda  #NACH S2RAM
/dev/sda:
 APM_level	= 128

Code: Alles auswählen

# cat /tmp/01-hdparm.log
cat: /tmp/01-hdparm.log: Datei oder Verzeichnis nicht gefunden

Code: Alles auswählen

# dpkg -l | grep hdparm
ii  hdparm                                9.43-1.1                          amd64        tune hard disk parameters for high performance

Code: Alles auswählen

# dpkg -l | grep pm-utils
ii  pm-utils                              1.4.1-15                          all          utilities and scripts for power management

Code: Alles auswählen

# dpkg -l | grep powermg
ii  powermgmt-base                        1.31+nmu1                         all          Common utils and configs for power management

Code: Alles auswählen

# cat /etc/apt/sources.list
deb http://ftp.de.debian.org/debian/ jessie main contrib non-free 
deb-src http://ftp.de.debian.org/debian/ jessie main contrib non-free 

deb http://security.debian.org/ jessie/updates main contrib non-free 
deb-src http://security.debian.org/ jessie/updates main contrib non-free 

# jessie-updates, previously known as 'volatile'
deb http://ftp.de.debian.org/debian/ jessie-updates main contrib non-free 
deb-src http://ftp.de.debian.org/debian/ jessie-updates main contrib non-free

Code: Alles auswählen

# cat /etc/apt/apt.conf
APT::Install-Recommends "0";
APT::Install-Suggests "0";

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von smutbert » 03.09.2014 13:56:55

Hm, das gibt's doch nicht 8O
Auch wenn es wenig aussichtsreich ist (ich sehe keinen Fehler), schreib die echo Zeile einmal testweise vor die case-Abfrage.

ich werde das sobald ich dazu komme einmal auf meinem jessie ausprobieren…
______________

…so, ich glaube jetzt weiß ich ungefähr was los ist:

Die Desktopumgebung (zumindest mate, xfce und gnome) nutzt upower und das wiederum offensichtlich systemd oder gleich direkt systemd. systemd führt die Skripte aber nicht aus.
pm-suspend, pm-hibernate,… aus den pm-utils führen die Skripte aus, werden aber offensichtlich nicht oder kaum mehr genutzt.

Bei systemd kann man auch eigene Skripte ausführen, aber da ist es etwas komplizierter: https://wiki.archlinux.org/index.php/Po ... leep_hooks

Kurze Zusammenfassung: Man erstelle eine Datei /etc/systemd/system/root-resume.service

Code: Alles auswählen

[Unit]
Description=Local system resume actions
After=suspend.target

[Service]
Type=simple
ExecStart=/sbin/hdparm -B 254 /dev/sda

[Install]
WantedBy=suspend.target
(und vielleicht dasselbe mit angepaßten Dateinamen auch noch mit sleep.target statt suspend.target (?). Ich weiß nicht, wofür sleep.target eigentlich da ist.
Suspend to disk müsste hibernate.target heißen, aber auf meinem System habe ich kein hibernate.target gefunden — sonst hätte ich gesagt, dass du dafür auch eine solche Datei erstellen könntest.
Für den Anfang sollte das gepostete root-resume mit suspend.target genügen.)

schalte sie als root mit

Code: Alles auswählen

systemctl enable root-resume
„scharf“ und hoffe das beste.

Allerdings sage ich gleich, dass ich nicht weiß ob es genauso auch funktioniert. Weder kenne ich mich mit systemd besonders gut aus, noch bin ich mir sicher, wie sehr sich arch und Debian in solchen Punkten unterscheiden.

Benutzeravatar
mindX
Beiträge: 1541
Registriert: 27.03.2009 19:17:28
Lizenz eigener Beiträge: GNU General Public License

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von mindX » 04.09.2014 12:07:43

Herzlichen Dank! Das klappt auf Anhieb! :THX: :THX: :THX:
smutbert hat geschrieben:Die Desktopumgebung (zumindest mate, xfce und gnome) nutzt upower und das wiederum offensichtlich systemd oder gleich direkt systemd. systemd führt die Skripte aber nicht aus. pm-suspend, pm-hibernate,… aus den pm-utils führen die Skripte aus, werden aber offensichtlich nicht oder kaum mehr genutzt.
Das erklärt so einiges... aber es heisst wohl auch nicht umsonst "testing" ;)
Kurze Zusammenfassung: Man erstelle eine Datei /etc/systemd/system/root-resume.service

Code: Alles auswählen

[Unit]
Description=Local system resume actions
After=suspend.target

[Service]
Type=simple
ExecStart=/sbin/hdparm -B 254 /dev/sda

[Install]
WantedBy=suspend.target
schalte sie als root mit

Code: Alles auswählen

systemctl enable root-resume
„scharf“.
Genauso hab ichs gemacht und es klappt! Dem Rest deiner Hinweise werde ich kommende Woche nachgehen und mich auch noch im Arch-Wiki schlau machen.

Nochmals herzlichen Dank! :D :THX:

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: hdparm kaputt? Wie mit systemd starten? (Jessie)

Beitrag von JTH » 04.09.2014 13:18:27

smutbert hat geschrieben:und vielleicht dasselbe mit angepaßten Dateinamen auch noch mit sleep.target statt suspend.target (?). Ich weiß nicht, wofür sleep.target eigentlich da ist. […] Für den Anfang sollte das gepostete root-resume mit suspend.target genügen.
Laut manpage (man systemd.special) schließt sleep.target alle drei Energiesparvarianten (suspend, hybrid-sleep und hibernate) ein. Man könnte es hier also wohl statt suspend.target verwenden, um hdparm nach den beiden anderen Zuständen auch auszuführen.
smutbert hat geschrieben:Suspend to disk müsste hibernate.target heißen, aber auf meinem System habe ich kein hibernate.target gefunden — sonst hätte ich gesagt, dass du dafür auch eine solche Datei erstellen könntest.
Hmm merkwürdig, bei mir gibt es /lib/systemd/system/hibernate.target.
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: [gelöst] hdparm kaputt? Wie mit systemd starten? (Jessie

Beitrag von smutbert » 04.09.2014 14:36:32

Die Datei ist da, aber weder systemadm noch systemctl listen mir ein hibernate.target oder .service auf — auch nicht, wenn ich mir inaktive Units anzeigen lasse.

Antworten