USB storage spin down

bobsynclair

Neuer User
Mitglied seit
4 Aug 2006
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
Ich habe eine USB Festplatte in einer ICY Box an der Fritz!Box hängen. Die Platte wird 3 mal am Tag benötigt, läuft aber ununterbrochen.

Meine Linux Kenntnisse reichen noch nicht aus das ich diese Anleitung verstehe : http://www.ruzee.com/blog/howtos/howto-usb-storage-spin-downstandby-on-idle/

Bitte schreibt mir die Steps nieder die ich zum ausführen des Scriptes erledigt haben muss. Perl läuft ja anscheinend nicht auf meiner Fritz!Box.


Ich habe :

Fritz!Box 7170v2 29.04.29ds-0.2.9_26-14
VMWare mit BOFH-Linux
und Euch :rolleyes:
 

derheimi

Mitglied
Mitglied seit
4 Jul 2006
Beiträge
347
Punkte für Reaktionen
0
Punkte
0
Das Script ist kein Problem, das kann man nach Shell portieren. Die Arbeit wird aber von einem Binary gemacht, dass muss man erstmal für die Fritzbox kompilieren. Werd das heute Abend mal probieren...

Update:
So, das Binary zu kompilieren war kein Problem, das Skript sowieso nicht. Für die debug.cfg oder sonst wo:
Code:
# Vorbereitungen: sysfs mounten, Binary & Script holen + ausfuehrbar machen
mkdir /var/sysfs
mount sys /var/sysfs -t sysfs
wget http://www.heimpold.de/dsmod/spindown.sh -O /tmp/spindown.sh
chmod +x /tmp/spindown.sh
wget http://www.heimpold.de/dsmod/sg_start -O /tmp/sg_start
chmod +x /tmp/sg_start

# Block-Device anlegen
mknod -m 640 /dev/[COLOR="Red"]sda[/COLOR] b 8 [COLOR="Red"]0[/COLOR]

# Script in den Hintergrund starten
/tmp/spindown.sh [COLOR="Red"]sda [/COLOR]900 &
Die Parameter "sda" und "900" können auch weggelassen werden, beide sind so als Default voreingestellt, wobei sda die Platte angibt (ev. mit Hilfe von dmesg herausfinden, welchen Devicenamen das Gerät bekommt) und 900 der Timeout-Wert in Sekunden ist. D.h. die Platte dreht ca. 15min nach dem letzten Zugriff runter. Wenn man einen anderen wert als die 900 angeben will, muss man zwingend auch den ersten Parameter mit übergeben! Wenn man mehrere Platten bedienen möchte, einfach die letzte Zeile mit entsprechenden 1. Parameter mehrmals einfügen.

Achso: Ich hab gar keine USB-Platte! Alles ungetestet!

Update 2:
So wie es aussieht, fehlt das Block-Device noch und muss angelegt werden (mknod siehe oben). Je nachdem, welche Bezeichnung die Platte bekommt, muss man da die zweite Nummer variieren:
sda => 8 0
sdb => 8 16
sdc => 8 32
sdd => 8 48
... immer +16
 
Zuletzt bearbeitet:

bobsynclair

Neuer User
Mitglied seit
4 Aug 2006
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
Schön wenn etwas funktioniert, da bekommt man gleich einen Antrieb weiter zu friemeln !

ich habe das filesystem nach /var/media/temp gemounted. wenn ich nach deiner vorgabe handle verschwindet der inhalt der vorher im verzeichnis /var/sysfs war. dann sind nur noch die files von der festplatte in dem verzeichnis.

/var/sysfs $ ls -la
drwxr-xr-x 9 root root 0 Jan 1 2000 .
drwxr-xr-x 13 root root 0 Jan 1 2000 ..
drwxr-xr-x 11 root root 0 Jan 1 2000 block
drwxr-xr-x 5 root root 0 Jan 1 2000 bus
drwxr-xr-x 13 root root 0 Jan 1 2000 class
drwxr-xr-x 5 root root 0 Jan 1 2000 devices
drwxr-xr-x 2 root root 0 Jan 1 2000 firmware
drwxr-xr-x 2 root root 0 Jan 1 2000 kernel
drwxr-xr-x 22 root root 0 May 10 23:59 module
/var/sysfs $

/var/media $ mkdir temp
/var/media $ mount -t ext2 /dev/sda2 /var/media/temp

