Jump to content

Spindown für bestimmten Zeitraum deaktivieren


Patty92

Recommended Posts

Grüße in die Runde.

Folgende Idee kam mir heut in den Sinn:

Ist es möglich wie im Titel beschrieben den Spindown für einen bestimmten Zeitraum zu deaktivieren?

Gedanke ist, wenn das Array / eine bestimmte Platte genutzt wird, diese Tagsüber (z.B. von 10 - 22 Uhr) aktiv zu lassen.

Nach 22 Uhr soll dann ganz normal der Spindown wieder funktionieren.

 

An sich denke ich mal könnte man das ganze vielleicht über User Script lösen.

Z.B. prüfe ob eine Platte aktiv ist, wenn ja, setzte Spindown für die Platte auf "Nie", nach 22 Uhr zurück auf 30 Minuten.

 

Eine andere Idee wäre zu prüfen ob eine Platte aktiv ist, wenn ja, löse z.B. aller 25 Minuten einen "Lesebefehl" auf der Platte aus um die Spindown-Zeit zurückzusetzen, nach 22 Uhr kein Lesen mehr über das User Script.

 

Ich hoffe man versteht die Idee / den Gedanken.

 

Grüße Patty

 

Edited by Patty92
Link to comment
4 hours ago, Revan335 said:

Es gibt die Spindown Verzögerung in den Disk Einstellungen.

Diese nutze ich derzeit auch, mit der Einstellung 60 Minuten.

 

Folgendes Beispiel, wieso ich auf diese Idee komme:

 

- Eltern gucken einen Film von 10.00 - 12.00

- Ruhezeit

- Ich gucke von 16.00 - 18.00 Serie

- Ruhezeit

- Ich gucke erneut Serie von 20.00 - 22.00

 

Nun könnte man ja sagen, man erhöht den Spindown auf 3h, dann würde die Platte aber noch bis 1.00 Uhr laufen.

 

Für das Szenario würden ja auch verschiedene Sachen funktionieren, Tagsüber Spindown ausschalten, Abends wieder auf 1h.. oder Tagsüber auf 3h, nach 22 Uhr wieder auf 1h.

 

Interessant wäre hier, ob und wie man über Script die Spindown Zeit einer Platte anpassen kann.

 

So wirklich habe ich dazu im Forum leider nichts gefunden.

Link to comment
1 hour ago, Patty92 said:

- Eltern gucken einen Film von 10.00 - 12.00

- Ruhezeit

- Ich gucke von 16.00 - 18.00 Serie

- Ruhezeit

- Ich gucke erneut Serie von 20.00 - 22.00

 

Dein/Euer Sehverhalten lässt sich in ein solcher Raster pressen? Und wofür dann der ganze Zinober? Für ein paar Watt?

 

Womit streamst Du? Mit Plex? Plex Streams lassen sich mit ein paar Zeilen Python Skript analysieren. Wie viele Streams? Lokales oder remote Playback? Ist es ein Film, eine Episode, ein Musiktitel? Welche Datei (Disk)? Da würde ich ansetzen. Kannst Dich benachrichtigen lassen um manuell runterzufahren oder -raufzufahren oder Spinup-/-down automatisiert durchzuführen. Letzteres habe ich noch nie gemacht, ich weiß auch nicht wie oder ob es geht. Ich tippe aber mal, dass man das hinbekommen könnte.

 

Edited by hawihoney
Link to comment
On 8/3/2022 at 1:24 AM, Patty92 said:

vielleicht über User Script lösen.

Würde ich vermutlich so machen. Passende Cronzeit wählen und einen Sektor von der Disk lesen:

 

dd if=/dev/sde of=/dev/null bs=512 count=1 iflag=direct

 

Das "sde" steht im Dashboard bei der entsprechenden Disk. Kann zb auch "sdc" sein, je nachdem welche Disk anfahren soll.

 

On 8/3/2022 at 1:24 AM, Patty92 said:

Eine andere Idee wäre zu prüfen ob eine Platte aktiv ist, wenn ja, löse z.B. aller 25 Minuten einen "Lesebefehl" auf der Platte aus

Das macht keinen Sinn. Aktiv heißt ja jemand liest ;)

 

