Systemd-Unit führt nach resume hdparm nicht aus

Hast Du Probleme mit Hardware, die durch die anderen Foren nicht abgedeckt werden? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von halo44 » 30.10.2017 15:46:09

Vorausschicken muss ich, daß ich in meinem Desktoprechner als zweite Festplatte eine HDD, die vorher in meinem Notebook installiert war, verbaut habe.

Nach dem Systemstart ist der APM_level der /dev/sdb richtig auf 254 eingestellt. Es findet kein Parken der Schreib-Lese-Köpfe statt. Allerdings hat sich sich dieser Wert nach Aufwecken aus dem Ruhezustand bzw. Tiefschlaf auf 96 eingestellt und damit finden die Parkvorgänge alle Minute (?) statt.

In Debian Jessie habe ich mit dieser Systemd-Unit (in /lib/systemd/system) den Wert automatisch wieder richtig stellen können:

Code: Alles auswählen

[Unit]
Description=Silence HD
After=suspend.target

[Service]
Type=oneshot
# Disable automatic head parking for one disk
ExecStart=/sbin/hdparm -B 254 /dev/disk/by-id/ata-WDC_WD5000BPVT-22HXZT1_WD-WXG1A21S2983

Install]
WantedBy=suspend.target basic.target
Mit Jessie habe ich den Ruhezustand (Suspend to RAM) verwendet und wenn der Zustand tatsächlich gelang (was nicht oft der Fall war), griff die Unit und der APM-Level wurde auf 254 gesetzt. Suspend to Disk lief bei mir unter Jessie garnicht.

Nun unter Stretch kann ich den Suspend to Disk ausführen, indem ich Debianrtcwake verwende:

Code: Alles auswählen

rtcwake -m disk -v -s $Sekunden
Das funktioniert auch zuverlässig und der Rechner startet nach dem geplanten Zeitraum bzw. läßt sich auch manuell per Powerknopf vorher aufwecken.

Was nicht mehr funktioniert, ist meine Systemd-Unit. Sie wird wohl beim Systemstart ausgeführt (egal, ob ich suspend.target oder hibernate.target in der Unit anspreche), aber sie wird anscheinend beim Aufwecken nicht angestossen.

Was mache ich da falsch? Muß ich irgend etwas in der /etc/hdparm.conf und/oder in /lib/systemd/system-sleep, was /usr/lib/pm-utils/power.d/95hdparm-apm anspricht, anpassen?

Für jede Hilfe bin ich dankbar.

Gruss H.

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

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von JTH » 30.10.2017 17:55:16

Hi,

wenn ich das auf die Schnelle richtig gesehen habe, hat das Debianhdparm-Paket ein paar Hooks (/lib/systemd/system-sleep/hdparm und /usr/lib/pm-utils/power.d/95hdparm-apm), um Optionen, die in /etc/hdparm.conf konfiguriert sind, von alleine nach Suspend oder Hibernate wieder zu setzen.

Du müsstest – in der Theorie – nur die hdparm.conf ergänzen, könntest auf einen extra Service verzichten. Für deinen Fall Folgendes in hdparm.conf anhängen:

Code: Alles auswählen

/dev/disk/by-id/ata-WDC_WD5000BPVT-22HXZT1_WD-WXG1A21S2983 {
	apm = 254
	apm_battery = 254 # Evtl. sogar überflüssig?
}
Das Suspend/Hibernate bei dir generell unzuverlässig funktioniert, ist damit natürlich nicht behoben ;)
Manchmal bekannt als Just (another) Terminal Hacker.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von halo44 » 30.10.2017 19:36:05

Danke für Deine Anregung. Leider ändert sich das Verhalten nicht. Sowohl mit aktivierter als auch disableter Service-Unit.

Gruss H.

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

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von JTH » 30.10.2017 23:50:05

Hmm. Was sagt dir denn

Code: Alles auswählen

# hdparm -B
für die Festplatte, wenn du nach einem Resume

Code: Alles auswählen

# /usr/lib/pm-utils/power.d/95hdparm-apm resume
von Hand ausführst? Die Zeile sollte von systemd eigentlich durch das Skript in /lib/systemd/system-sleep/hdparm nach dem Resume aufgerufen werden und hdparm dazu veranlassen, das APM der Platte wieder zu konfigurieren.

Diese Zeile

Code: Alles auswählen

	apm_battery = 254 # Evtl. sogar überflüssig?
darf laut manpage nicht so aussehen, falls du sie so übernommen hast. Der Kommentar ist da wohl nicht erlaubt.
Manchmal bekannt als Just (another) Terminal Hacker.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von halo44 » 31.10.2017 09:29:52

Von Hand ausgeführt

Code: Alles auswählen

# /usr/lib/pm-utils/power.d/95hdparm-apm resume
wird der APM-Level richtig gesetzt:

Code: Alles auswählen

/dev/sdb:
 APM_level      = 254
Jetzt müsste das nur noch automatisch nach resume laufen.

