PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : udev suse linux



Seiten : [1] 2

andy135
13.09.12, 20:53
Hallo zusammen,

ich habe es geschafft, per udev meinen usb-stick am suse 12.1 zu erkennen und drauf zu zugreifen. Nachdem ich den USB-Stick ausgesteckt und wieder eingesteckt habe, kann ich nicht mehr auf die Ordner im gemounteten Stick zugreifen, erst nachdem ich den Rechner wieder neu gestartet habe funktioniert alles wie gehabt. Ich nehme mal an, dass es daran liegt, dass die Gerätedatei vom Stick auch bei ausgestecktem Stick erhalten bleibt, oder ? Kann mir da bitte jemand behilflich sein ? Mache schon ewig an dem Problem rum und komm einfach nicht weiter....

buzz768
13.09.12, 21:06
Bitte beherzige was ich hier (http://www.linuxforen.de/forums/showthread.php?t=273917#7) geschrieben habe. Du solltest einen gemounteten Stick nicht einfach abziehen, du solltest ihn vorher unmounten.

andy135
13.09.12, 21:18
Das ist genau das Problem, nach umount verschwindet die Gerätedatei nicht..

buzz768
13.09.12, 21:32
Sollte sie auch nicht, solange der Stick angeschlossen ist


$ dmesg|tail
sd 6:0:0:0: [sdb] 7864320 512-byte logical blocks: (4.02 GB/3.75 GiB)
sd 6:0:0:0: [sdb] Write Protect is off
sd 6:0:0:0: [sdb] Mode Sense: 43 00 00 00
sd 6:0:0:0: [sdb] No Caching mode page present
sd 6:0:0:0: [sdb] Assuming drive cache: write through
sd 6:0:0:0: [sdb] No Caching mode page present
sd 6:0:0:0: [sdb] Assuming drive cache: write through
sdb: sdb1
...

Gerätedatei ist also /dev/sdb1


# mount /dev/sdb1 /mnt/
# mount | grep sdb1
/dev/sdb1 on /mnt type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=cp437, iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
# umount /mnt
# mount | grep sdb1
# ls -l /dev/sdb1
brw-rw---- 1 root disk 8, 17 13. Sep 22:25 /dev/sdb1

Stick entfernen und nun


# ls -l /dev/sdb1
ls: Zugriff auf /dev/sdb1 nicht möglich: Datei oder Verzeichnis nicht gefunden


PS
Poste doch mal deine udev-Regeln

andy135
13.09.12, 21:37
Hier die Regel, mußte es abtippen, die ich aus VMWare irgendwie schlecht kopieren kann:

SUSBSYTEMS=="usb", KERNEL=="sd?1",SYSFS{serial}=="0805.....ae",SYMLINK+="backup", RUN+="/bin/mount -t ntfs-3g /media/testlin"

andy135
13.09.12, 21:38
sie verschwindet überigens auch icht, wenn dir stick abgezogen ist

andy135
13.09.12, 21:43
und beim Anstecken des sticks komt die Meldung:

[ 3897.011797] sd 4:0:0:0: [sdb] Asking for cache data failed
[ 3879.037169] sd 4:0:0:0: [sdb] Assuming drive cache: write through

buzz768
13.09.12, 22:01
Und du hast vor dem Abziehen mit mount überprüft, dass der Stick tatsächlich nicht mehr gemountet ist?
Hier noch mal ein Beispiel: Stick wird (zu Sticherheit readonly) gemountet, kann aber nicht ausgehängt werden, da noch ein Prozess darauf zugreift (weil wir mit cd in den Mountpunkt gewechselt sind)


# mount -o ro /dev/sdb1 /mnt/
# cd /mnt/
# umount /mnt
umount: /mnt: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
# lsof /mnt/
lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1558 root cwd DIR 8,17 4096 1 /mnt

Wenn ich jetzt den Stick trotzdem entferne


# mount|grep sdb1
/dev/sdb1 on /mnt type vfat (ro,relatime,fmask=0022,dmask=0022,codepage=cp437, iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
# ls -l /dev/sdb1
ls: Zugriff auf /dev/sdb1 nicht möglich: Datei oder Verzeichnis nicht gefunden

...wird er noch in der Mount-Tabelle geführt, die Gerätedatei wurde allerdings entfernt. Da bin ich grad ratlos, weshalb dies bei dir anders ist, vielleicht hat es ja etwas mit vmware zu tun...

Deine udev-Regel legt einen symbolischen Link /dev/backup auf die eigentliche Gerätedatei an, das ist ganz okay so, aber wenn du beim RUN-Teil nichts abzutippen vergessen hast, dürfte dieser wirkungslos sein, da die Gerätedatei nicht an mount übergeben wird, du müsstest also einen entsprechenden Eintrag in /etc/fstab (mit Mountoption noauto) haben, die mount in diesem Falle zu Rate zieht.

Also ich würde die udev-Regel zunächst deaktivieren und alles erst einmal wie beschrieben zu Fuß machen, immer kontrollieren was ist wo gemountet, kann man darauf zugreifen u.s.w.

andy135
13.09.12, 22:12
Also das mit der Gerätedatei hat sich irgendwie von alleine gelöst. Man muß eben nur lang genug warten, dann ist sie automatisch gelöscht. Ist das normal ??

Nach dem RUN Teil habe ich nichts vergessen abzutippen, aber was mir in meiner fstab ( /dev/backup/ /media/testlin ntfs-3g user,users,gid=users,umask=0002 0 0 ) aufgefallen ist, dass ich tatsächlich den Eintrag noauto nicht gemacht habe. In der Klammer steht der Auszug der fstab.

andy135
14.09.12, 18:46
Kann man sich eigentlich das erfolgreiche mounten mit einem Piepton des PC-Lautsprechers bestätigen lassen ??

buzz768
14.09.12, 19:11
mount liefert als Rückgabewert true, wenn das Mounten erfolgreich war


mount /dev/sdb1 /mnt && echo okay || echo fehler

Anstelle von echo rufst du dann z.B. beep (http://www.johnath.com/beep/) (ggf. mit verschiedenen Optionen wenn es bei einem Fehler auch erklingen aber anders tönen soll). Bei openSUSE 12.2 ist beep allerdings ein alias von echo -en "\007", der dort neulich wirkungslos war, ich habe deshalb das verlinkte beep-Programm von Hand installiert. Am besten dann mit vollem Pfad aufrufen.


mount /dev/sdb1 /mnt && /usr/local/bin/beep -f500 -l100 || /usr/local/bin/beep -f100 -l200 -r2

andy135
14.09.12, 19:32
geht das dann auch, wenn man erfolgreich umount gemacht hat ? Da an meinem Server nur eine Tastatur dranhängt, möcht ich ein script machen, welches mir die tastatureingabe abfrägt und bei drücken eines bestimmten buchstabens den stick umounted. habe da schon ein paar beispiele im internet gesehen. mal sehen ob ich es hinbekomme.

Rain_maker
14.09.12, 19:47
Fürs Protokoll:


Da bin ich grad ratlos, weshalb dies bei dir anders ist, vielleicht hat es ja etwas mit vmware zu tun...

Das wäre auch für mich der Hauptverdächtige, auf "echtem Eisen" verschwindet beim Ausstöpseln natürlich auch die Gerätedatei und zwar augenblicklich.

Wenn man bedenkt, daß die USB-Geräte von der Virtualiserungssoftware zunächst mal vom Host an den Gast durchgereicht werden müssen, damit man sie im Gast überhaupt sieht, dann könnte man vermuten, daß es beim "Rückweg" ähnlich sein dürfte und dann eben ein Weilchen dauert.

Mit anderen Worten, das ist wohl eher kein udev/Linux/openSUSE-Problem sondern riecht sehr nach einem Problem mit VMware.

Greetz,

RM

andy135
14.09.12, 19:48
nein maker,

das mit dem Durchreichen zu VMWare und dem Lösen funktioniert bestens.

Rain_maker
14.09.12, 19:51
Also, wenn es -wie Du selbst sagst- eine Weile dauert, bis der Kram weg ist, dann habe ich eine andere Vorstellung von "bestens" (aber deshalb habe ich auch noch direkt nach dem Absenden des letzten Posts einen Satz hinzugefügt).

andy135
14.09.12, 20:00
ich versuche es ja auch erst virtuell, bevor ich meinen richtigen server funktionsuntüchtig mache..... ;-)

Rain_maker
14.09.12, 20:52
ich versuche es ja auch erst virtuell, bevor ich meinen richtigen server funktionsuntüchtig mache..... ;-)

Das ist mir schon klar, aber mein Post galt eher als Anmerkung für Querleser dieses Threads, (die z.B. wirklich ein Problem mit udev haben) damit diese spätestens dann wissen, daß der Titel des Threads nicht unbedingt zu ihrem Problem passt.

Ach ja, aber ein paar Anregungen hätte ich dann doch noch, denn das hier



SUSBSYTEMS=="usb", KERNEL=="sd?1",SYSFS{serial}=="0805.....ae",SYMLIN K+="backup", RUN+="/bin/mount -t ntfs-3g /media/testlin" ist nicht wirklich das Gelbe vom Ei.

1) SYSFS ist "deprecated" und fliegt in (naher?) Zukunft aus udev heraus, besser "ATTR" bzw. "ATTRS" verwenden (je nachdem, was passt, "udevadm info --query=all --attribute-walk --name=/dev/$GERÄTEDATEI" ist Dein Freund)