Alternativ könnte man auch auf dem Client den regelmäßigen Lesezugriff auslösen.  Kommt aber darauf an was für ein Client das ist. Zb Windows könnte über SMB alle 15 Minuten eine leere Datei überschreiben.

 

Letzte Lösung: Größere SSD kaufen?

Link to comment

Danke euch zunächst für euer Feedback.

 

22 hours ago, jj1987 said:

Wozu überhaupt das ganze? Hast du Angst wegen der Spinup-Cycles? Da sind seitens der Hersteller 50000 garantiert. Das muss man erstmal schaffen, bei 5 Jahren Garantiezeitraum wären das 10000 pro Jahr, das macht ca 27 pro Tag!

So hätte ich das natürlich auch sehen können, dann sind die 3-4 Spinups, die es bei mir werden könnten natürlich ein Witz.

 

21 hours ago, hawihoney said:

Dein/Euer Sehverhalten lässt sich in ein solcher Raster pressen? Und wofür dann der ganze Zinober? Für ein paar Watt?

Nein, an sich nicht, das war jetzt wirklich nur ein Beispiel wie es aussehen könnte.

Mir ging es hier wirklich um den Spinup Count, aber durch die Erläuterung von @jj1987 sollte ich hier vielleicht einfach mal einen Gang runter schalten. ^^
 

2 hours ago, mgutt said:

dd if=/dev/sde of=/dev/null bs=512 count=1

Das geht in die Richtung, wie ich es mir vorgestellt hatte 😀

Im Netz habe ich noch „hdparm“ gefunden, sodass ich im Vorfeld prüfen kann, ob die Platte aktiv ist oder nicht.

 

… naja wie oben schon gesagt, habe ich das aber wohl auch etwas zu verbissen gesehen. Die 3 - 4 Spindowns die am Tag zu Stande kommen könnten werde ich erstmal so hinnehmen.

 

Aus Neugier werde ich es demnächst mal mit dem Ansatz von @mgutt probieren.

 

Nochmals großen Dank an euch und ein schönen Wochenende, wünscht Patty

 

Link to comment
15 minutes ago, Patty92 said:

Im Netz habe ich noch „hdparm“ gefunden, sodass ich im Vorfeld prüfen kann, ob die Platte aktiv ist oder nicht.

Was soll das bringen? "Active" heißt, dass der Kopf in Bewegung ist. Also gerade Dateien gelesen oder geschrieben werden. In dem Zustand wird die Disk von Unraid ja eh nicht in den Spindown versetzt. Wenn der Kopf dagegen parkt und in "Idle" geht, fängt quasi der Countdown von Unraid an. Aber auch das zu wissen bringt dir nichts, weil der ja bei Aktivität ständig zwischen Active und Idle wechselt. Je nach HDD Modell parkt der Kopf bei Inaktivität nach 1 bis 10 Minuten. Bei Seagate zB nach 2 Minuten:

image.png.73bb85d882b488fb5fd1862a9d38a624.png

 

Also einfach einen Sektor lesen ist schon ausreichend um den Countdown von Unraid zurückzusetzen. So viel ich weiß nutzt Unraid den Read/Write Zähler der HDD als Trigger und nicht den Active/Idle Zustand:

image.png.b025d59d42b429647840f29589238eeb.png

 

Ich glaube der Wert kommt aus Unraids fuse.sshfs, bin ich aber nicht sicher.

Link to comment

Ich habe mal eine "kleine / alte" Platte zum probieren per UD angeschlossen.

 

dd if=/dev/sdd of=/dev/null bs=512 count=1

Weckt zwar die Platte auf, setzt aber nicht den Countdown zurück und die Platte geht wieder in den Spindown.

 

In einem anderen Beitrag habe ich doch noch eine ähnliche Konstellation gefunden und es wurde folgender Vorschlag erwähnt:

smartctl -a /dev/sdd > /dev/null

 

Leider hier das gleiche, ist die Platte im Standby wird diese durch den Befehl zwar geweckt und ist aktiv, führe ich den Befehl dann aber ein paar Minuten später erneut aus setzt das nicht den Countdown zurück.

 

Ich dachte mir noch, man könnte ja versuchen eine Datei zu lesen:

 

