# Udev rule für Dongles

## manuels

Hi,

ich möchte eine Udev-Rule für USB Mass Storage Devices schreiben.

Mein Versuch hierzu:

```
BUS="usb", DRIVERS="usb-driver", KERNEL="sd?1", NAME="%k", SYMLINK="usbdrive", GROUP="disk"

```

Dies wird allerdings von Udev abgelehnt:

```
Feb  9 19:01:13 roadrunner udevd[2654]: add_to_rules: invalid SUBSYSTEMS operation

Feb  9 19:01:13 roadrunner udevd[2654]: add_to_rules: invalid rule '/etc/udev/rules.d/10-local.rules:1'

Feb  9 19:01:40 roadrunner udevd[2654]: add_to_rules: invalid SUBSYSTEMS operation

Feb  9 19:01:40 roadrunner udevd[2654]: add_to_rules: invalid rule '/etc/udev/rules.d/10-local.rules:1'

Feb  9 19:02:58 roadrunner udevd[2654]: add_to_rules: invalid SUBSYSTEMS operation

Feb  9 19:02:58 roadrunner udevd[2654]: add_to_rules: invalid rule '/etc/udev/rules.d/10-local.rules:1'

```

Was mach ich denn falsch?

----------

## firefly

schau dir mal die anderen .rules dateien an, dann wird der Syntax-fehler eventuell dir ersichtlich

----------

## manuels

hmm, ok.

Nächster Versuch:

```
BUS=="usb", DRIVERS=="usb-driver", KERNEL=="sd?1", NAME=="%k", SYMLINK+="usbdrive", GROUP="disk"

```

klappt auch nicht.  :Sad: 

----------

## firefly

lass mal das NAME=="" weg dann sollte es klappen

----------

## manuels

nee, das klappt auch nicht. Die Datei sollte dann doch /dev/usbdrive heißen, oder?

----------

## revilootneg

manuels, ich verwende diese Zeile für meine USB Massenspeicher (flash und hdds):

```
SUBSYSTEMS=="scsi", ATTRS{model}=="Stick 2.0 ME",   NAME="%k"    SYMLINK="usbstick%n"
```

Dies ergibt dann das device /dev/usbstick1 für den ersten Stick.

Das model-Attribut ist in der Regel was in der Ausgabe von dmesg nach den Anschließen steht.

Sicher geht's mit

```
cat /sys/class/scsi_disk/<some_numbers_here>/device/model
```

----------

## manuels

hmm, das möchte ich ja gerade nicht.

Ich möchte, dass _jeder_ usb mass storage (falls mehrere devices angesteckt sind, natürich nur der erste) als /dev/usbdrive zu mounten ist, sodass ich sd{b,c,d,...} via "mount /mnt/usb" mounten kann.

Das will ich machen, da, falls ein usb-stick ohne "un-zu-mounten" herausgezogen wird, der nächste als sdc und nicht als sdb erkannt wird.

----------

## revilootneg

Ich füge für die drei verschiedenen Modelle, die ich hier liegen habe einfach einen neuen Eintrag mit entsprechender Modelbezeichnung hinzu.

Ich habe mit deinen Versuchen experimentiert:

```
SUBSYSTEMS=="scsi", KERNEL=="sd?1", NAME="%k", SYMLINK="usbdrive%n", GROUP="disk"
```

läuft bei mir. Wenn du die DRIVERS-Bezeichnung noch korrigieren kannst, dann sollte es auch nur für usb-devices klappen.

Okay, schau mal hier. Insbesondere der untere Teil zu udevinfo sollte helfen. Ich habe ne Lösung gefunden, die für jeden neuen Stick den alten Symlink überschreibt und /dev/usbdrive1 auf den neuen Stick verlinkt. Halte ich für unklug, aber man kann das machen.

----------

## manuels

hmm, das kann man ja noch ein bisschen abwandeln:

```
cat /etc/udev/rules.d/10-local.rules

#SUBSYSTEMS=="scsi", KERNEL=="sd?1", NAME="%k", RUN+="if [ ! -e /dev/usbdrive ]; then ln -s /dev/%k /dev/usbdrive; fi"

SUBSYSTEMS=="scsi", KERNEL=="sd?1", NAME="%k", RUN+="if [ ! -e /dev/usbdrive ]; then ln -s /dev/%k /dev/usbdrive; else touch /tmp/nodrive; fi"

SUBSYSTEMS=="scsi", KERNEL=="sd?1", NAME="%k", SYMLINK="usbdrive%n", GROUP="disk
```

aber wenn ich 

```
udevstart
```

ausführe, wird weder usbdrive* noch /tmp/nodrive erstellt.

Was mach ich da falsch??   :Confused: 

----------

