udev
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| udev [2013-11-14 02:44:27] – manfred | udev [2016-04-12 22:50:01] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ===== UDEV ===== | ||
| + | |||
| + | |||
| + | ==== UDEV kurz und gut ==== | ||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | alle Geräte neu einzulesen: | ||
| + | > udevadm trigger | ||
| + | |||
| + | udev neu starten: | ||
| + | > service udev reload | ||
| + | |||
| + | Geräteinfos von allen Block-Geräten anzeigen: | ||
| + | > for i in $(ls / | ||
| + | |||
| + | Gerät-Symlink-Beziehung anzeigen: | ||
| + | > udevadm info --root --query=symlink --name=/ | ||
| + | > udevadm info --root --query=symlink --name=/ | ||
| + | /dev/cdrom /dev/cdrw / | ||
| + | > udevadm info --root --query=symlink --name=/ | ||
| + | / | ||
| + | |||
| + | |||
| + | ==== UDEV Restart ==== | ||
| + | |||
| + | wenn man an den UDEV-Regeln Veränderungen vorgenommen hat, dann ist es oft sinnvoll UDEV neu zu starten: | ||
| + | # / | ||
| + | |||
| + | oder | ||
| + | # service udev reload | ||
| + | |||
| + | neu einlesen lassen. | ||
| + | |||
| + | Wurden Regeln für fest eingebaute Geräte (z.B. PCI-Karten) festgelegt, muss UDEV zusätzlich dazu veranlasst werden, alle Geräte neu einzulesen! | ||
| + | |||
| + | Dies geschieht mittels | ||
| + | # / | ||
| + | |||
| + | oder | ||
| + | # udevadm trigger | ||
| + | |||
| + | Wurden die Regel für entfernbare Geräte erstellt, müssen diese einfach nur entfernt und wieder eingesteckt werden. | ||
| + | |||
| + | |||
| + | ==== LVM + UDEV ==== | ||
| + | |||
| + | Es sollte **nicht** der Symlink verwendet werden: | ||
| + | |||
| + | # ls -la / | ||
| + | lrwxrwxrwx 1 root root 20 2010-03-19 15:27 / | ||
| + | |||
| + | ... sondern die vom Kernel angelegte Datei: | ||
| + | |||
| + | # ls -l / | ||
| + | brw-rw---- 1 root disk 252, 0 2010-03-19 15:30 / | ||
| + | |||
| + | Mit diesem Kommando bekommt man dann alle Infos, die von UDEV ausgewertet werden können: | ||
| + | |||
| + | udevadm info -a -p $(udevadm info -q path -n / | ||
| + | | ||
| + | Udevadm info starts with the device specified by the devpath and then | ||
| + | walks up the chain of parent devices. It prints for every device | ||
| + | found, all possible attributes in the udev rules key format. | ||
| + | A rule to match, can be composed by the attributes of the device | ||
| + | and the attributes from one single parent device. | ||
| + | | ||
| + | looking at device '/ | ||
| + | KERNEL==" | ||
| + | SUBSYSTEM==" | ||
| + | DRIVER=="" | ||
| + | ATTR{range}==" | ||
| + | ATTR{ext_range}==" | ||
| + | ATTR{removable}==" | ||
| + | ATTR{ro}==" | ||
| + | ATTR{size}==" | ||
| + | ATTR{alignment_offset}==" | ||
| + | ATTR{capability}==" | ||
| + | ATTR{stat}==" | ||
| + | |||
| + | ---- | ||
| + | |||
| + | udevadm info -q path -n / | ||
| + | / | ||
| + | |||
| + | ---- | ||
| + | |||
| + | fgrep -H fritz / | ||
| + | / | ||
| + | |||
| + | fgrep -l fritz / | ||
| + | / | ||
| + | |||
| + | ---- | ||
| + | |||
| + | Möchte man, dass ein bestimmtes logisches Laufwerk (erstellt mit LVM) ganz bestimmte Rechte bekommt, dann kann man das mit //udev// machen. | ||
| + | |||
| + | Und so geht das: | ||
| + | |||
| + | Als erstes legt man ein LV an, in unserem Fall lautet das LV **/ | ||
| + | |||
| + | Jetzt müssen wir den Kernel-Namen herausfinden: | ||
| + | |||
| + | # basename $(udevadm info -q path -n / | ||
| + | dm-4 | ||
| + | # basename $(udevadm info -q path -n / | ||
| + | dm-5 | ||
| + | |||
| + | Und damit können wir jetzt unsere Regel formulieren: | ||
| + | |||
| + | # echo ' | ||
| + | |||
| + | Jetzt braucht nur noch UDEV neu gestartet werden, und schon sind die Rechte immer wie gewünscht: | ||
| + | |||
| + | # / | ||
| + | |||
| + | Nach dem Neustart von UDEV gehört das LV nur noch Fritz: | ||
| + | |||
| + | # ls -l / | ||
| + | brw-rw---- 1 fritz fritz 252, 0 2010-03-19 15:30 / | ||
| + | |||
| + | ==== USB-Stick beim einstecken personalisieren ==== | ||
| + | |||
| + | Steckt man einen USB-Stick an, dann wird von UDEV eine neue Gerätedatei erstellt. | ||
| + | In unserem Fall ist das /// | ||
| + | |||
| + | # ls -la /dev/sdb | ||
| + | brw-rw---- 1 root disk 8, 16 2010-03-23 09:25 /dev/sdb | ||
| + | |||
| + | Jetzt ermitteln wir mit Hilfe dieser Gerätedatei alle Eigenschaften (bei UDEV werden sie // | ||
| + | die UDEV vom USB-Stick bekommen kann | ||
| + | und filtern davon die drei Eigenschaften raus, mit denen man den USB-Stick eindeutig identifizieren kann. | ||
| + | |||
| + | Dazu zählen Hersteller-ID (idVendor), Produkt-ID des Herstellers (idProduct) und Seriennummer (serial): | ||
| + | |||
| + | # udevadm info -a -p $(udevadm info -q path -n /dev/sdb) | egrep ' | ||
| + | ATTRS{idVendor}==" | ||
| + | ATTRS{idProduct}==" | ||
| + | ATTRS{serial}==" | ||
| + | ATTRS{idVendor}==" | ||
| + | ATTRS{idProduct}==" | ||
| + | ATTRS{serial}==" | ||
| + | |||
| + | Von dieser Ausgabe brauchen wir nur die ersten drei Zeilen, die letzten drei Zeilen gehören zu einem anderen Block. | ||
| + | |||
| + | Mit diesen Infos können wir schon eine Regel erstellen. | ||
| + | |||
| + | In diesem Beispiel möchte ich die folgenden Eigenschaften der Gerätedatei verändern: | ||
| + | |||
| + | - Besitzer | ||
| + | - Gruppe | ||
| + | - Rechte | ||
| + | - Name | ||
| + | |||
| + | diese zu verändernden Eigenschaften hängen wir hinter die zu verändernden einfach an: | ||
| + | |||
| + | vi / | ||
| + | ATTRS{idVendor}==" | ||
| + | |||
| + | Zu beachten ist hierbei, dass die Eigenschaften, | ||
| + | Deshalb enthalten sie auch ein doppeltes Gleichheitszeichen: | ||
| + | |||
| + | Die Eigenschaften, | ||
| + | |||
| + | Jetzt braucht nur noch UDEV neu gestartet werden, und schon sind die Rechte immer wie gewünscht: | ||
| + | |||
| + | # / | ||
| + | |||
| + | Nach dem Neustart von UDEV stecken wir den USB-Stick erneut an: | ||
| + | |||
| + | # ls -l / | ||
| + | brw------- 1 fritz fritz 8, 17 2010-03-23 09:56 / | ||
| + | |||
| + | ... und alles wie erwartet. | ||
| + | |||
| + | Man könnte aber auch sagen, dass man lieber einen sprechenden Symlink haben möchte und die Gerätedateinamen für die Laufwerke (der besseren Übersicht wegen) lieber unverändert lassen möchte. | ||
| + | |||
| + | Dann tauscht man in der oben genannten Regel das | ||
| + | |||
| + | NAME=" | ||
| + | |||
| + | gegen ein | ||
| + | |||
| + | SYMLINK+=" | ||
| + | |||
| + | aus. | ||
| + | |||
| + | Dann würde das ganze so aussehen: | ||
| + | |||
| + | # ls -la /dev/sdb* / | ||
| + | brw------- 1 fritz fritz 8, 16 2010-03-23 10:14 /dev/sdb | ||
| + | brw------- 1 fritz fritz 8, 17 2010-03-23 10:14 /dev/sdb1 | ||
| + | lrwxrwxrwx 1 root root 3 2010-03-23 10:14 / | ||
| + | |||
| + | Allerdings sieht man, dass der Symlink nicht auf die Partition zeigt und deshalb auch nicht zum //mounten// verwendet werden kann! | ||
| + | |||
| + | Um dieses Problem zu lösen, sagen wir einfach in der UDEV-Regel, das die erste Partition mit dem Sysmlink verknüpft werden soll. | ||
| + | Dazu muss nur eine ATTR-Regel hinzugefügt werden: | ||
| + | |||
| + | ATTR{partition}==" | ||
| + | |||
| + | Die komplette Regel würde dann so aussehen: | ||
| + | |||
| + | vi / | ||
| + | ATTR{partition}==" | ||
| + | |||
| + | Jetzt noch einmal UDEV neu starten: | ||
| + | |||
| + | # / | ||
| + | |||
| + | ... den Stick erneut anstecken ... und schon ist alles wie gewünscht: | ||
| + | |||
| + | # ls -la /dev/sdb* / | ||
| + | brw------- 1 fritz fritz 8, 16 2010-03-23 10:27 /dev/sdb | ||
| + | brw------- 1 fritz fritz 8, 17 2010-03-23 10:27 /dev/sdb1 | ||
| + | lrwxrwxrwx 1 root root 3 2010-03-23 10:27 / | ||
| + | |||
| + | ==== Link über udev anlegen lassen ==== | ||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | Einige moderne Distributionen wie z.B. Ubuntu verwenden udev um über Regeln die Links während des Bootens anzulegen. Leider fehlt oft die Regel um den Link auf /dev/dvdram anzulegen. Die Regeln werden unter / | ||
| + | |||
| + | Beispiel für Ubuntu, Kubuntu und Xubuntu: Öffnen Sie die Datei / | ||
| + | |||
| + | ENV{ID_CDROM_DVD_RAM}=="? | ||
| + | |||
| + | Öffnen Sie die Datei / | ||
| + | |||
| + | # Create / | ||
| + | ENV{ID_CDROM_DVD_RAM}=="? | ||
| + | |||
| + | Öffnen Sie die Datei /etc/groups und fügen Sie noch analog der Gruppe cdrom die Gruppe dvdram ein. | ||
| + | |||
| + | ==== weitere Links ==== | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