/var/tmp $ chmod +x /tmp/spindown.sh
/var/tmp $ chmod +x /tmp/sg_start
/var/tmp $ mknod -m 640 /dev/sda b 8 0
/var/tmp $ /tmp/spindown.sh sda 30 &

---- 30 sekunden später ----

/var/tmp $ bad argument to '--pc='
Usage: sg_start [--eject] [--fl=FL] [--help] [--immed] [--load] [--loej]
[--pc=PC] [--start] [--stop] [--verbose] [--version]
DEVICE
where:
--eject|-e stop unit then eject the medium
--fl=FL|-f FL format layer number (mmc5)
--help|-h print usage message then exit
--immed|-i device should return control after receiving cdb,
default action is to wait until action is complete
--load|-l load medium then start the unit
--loej|-L load or eject, corresponds to LOEJ bit in cdb;
load when START bit also set, else eject
--pc=PC|-p PC power conditions: 0 (default) -> no power condition,
1 -> active, 2 -> idle, 3 -> standby, 5 -> sleep (MMC)
--start|-s start unit, corresponds to START bit in cdb,
default (START=1) if no other options given
--stop|-S stop unit (e.g. spin down disk)
--verbose|-v increase verbosity
--version|-V print version string then exit

Example: 'sg_start --stop /dev/sdb' stops unit
'sg_start --eject /dev/scd0' stops unit and ejects medium

Performs a SCSI START STOP UNIT command

/var/tmp $



ich habe probiert :

/var/tmp $ ./sg_start --stop /dev/sda
&
/var/tmp $ ./sg_start --eject /dev/sda

aber die platte läuft weiter, es kommt auch keine fehlermeldung



aaaaber jetzt :))))))

/var/tmp $ ./sg_start --pc 3 /dev/sda

damit legt sich die platte schlafen ( auch mit option 5 ) und sie fährt wieder an wenn sie benötigt wird. !

geilo
Es besteht also nur ein kleiner Fehler im Script spindown.sh - als ich die Datei korrigiert habe funktioniert der spin down einwandfrei !

Heimi, ich lad dich auf ein Bier ein :bier:

Danke !
 

bobsynclair

Neuer User
Mitglied seit
4 Aug 2006
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
ohjee ich sollte ins bett ;)

grad hab ich alles in die debug.cfg eingebunden aber nichts tut sich.

wenn ich das tool manuell ausführen möchte kommt :

/var/tmp $ /tmp/spindown.sh sda 10 &

--- nach 10 sekunden ---

/var/tmp $ /tmp/sg_start: /tmp/sg_start: 1: Syntax error: ")" unexpected

/var/tmp $
 

Darkyputz

Aktives Mitglied
Mitglied seit
27 Jul 2005
Beiträge
2,324
Punkte für Reaktionen
0
Punkte
36
hiho...
hab da jetzt ma ne frage zu...
das ganze iss ja ziemlich interessant...
habe mir die files auch schon gedowned...aber nu steh ich vor nem problem...
da ich ja den ds mod drauf habe, mountet der ja jeden datenträger immer auf /var/media/ftp/uStor01
und ich denke dieses script jetzt einfach reinzuballern wäre zweckfrei...
könnte man das automount vom ds-mod nicht um das spindown erweitern?
wäre vom grundsatz ja für jeden zu gebrauchen...
das sg_start einfach mit ins flsh schrieben und den aufruf via automount machen...wäre das machbar das ihr mir das mal umschreibt damit ich das testen kann?
bin da nämlich nicht unbedingt der versierteste...
stelle die ergebnisse natürlich sofort hier rein...

anbei die daten die meiner meinung nach für den mount nötig sind...
 

Anhänge

Zuletzt bearbeitet:

derheimi

Mitglied
Mitglied seit
4 Jul 2006
Beiträge
347
Punkte für Reaktionen
0
Punkte
0
So, im Script hatte sich tatsächlich ein kleiner Tippfehler eingeschlichen, habs korrigiert. Habe außerdem auch die Möglichkeit für den 3. Parameter (PC: 3 = standby, 5 = sleep) ergänzt.
(Wäre prima, wenn mal jemand den Stromverbrauch messen können, wenn die Platte läuft, im standby oder im sleep ist.)
Zu der Mount-Geschichte: das Script greift auf das SysFS zu. In 'normalen' Systeme wird das unter /sys gemountet, auf zwei von meinen Fritzboxen hatte ich das gar nicht, auf der dritten in Dresden (hab ich grade nachgesehen) scheint das vorhanden zu sein?!? :confused: Daher die Mount-Befehle oben. Du musst jetzt halt mal schauen, ob das sysfs bei Dir irgendwo im FS auftaucht, das Script erwartet es unter /var/sysfs, aber das kann man ja noch anpassen - wie gesagt, mich wundert es, dass ich selbst so unterschiedliche Varianten habe...

