PDA

Bekijk de volledige versie : Symlink auf tmp/harddisk verschwindet



jojo_m
23-07-2011, 11:48
Hallo, ich habe folgendes Problem:

An meiner WL-HDD (aufgesetzt nach Wengi-HowTo, Firmware Version 1.9.2.7-9.1.12) sind die Dateien der Daten-Partition von der internen Festplatte unter /tmp/harddisk/ zu finden. Soweit alles klar.

Eigentlich ist es ein Symlink auf /tmp/mnt/disc0_3. Das macht wohl die Firmware so.


Jetzt stecke ich einen USB-Stick an (dazwischen ist noch ein USB-HUB). Der wird automatisch gemounted auf /tmp/mnt/disc1_1. Soweit immer noch alles klar.

Wenn ich nun aber den USB-Stick wieder abziehe, ist der Symlink /tmp/harddisk plötzlich weg. Das ist das Problem... Ob ich den USB-Stick vorher unmounte oder nicht, spielt keine Rolle. Ob der USB-Storage-Service im Webinterface aktiv ist oder nicht, auch nicht.

Interessant ist, wenn ich den Stick wieder einstecke, ist nach ein paar Sekunden auch /tmp/harddisk wieder da, und verweist auch korrekt auf die Daten in /tmp/mnt/disc0_3.

Ich nehme an, da pfuscht mir die Firmware dazwischen, weil sie denkt, wenn ein externer Speicher abgezogen wird dann muss auch der Symlink entfernt werden. Hat jemand eine Idee, wie ich das verhindern kann? Oder wie ich automatisch beim Abziehen des USB-Sticks den Symlink wieder herstellen kann? Manuell funktioniert es (mit ln -s /tmp/mnt/disc0_3 /tmp/harddisk), aber ich will ja nicht jedesmal wenn ich den Stick abziehe in die Konsole reingehen...

!gm
23-07-2011, 15:25
meine Gedanken:
1. cronjob wäre doof
2. wird die Festplatte durch das abstecken (irgendwas macht der USB Controller ja) geremountet?

wenn ja würde ich den Symlink über die post-mount setzen. In den neuerern Firmwares werden auch Parameter übergeben zur Identifizierung - is bei dir bestimmt auch so (testen)

http://code.google.com/p/wl500g/wiki/UserScripts


vlt besteht das Problem in den aktuellen Entwicklerfirmwares nicht.

jojo_m
23-07-2011, 15:40
Hi,

so wie es aussieht bleibt die Festplatte immer gemountet (auf /tmp/mnt/disc0_3), es verschwindet nur der Symlink. Die post-mount wird nicht aufgerufen, wenn ich den Stick abziehe oder einstecke (da habe ich meine ganzen Start-Scripts drin, das müsste ich merken).

Meintest du dass die HD auch am USB-Controller hängt? Bei der WL-HDD ist das nicht der Fall, die HD ist intern an einem IDE-Bus.

Ich habe die neueste Firmware drauf, die es für das Teil gibt. Die neueren Versionen unterstützen die WL-HDD nicht mehr.

!gm
23-07-2011, 16:28
ups WL-HDD überlesen :D
sorry, dann stimmt das natrülich alles nicht

newbiefan
24-07-2011, 08:42
Hi,

so wie es aussieht bleibt die Festplatte immer gemountet (auf /tmp/mnt/disc0_3), es verschwindet nur der Symlink.

1.) Diese FW Version 1.9.2.7-9.1.12 kenne ich nicht (nur bis Version 1.9.2.7-9), wo gibt es diese?
2.) wenn du nach Wengi installiert hast, kommt der Symlink von deiner fstab.
3.) bitte führe ein 'cat /etc/fstab' aus und poste das Ergebnis.
4.) und auch ein 'cat /.version' ist hilfreich.
5.) Mir ist dieser Fehler nicht bekannt, ein Workaround sollte aber möglich sein. Dazu ist ein kleines Script nötig, welches alle paar Minuten von Cron aufgerufen wird.

jojo_m
24-07-2011, 15:59
die Firmware habe ich von hier: http://oleg.wl500g.info/wlhdd/ . Wenn ich mich recht erinnere ist das eine Bugfix-Version, weil in der Firmware 1.9.2.7-9 das "5-Sekunden-Knopfdrück-Ausschalten" bei der WL-HDD nicht funktioniert hat.