Sowohl /lib/systemd/system-sleep/hdparm als auch /usr/lib/pm-utils/power.d/95hdparm-apm
sind ausführbar. Vielleicht wird ersterem als $1 der Eintrag post nicht vermittelt?

Gruss H.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von rendegast » 31.10.2017 12:40:04

...
ExecStart=/sbin/hdparm -B 254 /dev/disk/by-id/ata-WDC_WD5000BPVT-22HXZT1_WD-WXG1A21S2983

Install]
WantedBy=suspend.target basic.target
Ist der typo bei "[Install]" auch in der unit-Datei?
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von halo44 » 31.10.2017 13:36:53

@ rendegast

Nein, den Fehler habe ich nach dem Post in der Unit behoben.

Gruss H.

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

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von JTH » 31.10.2017 14:09:15

halo44 hat geschrieben: ↑ zum Beitrag ↑
31.10.2017 09:29:52
Vielleicht wird ersterem als $1 der Eintrag post nicht vermittelt?
Du könntest testweise in /lib/systemd/system-sleep/hdparm als zweite Zeile folgendes ergänzen:

Code: Alles auswählen

echo "/usr/lib/systemd/system-sleep/hdparm: $@"
Dann solltest du, wenn alles richtig läuft, nach Suspend + Resume sowas sehen können:

Code: Alles auswählen

root@<snipp>:/home/<snipp># journalctl -u systemd-suspend
-- Logs begin at Tue 2017-10-31 13:46:31 CET, end at Tue 2017-10-31 14:05:07 CET. --
Oct 31 14:04:53 <snipp> systemd[1]: Starting Suspend...
Oct 31 14:04:53 <snipp> systemd-sleep[2948]: /usr/lib/systemd/system-sleep/hdparm: pre suspend
Oct 31 14:04:53 <snipp> systemd-sleep[2948]: Suspending system...
Oct 31 14:04:57 <snipp> systemd-sleep[2948]: System resumed.
Oct 31 14:04:57 <snipp> systemd-sleep[2948]: /usr/lib/systemd/system-sleep/hdparm: post suspend
Oct 31 14:04:57 <snipp> systemd[1]: Started Suspend.
Manchmal bekannt als Just (another) Terminal Hacker.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von halo44 » 31.10.2017 14:46:08

Es finden sich keine Einträge:

Code: Alles auswählen

journalctl -u systemd-suspend
-- No entries --
Gruss H.

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

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von JTH » 31.10.2017 18:15:44

Du hattest geschrieben, dass du rtcwake verwendest -

Code: Alles auswählen

# systemctl suspend
bzw.

Code: Alles auswählen

# systemctl hibernate
funktionieren bei dir tatsächlich gar nicht? Die sollten (doch hoffentlich) diese Hooks ausführen.
Manchmal bekannt als Just (another) Terminal Hacker.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von halo44 » 31.10.2017 18:28:59

JTH hat geschrieben: ↑ zum Beitrag ↑
31.10.2017 18:15:44
Du hattest geschrieben, dass du rtcwake verwendest ...
Ja, weil das immer funktioniert.

Code: Alles auswählen

# systemctl suspend
bzw.

Code: Alles auswählen

# systemctl hibernate
funktionieren zu mehr als 90% der Versuche nicht, d.h. der Monitor wird kurz dunkel, dann bootet der Rechner sofort wieder neu.

Gruss H.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von halo44 » 31.10.2017 20:03:45

Ich vermute, daß mein Problem damit zusammenhängt, daß ich Debianrtcwake benutze, um meinen Rechner in Tiefschlaf zu versetzen. Beim Wiederaufwecken wird das Skript in /lib/systemd/system-sleep/hdparm nicht aufgerufen, weil der Rechner durch eine "andere" Methode suspendiert wurde.

Derzeit lege ich den Rechner manuell schlafen. Daher ist es natürlich kein Problem den APM-Level beim manuellen Aufwecken anzupassen.

Anders, wenn ich beim rtcwake einen konkreten Zeitpunkt festlege, zu dem der Rechner aufgeweckt werden soll. Dies ist täglich der Fall, wenn der Rechner online sein soll, wenn mein NAS sich zwecks Sicherung der Datenpartitionen mittels Debiandirvish bei ihm meldet. Da dieser Zeitpunkt feststeht, werde ich eine Minute nach diesem Zeitpunkt einen cronjob starten, der den Zustand des APM-Levels prüft und diesen gegebenfalls korrigiert.

Somit habe ich das "Problem" zunächst umgangen, bin aber trotzdem weiter an alternativen Lösungen interessiert.

Gruss H.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von scientific » 31.10.2017 20:44:28

Wenn suspend nicht zufriedenstellend klappt, probier dich mal hier mit Debugmethoden zu orientieren.

https://01.org/blogs/rzhang/2015/best- ... ate-issues
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von halo44 » 01.11.2017 14:11:01

scientific hat geschrieben: ↑ zum Beitrag ↑
31.10.2017 20:44:28
Wenn suspend nicht zufriedenstellend klappt, probier dich mal hier mit Debugmethoden zu orientieren.