Die PLatte selber kannst Du natürlich sonstwohin mounten oder den AVM-Default nehmen.

Das sg_start-Tool wird jetzt im aktuellen Verzeichnis, in /tmp oder im Standardsuchpfad gesucht, vielleicht kam der Syntax-Fehler daher. Du kannst ja aber auch erstmal manuell
Code:
sh -x spindown.sh sda 10
aufrufen, und die Ausgaben dann posten, vielleicht sieht man da mehr, wo meckert...

Update (zu langsam):
@darkyputz:
Also die dsmod-Integration würde ich sobald in Angriff nehmen, wie das hier standalone nachvollziehbar klappt. Abgesehen davon ist es egal, wohin der Automounter die Platte mountet - das Script interessiert sich gar nicht dafür: es prüft nur, ob es auf ein bestimmten Geräte (sda, sdb... jenachdem, wieviele Platten man dran hat :)) Zugriffe gegeben hat (und die Platte damit dreht). Wenn ja, dann wird der Timeout abgewartet (um nicht ständig hoch und runter zu drehen und die Platte zu schonen) und die Platte anschließend zum Schlafen geschickt...
 
Zuletzt bearbeitet:

jesus.christ

Mitglied
Mitglied seit
25 Jun 2005
Beiträge
494
Punkte für Reaktionen
0
Punkte
16
Hängt das nicht eh vom Chipsatz des USB-Controllers ab, ob der spindown unterstützt wird?

Gruß Niko
 

bobsynclair

Neuer User
Mitglied seit
4 Aug 2006
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
Die Nacht ist zum schlafen da, nicht zum tüfteln.

Nach ewigem hin und her habe ich mir die sg_start nochmal neu gezogen und siehe da - es geht. Auch nach dem einbinden in die debug.cfg .

Selberdoof sag ich da nur, hab wohl letzte Nacht irgendwas mit dem File angestellt was ihm nicht gut getan hat :noidea:

@Jesus
Ich weis nur das ich seit 2 Monaten versucht habe die Platte schlafen zu legen. Es haben schon einige versucht aber es hat wohl noch nie geklappt. Dieses Script habe ich zufällig entdeckt, die anderen Lösungsansätze die gescheitert sind haben es mit hdparm und sdparm probiert.
Vielleicht geht das ja nur mit der ICY Box, wie kann ich auslesen was da für ein Controller drin steckt ?
 
Zuletzt bearbeitet:

#50

Neuer User
Mitglied seit
18 Jan 2005
Beiträge
68
Punkte für Reaktionen
0
Punkte
6
Hallo zusammen

Erstmal vielen Dank von meiner Seite, daß Ihr Euch dem Thema angenommen hast. Ich bin ebenfalls daran interessiert, meine an der Fritz 7170 hängende USB-Platte zu nicht genutzter Zeit ausruhen zu lassen. Da ich ein relativer newbie auf dem Gebiet der Fritz-Shell bin, habe ich noch gewisse Berührungsängste und Fragen, bevor ich das bei mir ausprobiere.

Meine Situation:

USB-HD hängt als /dev/sdb1 an der Fritz und ist gemountet nach /var/tmp/usb.

Auszuführender Code lauf Posting vom Heimi:

Code:
# Vorbereitungen: sysfs mounten, Binary & Script holen + ausfuehrbar machen
mkdir /var/sysfs
mount sys /var/sysfs -t sysfs
wget http://www.heimpold.de/dsmod/spindown.sh -O /tmp/spindown.sh
chmod +x /tmp/spindown.sh
wget http://www.heimpold.de/dsmod/sg_start -O /tmp/sg_start
chmod +x /tmp/sg_start

# Block-Device anlegen
mknod -m 640 /dev/sda b 8 0

# Script in den Hintergrund starten
/tmp/spindown.sh sda 900 &


Code:
mkdir /var/sysfs
mount sys /var/sysfs -t sysfs
Was wird hier genau gemountet?