[admin@WLHDD01 root]$ cat /.version
1.9.2.7-9.1.12

und hier die fstab:


[admin@WLHDD01 root]$ cat /etc/fstab
#device Mountpoint FStype Options Dump Pass#
/dev/discs/disc0/part1 none swap sw 0 0
/dev/discs/disc0/part2 /opt ext3 rw,noatime 1 1
/dev/discs/disc0/part3 /tmp/harddisk ext3 rw,noatime 1 1

müsste alles so sein wie bei wengi beschrieben.


Ein cron-Job wäre eine Notlösung, vorausgesetzt er würde nicht den HDD-Sleep verhindern (tut er das?), oder viel Performance verbraten. Wobei es natürlich ein bisschen komisch ist, wegen einem USB-Stick, den ich vielleicht 1x in der Woche anschließen werde, alle paar Sekunden einen solchen Check zu machen.

Wie könnte ich denn per Skript prüfen, ob der Stick nicht mehr dran ist?

newbiefan
24-07-2011, 16:43
Wie könnte ich denn per Skript prüfen, ob der Stick nicht mehr dran ist?

Also die FW kannte ich nicht, sollte jedoch OK sein.:)
Die Fstab ist ja auch in Ordnung - ich vermute es ist ein FW-Bug.

Der Script weckt die HDD sicher nicht aus dem Schlaf, es sollte ja
nur geprüft werden ob:
1.) die HDD gemountet ist und
2.) wenn gemountet ist prüfen, ob der Symlink existiert.
3.) wenn Symlink existiert dann exit, sonst symlink legen.

Werde am späteren Abend (gegen 22:00) wieder zurück sein und etwas basteln.....

newbiefan
25-07-2011, 00:27
Hier ist der Script für den Workaround.
Ich würde den Script irgendwo im Pfad speichern (/tmp/local/bin/checksymlink), ein chmod 755 /tmp/local/bin/checksymlink nicht vergessen und das berühmte flashfs save................

#! /bin/sh
# check for a symbolic link and make a symbolic link if symlink does not exist
# Be aware, this script is just a workaround for lost symlinks on a wl-hdd
# add a line to your crontab: */5 * * * * admin /tmp/local/bin/checksymlink to check every 5 Minutes

#adjust vars to your needs
symbolic_link="/tmp/harddisk"
mount_point="/tmp/mnt/disc0_3"

if [ -d $mount_point ] ; then #when dir exist, check for symbolic link
if [ -d $symbolic_link ] ; then
echo "Nothing to do, symbolic link $symbolic_link exists...." #or write to logger, as you want....
else
ln -s $mount_point $symbolic_link
echo "Made a symbolic link from $mount_point to $symbolic_link" #or write to logger, as you want....
fi
else #dir does not exist!!
echo "Harddisk is not mounted or attached! - ERROR" #or write to logger, as you want....
exit 1
fi


Den Eintrag in die Crontab wie im Script angegeben.
Bitte prüfen ob der Aufruf von Cron den Script richtig arbeiten lässt (Cron hat Probleme mit Pfade) und natürlich ob deine Harddisk auch nicht immer wach wird wenn der Cron startet. Der Script selbst greift nicht auf die Harddisk zu, ich weiss aber nicht ob cron die HD weckt.
Der Script prüft, ob die HD gemountet ist und ob ein symbolischer Link existiert, falls kein Symlink existiert, wird einer angelegt.
Viel Spass

jojo_m
26-07-2011, 20:36
Super, vielen herzlichen Dank! Mit dem Workaround von newbiefan ist das Problem gelöst.

Weil nach dem Abziehen des USB-Sticks jedesmal die Samba-Shares weg waren und das Musikabspielen nicht mehr ging (was die Hauptaufgabe der WL-HDD bei mir ist), habe ich den Cron-Job gleich mal auf 1x pro Minute gesetzt. Damit es nicht so lange dauert bis der Symlink wieder da ist. Geht auch.

Der Sleep der HD ist ebenfalls nicht beeinträchtigt.