2) Wenn man schon etwas Komplexeres vor hat, dann sollte man udev nur für das Verwenden, wozu er wirklich das Mittel der Wahl ist, Devicenodes/Symlinks/Rechte + _einen_ Befehl.

Statt im RUN irgendwelche einzelnen Befehle zu schreiben und möglicherweise noch weitere Regeln für jeweils einen weiteren Befehl zu basteln, sollte man das, was man da vorhat, in ein Script schreiben und dieses von "RUN" ausführen lassen (absoluten Pfad angeben).

Der Name des Symlinks lässt vermuten, was Du da vorhast, wieso also nicht zuerst ein Backupscript schreiben, das alles macht, was man will und wenn dieses so läuft, wie man will, bastelt man eine udev-Regel drumherum?

Den Eintrag in der fstab könnte man sich dann übrigens auch sparen (root darf auch ohne Eintrag in die fstab mounten).

3) Sollte das mit dem Backup stimmen:

=> Ein Backup von Dateien/Ordnern eines Linuxsystems auf NTFS ist alles andere als eine gute Idee (Stichwort Rechte), Ausnahme Archive (tar).

4) Mehr für die B-Note:

udev kennt ACTION=="add" und ACTION=="remove"


Greetz,

RM

andy135
14.09.12, 21:21
Danke für die ausführliche Antwort. Werde mal ne Nacht drüber schlafen und das am Wochenende mal testen. Ihr hört wieder von mir, :) vermutlich eher früher als später.....