Code:
wget http://www.heimpold.de/dsmod/spindown.sh -O /tmp/spindown.sh
chmod +x /tmp/spindown.sh
wget http://www.heimpold.de/dsmod/sg_start -O /tmp/sg_start
chmod +x /tmp/sg_start
Hier holt sich die FritzBox das Script und das Binary und setzt die Rechte auf ausführbar, oder? Kann ich mir beide von Heimis Rechner runterladen und auf meine Platte packen und dann via /var/tmp/usb/xyz/... genauso starten?

Code:
# Block-Device anlegen
mknod -m 640 /dev/sda b 8 0
Die Anweisung verstehe ich nun nicht. ;-) Habe mich unter http://www.linux-ag.de/linux/LHB/node137.html mal schlaugemacht, was der Befehl an sich bringt, aber kanns als Unix-Newbie noch nicht einordnen.

Wie muß der bei mir lauten? Und was ändert sich, wenn ich via Hub ggf. ein zweites Gerät an der Fritz hängen habe?

Code:
/tmp/spindown.sh sda 900 &
Das leuchtet mir soweit noch ein! :)

Sorry für die vielen Fragen.. ich wills nur einfach auch verstehen, nur anwenden hilft nicht bei auftretenden Problemen und anderen Aufgaben!

Danke nochmal für Eure Bemühungen!


#50
 
Zuletzt bearbeitet:

derheimi

Mitglied
Mitglied seit
4 Jul 2006
Beiträge
347
Punkte für Reaktionen
0
Punkte
0
#50 schrieb:
Code:
mkdir /var/sysfs
mount sys /var/sysfs -t sysfs
Was wird hier genau gemountet?
Das SysFS - ein virtuelles Filesystem (ähnlich /proc), womit man auf verschiedene Kernelparameter und Treibereinstellungen zugreifen kann. Wird benötigt, um zu checken, ob es Zugriffe auf die Disk gegeben hat.

Hier holt sich die FritzBox das Script und das Binary und setzt die Rechte auf ausführbar, oder? Kann ich mir beide von Heimis Rechner runterladen und auf meine Platte packen und dann via /var/tmp/usb/xyz/... genauso starten?
Genau. Von USB-Platte würde prinzipiell auch gehen, folgendes probieren/beachten/ändern:
- Eventuell baust Du ein Henne-Ei-Problem, wenn das Skript+Tool auf der Platte liegen, die Du schlafen schicken willst.
- Dateisystem der Platte: wenn NTFS oder FAT32 musst Du ggf. die Sachen trotzdem noch in die RAM-Disk kopieren, damit sie ausführbar werden.
- In der spindown.sh muss eventuell der Pfad zu sg_start angepasst werden.

Code:
# Block-Device anlegen
mknod -m 640 /dev/sda b 8 0
Das legt eine (Spezial-)Datei an, die als Kommunikationsschnittstelle zum USB-Treiber für sg_start dient. Ok, die Erklärung ist jetzt nicht die tollste, hoffe das reicht so?!

Wie muß der bei mir lauten? Und was ändert sich, wenn ich via Hub ggf. ein zweites Gerät an der Fritz hängen habe?
Du hast geschrieben, dass deine Disk als sdb ankommt, also musst Du die folgenden Zeilen anstatt der vergleichbaren oben nehmen:
Code:
mknod -m 640 /dev/[b][COLOR="Red"]sdb[/COLOR][/b] 8 [b][COLOR="Red"]16[/color][/b]
/tmp/spindown.sh [b][COLOR="Red"]sdb[/COLOR][/b] 900 &
Sorry für die vielen Fragen.. ich wills nur einfach auch verstehen, nur anwenden hilft nicht bei auftretenden Problemen und anderen Aufgaben!
Das ist die richtige Einstellung!

@darkyputz:
Ich hab für den Einbau in den dsmod fast alles fertig, werd noch kurz testen (soweit ich das ohne USB Disk kann) und dann nen Posting im dsmod-Unterforum machen.
 

Darkyputz

Aktives Mitglied
Mitglied seit
27 Jul 2005
Beiträge
2,324
Punkte für Reaktionen
0
Punkte
36
na das klingt doch wie musik in meinen ohren *GRINS*
danke
 

#50

Neuer User
Mitglied seit
18 Jan 2005
Beiträge
68
Punkte für Reaktionen
0
Punkte
6
Vielen Dank für die Ausführungen! Habe mich noch anderweitig eingelesen und konnte Deinen Text gut verstehen. FritzBox-Modding macht richtig Spaß! :-D

Gruß,