cat "/mnt/disks/xxxxxxxx/Dokumente/Beispiel.txt"

 

..leider brachte das aber auch nicht den gewünschten Erfolg.

 

Hier noch kurz eine Zusammenfassung, wie das ganze ungefähr aussah:

 

# Standard Datentäger Ruhezustandsverzögerung: 15 Minuten

# Beispiel 1
14.45 : SpinUp HDD (sdd) - manuell
14:51 : dd if=/dev/sdd of=/dev/null bs=512 count=1
15.00 : SpinDown HDD (sdd)

# Beispiel 2
15.03 : SpinUp HDD (sdd) - manuell
15:07 : smartctl -a /dev/sdd > /dev/null
15.18 : SpinDown HDD (sdd)

# Beispiel 3
15.25 : SpinUp HDD (sdd) - manuell
15:29 : cat "/mnt/disks/xxxxxxxx/Dokumente/Beispiel.txt"
15.40 : SpinDown HDD (sdd)

# Beispiel 4
15.45 : SpinUp HDD (sdd) - mit Befehl (dd if=/dev/sdd of=/dev/null bs=512 count=1)
15:49 : dd if=/dev/sdd of=/dev/null bs=512 count=1
16.00 : SpinDown HDD (sdd)

# Beispiel 5
16.05 : SpinUp HDD (sdd) - mit Befehl (smartctl -a /dev/sdd > /dev/null)
16:07 : smartctl -a /dev/sdd > /dev/null
16.20 : SpinDown HDD (sdd)

 

Vielleicht ist es noch von Relevanz, das sich der Read / Write Zähler nicht verändert hat und die Werte bei bei allen 3 Befehlen nicht "hochgezählt" haben.

Edited by Patty92
Link to comment
  • 2 weeks later...
11 minutes ago, Patty92 said:

 

Bei diesem Befehl kommt es leider zum Fehler: "dd: failed to open '/dev/null': Invalid argument"

 

 

Statt oflag=direct sollte es wahrscheinlich iflag=direct heißen, oflag betrifft den output, iflag den input und es ist ja der input der nicht aus dem cache kommen soll, sondern direkt von der Festplatte. :)

Edited by Crovaxon
typo
  • Thanks 1
Link to comment

Ok, dann versuch mal so:

 

dd if="$(find /mnt/disk1 -type f 2>/dev/null | head -n 1)" of=/dev/null count=1 iflag=direct

 

In dem Fall sucht "find" nach einer Datei und genau aus dieser werden die ersten 512 Bytes gelesen. Und iflag erzwingt wie gehabt, dass der RAM genutzt wird und da wir /mnt/disk1 als Quelle nutzen, hoffe ich, dass das diesmal den Counter hochsetzt.

Link to comment
  • 3 months later...

Ich habe jetzt aus Neugier nochmal nachgesehen / gesucht und habe unter 

/boot/config/disk.cfg

 

in meinem Fall den Wert 

diskSpindownDelay.1="1"

gefunden. Wäre es möglich, über Script den Wert auf "0" zu setzen für "Nie" und später dann zurück auf "1" für "1 Stunde" ?

 

Danke euch im Voraus.

 

Grüße Patty

Link to comment
On 11/29/2022 at 9:57 PM, mgutt said:
sed -i 's/diskSpindownDelay.1="1"/diskSpindownDelay.1="0"/g' /boot/config/disk.cfg

 

Der Befehl als solches hat wunderbar funktioniert.

Der aktualisierte Wert steht zwar dann in der .cfg - an der HDD selber steht aber noch der ursprüngliche Wert.

 

image.thumb.png.867dfe83344758f400f8383105a75ba8.png

 

Unabhängig von dem Befehl und dem Vorhaben:

Ändert man den Wert über die WebGui, sieht man folgende Einträge:

 

image.png.fefac4888f941eeb0a0a6fb6d994adc0.png

 

 

 

On 11/29/2022 at 9:57 PM, mgutt said:

Alternativ könnten wir einen zufälligen Sektor von der Platte auslesen.

 

Wenn ich mich nicht irre, haben wir das doch "weiter oben" schon einmal versucht oder? 😊

 

Link to comment
1 hour ago, Patty92 said:

Wenn ich mich nicht irre, haben wir das doch "weiter oben" schon einmal versucht oder? 😊

Ne, bisher nur 512 Bytes von einer bestimmten Stelle. Wir müssen zählen wie viele Bytes die Platte hat und dann mit der skip Option ab einer zufälligen Stelle was auslesen:

https://superuser.com/a/721011/129262

 

 

1 hour ago, Patty92 said:

Der aktualisierte Wert steht zwar dann in der .cfg - an der HDD selber steht aber noch der ursprüngliche Wert.

Ich denke der Index 1 bezieht sich auf Disk2 😉

 

Link to comment
1 hour ago, mgutt said:

Ne, bisher nur 512 Bytes von einer bestimmten Stelle. Wir müssen zählen wie viele Bytes die Platte hat und dann mit der skip Option ab einer zufälligen Stelle was auslesen:

https://superuser.com/a/721011/129262

OK, da muss ich mal gucken, das verstehe ich noch nicht so ganz :P

 

1 hour ago, mgutt said:

Ich denke der Index 1 bezieht sich auf Disk2 😉

Das hatte ich im Vorfeld geprüft, hab jetzt aber nochmal geprüft :D

 

Habe die Parity auf 8 Stunden eingestellt über die WebGui und den Datenträger 1 auf 7 Stunden, dann sieht man folgende Werte:

diskSpindownDelay.0="8"

diskSpindownDelay.1="7"

Link to comment

Ich habe etwas gefunden:

/var/local/emhttp/disks.ini

 

 

Das ist die Stelle:

image.thumb.png.25e3d5a061da2e1329d86b9553ec580f.png

 

Ich habe es dann so versucht:

line_number=$(grep -nF -A40 '["disk1"]' /var/local/emhttp/disks.ini | grep -m1 spindownDelay | cut -d '-' -f 1)
sed -i $line_number's/.*/spindownDelay="0"/' /var/local/emhttp/disks.ini

 

Allerdings korrigiert Unraid die Datei innerhalb von Sekunden wieder 🤪

 

Dann habe ich den Wert über die GUI geändert und gesehen, dass er einen Request an tower/update.htm mit folgendem Inhalt sendet:
 

diskComment.1=&diskSpindownDelay.1=2&diskWarning.1=&diskCritical.1=&changeDisk=Apply&csrf_token=898F9474254D4809

 

Die /usr/local/emhttp/update.php scheint das zu sein. Da werde ich allerdings nicht schlau draus, wie es ab da weitergeht.

 

Also zurück zu der Idee einen zufälligen Block von der HDD zu lesen:

 

block_count=$(blockdev --getsize /dev/sdd)
block_random=$(shuf -i 0-$block_count -n 1)
dd if=/dev/sdd of=/dev/null skip=$block_random count=1 2>/dev/null


Natürlich vorausgesetzt sdd ist deine Disk 1.

Link to comment
12 hours ago, mgutt said:

Ich habe etwas gefunden:

Ich habe es dann so versucht:

 

Ich danke dir zunächst riesig für die Mühe.

Dann war die Idee, den Wert mal "fix" zu ändern nichts. :D

 

12 hours ago, mgutt said:

Also zurück zu der Idee einen zufälligen Block von der HDD zu lesen:

 

block_count=$(blockdev --getsize /dev/sdd)
block_random=$(shuf -i 0-$block_count -n 1)
dd if=/dev/sdd of=/dev/null skip=$block_random count=1 2>/dev/null

 

Ich habe eine UD-Platte angehangen (für Test) und das Script für diese Platte eingestellt:

  • Platte nach Standard in SpinDown (15 Minuten)
  • CronJob für Script, aller 14 Minuten
Dec  5 10:19:24 HOMESERVER  emhttpd: spinning up /dev/sdd
Dec  5 10:19:26 HOMESERVER  emhttpd: read SMART /dev/sdd
Dec  5 10:28:54 HOMESERVER  emhttpd: cmd: /usr/local/emhttp/plugins/user.scripts/showLog.php _HDD_aktivitaet
Dec  5 10:34:25 HOMESERVER  emhttpd: spinning down /dev/sdd

 

Leider auch kein Erfolg.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...