andy135
14.09.12, 21:26
Das mit den Rechten von NTFS ist mir eher zweitrangig, denn ich benutze den Stick eigentlich nur unter Windows. Ich möchte den Stick nur auf den Server als Backup kopieren, damit keine Dateien verloren gehen... Und ich möchte entlich mal meinen eigenen, selbstgebastelten NAS fertig haben.

andy135
15.09.12, 10:54
wollte das Programm Beep benutzen, leider kann ich es ned installieren. Gibt es das nicht mehr unter Suse12.1 ? Gibt es gute alternativen ?

Rain_maker
15.09.12, 11:14
alias beep

1234567890

andy135
15.09.12, 12:01
Schon klar, aber Yast Software-Management findet das Beep-Programm nicht. Auch bei rpmseek habe ich nichts für Suse gefunden.....

buzz768
15.09.12, 12:10
Wenn es kein rpm dafür gibt, kann man ein Programm auch ruhig mal selbst kompilieren, evtl. musst du vorher noch make und gcc installieren.


wget http://www.johnath.com/beep/beep-1.3.tar.gz
tar xf beep-1.3.tar.gz
cd beep-1.3/
make
sudo make INSTALL_DIR=/usr/local/bin/ MAN_DIR=/usr/local/man/man1 install

andy135
15.09.12, 12:51
Ok danke hat wunderbar geklappt. Bei erfolgreichem mounten spuckt er mir nun auch die gewünschten Tonfolgen aus. ( mount /dev/backup /media/testlin && /usr/local/bin/beep -f500 -l100 || /usr/local/bin/beep -f100 -l200 -r2 ). Aber wenn ich dasselbe mit umount mache ( umount /dev/backup /media/testlin && /usr/local/bin/beep -f500 -l100 || /usr/local/bin/beep -f100 -l200 -r4 ), sagt er mir, dass der Ordner nicht gemountet ist, obwohl ich dann beim Nachschauen mit ls ichts finde, also ist er nicht mehr gemountet.