50
 

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,779
Punkte für Reaktionen
10
Punkte
38
Ja, leider wird das sysfs auf der FritzBox nach /var/sys gemountet. Normalerweise befindet sich das sysfs in /sys. Ich weiß nur noch nicht ob es sinnvoll ist das per dsmod zu overrulen, wenn AVM das sysfs wo anders hin mountet.

MfG Oliver
 

derheimi

Mitglied
Mitglied seit
4 Jul 2006
Beiträge
347
Punkte für Reaktionen
0
Punkte
0
@oli:
Naja, es schadet ja nix, dass sysfs zusätzlich noch nach /sys zu mounten. Muss man nur noch nen Check einbauen, damit keine Fehlermeldungen kommen, falls AVM irgendwann mal umschwenkt.

@all:
Ich hab das Script noch ein wenig "verbessert":
- es wird jetzt geschaut, ob und wo das sysfs gemountet ist
- für sda bis sdd werden die Blockdevices automatisch angelegt
- der Timeout sollte jetzt auch funktionieren, falls das Gerät mal abgezogen+wieder angesteckt wird, das Script aber nicht beendet wurde
- unter /var/run/spindown.$DEVICE.pid wird die PID des Scripts abgelegt, damit man es einfacher wiederfindet (zum killen o.ä.)

Damit sollten also nur noch die folgenden Zeilen notwendig sein:
Code:
# Vorbereitungen: Binary & Script holen + ausfuehrbar machen
wget http://www.heimpold.de/dsmod/spindown.sh -O /tmp/spindown.sh
chmod +x /tmp/spindown.sh
wget http://www.heimpold.de/dsmod/sg_start -O /tmp/sg_start
chmod +x /tmp/sg_start

# Script in den Hintergrund starten
/tmp/spindown.sh sda 900 &
 

Darkyputz

Aktives Mitglied
Mitglied seit
27 Jul 2005
Beiträge
2,324
Punkte für Reaktionen
0
Punkte
36
danke für die möglichekti das ds mod addon zu testen...läuft erstklassik und habe noch keinen fehler gefunden...
wenn jetzt noch nen autodetect kommt, iss das fast nicht auszuhalten gut ;-)

weiter so...
 

eazee

Neuer User
Mitglied seit
8 Aug 2006
Beiträge
30
Punkte für Reaktionen
0
Punkte
6
So, muss jetzt auch mal meinen Senf dazugeben, und zwar...........

bei mir läuft´s nicht! *heul*
Mal ernsthaft, ich hab das eingebunden, aber bei mir findet er kein filesys. Ich weiss auch nicht, meine Platte (USB) wird auch nicht als sda usw. eingebunden, sondern als none on /dev/scsi/.........

Wie krieg ich das in das Script mit rein?

Thx in advance,

eazee
 

derheimi

Mitglied
Mitglied seit
4 Jul 2006
Beiträge
347
Punkte für Reaktionen
0
Punkte
0
@eazee:
Sorry, das geht mit 2.4er Kernel einfach nicht :-( Du brauchst das sysfs und das gibts erst ab 2.6...
 

eazee

Neuer User
Mitglied seit
8 Aug 2006
Beiträge
30
Punkte für Reaktionen
0
Punkte
6
Danke für die Antwort.
Mist, hatte gehofft, da könnte man was machen.
 

hrust_ray

Neuer User
Mitglied seit
11 Jan 2007
Beiträge
133
Punkte für Reaktionen
0
Punkte
0
Hallo.
Will it work on my FB7141 without DSMOD?
If i simply put "sg_start" and "spindown.sh" to my USB-disk with name ROOT and them with following code
Code:
mkdir /var/sysfs
mount sys /var/sysfs -t sysfs
cd /var/media/ftp/ROOT
chmod +x ./spindown.sh
chmod +x ./sg_start

mknod -m 640 /dev/sda b 8 0
./spindown.sh sda 900 &
 

derheimi

Mitglied
Mitglied seit
4 Jul 2006
Beiträge
347
Punkte für Reaktionen
0
Punkte
0
Hi,

yes, it should work. If you have downloaded the two files recently, there should be an "autodetection" integrated to find the sysfs filesystem. If it is not found it is tried to mount it. Also the device node should be created by the spindown.sh so that your code could be reduced to
Code:
cd /var/media/ftp/ROOT
chmod +x ./spindown.sh
chmod +x ./sg_start
./spindown.sh sda 900 &
Would be nice when you give some feedback if it worked for you.
Regards,
Michael