newbiefan
26-07-2011, 23:29
Super, vielen herzlichen Dank! Mit dem Workaround von newbiefan ist das Problem gelöst.........
Der Sleep der HD ist ebenfalls nicht beeinträchtigt.

Freut mich, dass der Workaround funzt, es geht aber noch viel einfacher - ohne cron, ohne Script:
1.) Samba im Webif disablen und nur "apply" drücken
2.) Den File /tmp/etc/smb.conf einfach anpassen (z.Bspl. mit vi).
Dort kannst du den Pfad ja beliebig angeben, den Freigabenamen
einfach an deine Bedürfnisse anpassen oder auch stehen lassen,
ganz wie du es brauchst.
3.) In der post-mount vor rc-unslung einfach zwei Zeilen einfügen.
/usr/sbin/nmbd -D
/usr/sbin/smbd -D
4.) Jetzt nur noch in /tmp/local/.files die Zeile mit /tmp/etc/smb.conf einfügen
5.) flashfs save
flashfs commit
flashfs enable
reboot

Diese Lösung hat einen einfachen Vorteil: Du kannst die smb.conf beliebig anpassen und brauchst nichts zu installieren. Sie verbraucht keine der ohnehin knappen Resourcen der WL-HDD.
In der Pfadangabe von smb.conf einfach keine Symlinks mehr verwenden, dann geht Samba auch, wenn der Symlink verloren ging. Den Symlink brauchst du eigentlich gar nicht mehr, er nützt nichts und niemand......
Ach ja, du brauchst auch nicht zu warten, es geht einfach immer.
LG
Newbiefan

Edit: wenn du viele Änderungen an deiner smb.conf vornehmen willst, z.Bspl. während einer Testphase, kannst du natürlich deine smb.conf auch nach
/opt/etc/smb.conf legen. Dazu musst du nur die beiden Zeilen in der Postmount etwas ergänzen:
/usr/sbin/nmbd -D -s /opt/etc/smb.conf
/usr/sbin/smbd -D -s /opt/etc/smb.conf
Dann brauchst du nicht mehr nach jeder Änderung ein flashfs save..... usw. durchführen.

jojo_m
27-07-2011, 23:37
Hallo newbiefan, super, danke für die neuen Tipps!

So ist es natürlich noch eleganter und wurde gleich in die Tat umgesetzt. Den cron-daemon habe ich wieder komplett stillgelegt. Die smb.conf hatte ich sowieso schon ausgelagert. In ein paar anderen .conf -Dateien (insbes. beim mpd) habe ich den Symlink auch durch tmp/mnt/disc0_3 ersetzt. Ich kann mich täuschen, aber auch die Gesamt-Performance scheint deutlich besser geworden zu sein.

Lediglich der FW-interne FTP-Server verweist noch auf den Pfad /tmp/harddisk, aber damit kann ich leben, benutze ich eh nicht.

newbiefan
28-07-2011, 09:03
Hallo newbiefan, super, danke für die neuen Tipps!

Ich kann mich täuschen, aber auch die Gesamt-Performance scheint deutlich besser geworden zu sein.

Lediglich der FW-interne FTP-Server verweist noch auf den Pfad /tmp/harddisk, aber damit kann ich leben, benutze ich eh nicht.

Zumindest hat die CPU etwas weniger zu tun, vielleicht deswegen eine kleine Performance Steigerung.

Wenn du Samba sauber starten und stoppen willst, musst du in /opt/etc/init.d den beigefügten Start-Stop-Restart Script speichern.
Zwar kenne ich nicht deine Samba-Version, sollte aber funktionieren.
Du musst nur nachsehen, ob der nmbd und smbd einen Pidfile anlegt, falls nicht, einfach die StopFunktion (nur den if-Teil) von dem vsftpd-Script 2x übernehmen und den Shortname gegen "nmbd" und "smbd" austauschen. Naja und alle Zeilen mit Pidfile auskommentieren. (Rechte: 'chmod 755 filename' nicht vergessen)
Dann kannst du sauber starten und stoppen oder restarten.....
Ach ja, den vsftpd Script kann man für alle Programme verwenden, nur die paar Vars anpassen......so läuft es bei mir - falls du vsftpd ebenfalls starten willst, sind noch ein paar kleine Besonderheiten (Config)nötig.
Viel Spass