PS: bei /dev/backup ist backup die erzeugte Gerätedatei von udev

buzz768
15.09.12, 13:06
umount /dev/backup /media/testlin
umount erwartet entweder das Device oder den Mountpunkt, nicht beides. Werden mehrere Devices oder Verzeichnisse angegeben, werden diese alle nacheinander ausgehängt. umount versucht also, nachdem /dev/backup ausgehängt wurde, auch /media/testlin auszuhängen, was natürlich nicht geht, deshalb ist der Rückgabewert >0

andy135
15.09.12, 16:14
hallo, ok umount klappt auch, war zudem noch auf der Konsole im entsprechenden Verzeichnis. Jetzt wollte ich folgende Befehlszeile in die fstab direkt eintragen und habe dabei das noauto wieder rausgenommen:

/dev/sdb1 /mnt && /usr/local/bin/beep -f500 -l100 || /usr/local/bin/beep -f100 -l200 -r2 vfat useer,users,gid=users,umask=002 0 0

ist die Syntax so für die fstab richtig ? Klappt irgendwie nicht, oder kann man das so überhaupt machen ?

buzz768
15.09.12, 16:54
kann man das so überhaupt machen ?
nein ;) http://wiki.ubuntuusers.de/fstab

andy135
15.09.12, 17:40
was ich noch nicht so ganz begreife ist, wenn ich als root under /media einen ordner anlege zum nounten, ist er nach dem uomunten und neustarten des pc´s wieder weg. lege ich hingegen einen ordner in einm systemuser verzeichnis an, bleibt es erhalten. hat es was mit root zu tun ?

buzz768
15.09.12, 18:07
$ mount | grep media
tmpfs on /media type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)

So sieht das unter Suse 12.2 aus, d.h. alles was nach /media geschrieben wird, landet im Arbeitsspeicher, ist nach dem Reboot also weg. Das betrifft natürlich nur die Mountverzeichnisse - was dorthin gemountet wurde befindet sich ja physisch woanders. War mir bis eben neu, dass Suse so verfährt, ist wohl Teil der systemd-Philosophie. Suse nutzt systemd seit 12.1 anstelle von SysVinit.

andy135
15.09.12, 18:48
was bedeutet eigentlich immer die ausgabe beim verbinden mit dem usb-stick:

... sd 9:0:0:0: [sdb] Asking for cache data failed
usw.

kann man diese meldungen nicht "ausschalten" ?