https://01.org/blogs/rzhang/2015/best- ... ate-issues
Danke für den Link. Hier finde ich eigentlich passend zum Verhalten meines Rechners den Punkt 4.4.1:
Screen goes dark, and a fresh boot starts without users doing anything.
Hierzu passend die Einträge im Journal:

Code: Alles auswählen

Nov 01 13:35:42 dt-debian systemd[1]: Reached target Sleep.
Nov 01 13:35:42 dt-debian systemd[1]: Starting Hibernate...
Nov 01 13:35:42 dt-debian kernel: PM: Hibernation mode set to 'platform'
Nov 01 13:35:42 dt-debian systemd-sleep[2282]: Suspending system...
-- Reboot --
Nov 01 13:37:57 dt-debian kernel: Linux version 4.9.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18) ) #1 SMP Debian 4.9.51-1 (2017-09-28)
Für diesen Fall wird in 4.4.2 ausgeführt:
Check if this is a regression.
Check if this is a graphics issue.
Check if this is a driver specific issue.
If no, file a suspend/hibernate bug ...
Schon beim ersten Punkt der zu checken ist: regression fällt mir auch nach der Lektüre von 3.1 nichts ein. Ein Kernelupdate fand natürlich bei der Neuinstallation von Stretch statt. Allerdings scheiterte Suspend/Hibernate schon bei Jessie mit einem älteren Kernel.

Was bei 3.2.1 unter graphics issue geschildert ist, passt nicht zum Verhalten meines Rechners, obwohl das passen würde zu anderen Problemen, die ich unter Stretch mit meiner AMD Radeon GPU habe.

Schließlich übersteigt leider das Checken eines driver issues meine Fähigkeiten, was auch für das angeregte Erstellen eines Bugreports gilt.

Gruss H.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von halo44 » 01.11.2017 14:23:55

Ich sollte folgendes noch zu dem in meinem letzten Post dokumentierten Beispiel ergänzen:

Obwohl die Session mit der Bootoption initcall_debug gestartet wurde, findet sich im Journal zum Zeitpunkt des versuchten Hibernate keine weitere Meldung. Der gezeigte Ausschnitt des Journals ist hier wirklich komplett zwischen Hibernate und Neustart.

Allerdings sieht man, daß zwischen den Einträgen eine Pause von mehr als 2 Minuten besteht. In dieser Pause war der Monitor lange dunkel, dann folgten etliche Meldungen und auch die Fortschrittsanzeige der Dekomprimierung und dann wieder lange ein dunkler Monitor, bis schließlich der Rechner neu bootete.

Gruss H.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von scientific » 03.11.2017 09:20:17

Ich habe ja ebenfalls Poweprobleme...
Beim Suspenden schaltet sich der Rechner manchmal ganz ab.

Deshalb bin ich auf diese Seite gestoßen.

Ich hab auch noch nicht ganz rausgefunden, wie das alles anwendet.

Was gelegentlich klappt ist, wenn ich suspende, bleiben am Schirm Meldungen stehen, die nicht mehr ins Log geschrieben werden.
Anhand so einer Meldung fand ich raus, dass ich mal ein selbstgeschriebenes Skript, welches systemd ausführen soll, von mir verschoben wurde, ohne den Pfad in der Unit anzupassen.

Aber das ist auch nicht die Ursache gewesen.

Mir fehlt leider momentan auch der Nerv und die Zeit dafür.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
shevegen
Beiträge: 416
Registriert: 30.03.2004 00:32:53

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von shevegen » 13.11.2017 22:28:36

> Mir fehlt leider momentan auch der Nerv und die Zeit dafür.

Den Eindruck hatte ich bei systemd überhaupt.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von scientific » 14.11.2017 08:54:07

Da war doch was...
Ich vermute, daß mein Problem damit zusammenhängt, daß ich Debianrtcwake benutze, um meinen Rechner in Tiefschlaf zu versetzen. Beim Wiederaufwecken wird das Skript in /lib/systemd/system-sleep/hdparm nicht aufgerufen, weil der Rechner durch eine "andere" Methode suspendiert wurde.
Das wird wahrscheinlich auch der Grund sein.
Wenn du in den Spülkasten am Klo einen Wasserschlauch aufgedreht reinhältst, und der geht dann über, ist da die im Spülkasten installierte Schwimmervorrichtung kaputt?

Bei deiner Argumentation wäre der Schwimmer kaputt...
Warum suspendest du nicht mit

Code: Alles auswählen

 systemctl suspend
? Das funktioniert auch als User.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Systemd-Unit führt nach resume hdparm nicht aus

Beitrag von halo44 » 14.11.2017 19:49:09

scientific hat geschrieben: ↑ zum Beitrag ↑
14.11.2017 08:54:07
...
Warum suspendest du nicht mit

Code: Alles auswählen

 systemctl suspend
? Das funktioniert auch als User.
Nein, das bringt zu 90% bei mir den gleichen Fehler, d.h. Monitor wird kurz schwarz, die Fans laufen weiter und der Rechner bootet neu.

Gruss H.

Antworten