Benutzer-Werkzeuge

Webseiten-Werkzeuge


udev

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
udev [2013-11-14 02:58:51] – [UDEV kurz und gut] manfredudev [2016-04-12 22:50:01] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +===== UDEV =====
 +
 +
 +==== UDEV kurz und gut ====
 +
 +  * [[http://wiki.ubuntuusers.de/udev]]
 +
 +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 /sys/class/block/);do echo "- ${i} ------------------------------";udevadm test /sys/class/block/${i} 2>/dev/null | egrep 'DEVNAME=|ID_SERIAL|ID_VENDOR';done
 +
 +Gerät-Symlink-Beziehung anzeigen:
 +  > udevadm info --root --query=symlink --name=/dev/GERÄTEDATEI_ODER_SYMLINK
 +  > udevadm info --root --query=symlink --name=/dev/dvd
 +  /dev/cdrom /dev/cdrw /dev/disk/by-id/ata-HL-DT-ST_DVD+_-RW_GH50N_K25ACDN2807 /dev/disk/by-id/wwn-0x5031480000000000 /dev/disk/by-path/pci-0000:00:1f.2-scsi-1:0:0:0 /dev/dvd /dev/dvdrw
 +  > udevadm info --root --query=symlink --name=/dev/dm-0
 +  /dev/disk/by-id/dm-name-system-temp /dev/disk/by-id/dm-uuid-LVM-5Iyxly1W0Hvt9kiy9xRQ5z3Hc5oThL7qDdITkF9vSqJiDMTxYyHa7xE8wnZef4a3 /dev/disk/by-label/TEMP /dev/disk/by-uuid/acdaff76-c3de-488b-8485-7a0e0a56620e /dev/mapper/system-temp /dev/system/temp
 +
 +
 +==== UDEV Restart ====
 +
 +wenn man an den UDEV-Regeln Veränderungen vorgenommen hat, dann ist es oft sinnvoll UDEV neu zu starten:
 +  # /etc/init.d/udev reload 
 +
 +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
 +  # /etc/init.d/udevtrigger restart
 +
 +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 /dev/home/fritz 
 +  lrwxrwxrwx 1 root root 20 2010-03-19 15:27 /dev/home/fritz -> ../mapper/home-fritz
 +
 +... sondern die vom Kernel angelegte Datei:
 +
 +  # ls -l /dev/mapper/home-fritz
 +  brw-rw---- 1 root disk 252, 0 2010-03-19 15:30 /dev/mapper/home-fritz
 +
 +Mit diesem Kommando bekommt man dann alle Infos, die von UDEV ausgewertet werden können:
 +
 +  udevadm info -a -p $(udevadm info -q path -n /dev/mapper/home-fritz)
 +  
 +  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 '/devices/virtual/block/dm-5':
 +    KERNEL=="dm-5"
 +    SUBSYSTEM=="block"
 +    DRIVER==""
 +    ATTR{range}=="1"
 +    ATTR{ext_range}=="1"
 +    ATTR{removable}=="0"
 +    ATTR{ro}=="0"
 +    ATTR{size}=="8192"
 +    ATTR{alignment_offset}=="0"
 +    ATTR{capability}=="10"
 +    ATTR{stat}=="     224        0     1792     2950        1        0        8        0        0      480     2950"
 +
 +----
 +
 +  udevadm info -q path -n /dev/mapper/home-fritz
 +    /devices/virtual/block/dm-5
 +
 +----
 +
 +  fgrep -H fritz /sys/block/*/dm/name
 +    /sys/block/dm-5/dm/name:System-fritz
 +
 +  fgrep -l fritz /sys/block/*/dm/name
 +    /sys/block/dm-5/dm/name
 +
 +----
 +
 +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 **/dev/mapper/home-fritz**.
 +
 +Jetzt müssen wir den Kernel-Namen herausfinden:
 +
 +  # basename $(udevadm info -q path -n /dev/mapper/home-fritz)
 +  dm-4
 +  # basename $(udevadm info -q path -n /dev/mapper/home-fritz2)
 +  dm-5
 +
 +Und damit können wir jetzt unsere Regel formulieren:
 +
 +  # echo 'KERNEL=="dm-4|dm-5", OWNER="fritz", GROUP="gruppe", MODE="0660"' >> /etc/udev/rules.d/meine.rules
 +
 +Jetzt braucht nur noch UDEV neu gestartet werden, und schon sind die Rechte immer wie gewünscht:
 +
 +  # /etc/init.d/udev restart
 +
 +Nach dem Neustart von UDEV gehört das LV nur noch Fritz:
 +
 +  # ls -l /dev/mapper/home-fritz
 +  brw-rw---- 1 fritz fritz 252, 0 2010-03-19 15:30 /dev/mapper/home-fritz
 +
 +==== 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 ///dev/sdb//.
 +
 +  # 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 //Attribute// genannt),
 +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 'idVendor|idProduct|serial'
 +      ATTRS{idVendor}=="1307"
 +      ATTRS{idProduct}=="0165"
 +      ATTRS{serial}=="97921499123129"
 +      ATTRS{idVendor}=="1d6b"
 +      ATTRS{idProduct}=="0002"
 +      ATTRS{serial}=="0000:00:1d.7"
 +
 +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 /etc/udev/rules.d/usbstick.rules
 +  ATTRS{idVendor}=="1307", ATTRS{idProduct}=="0165", ATTRS{serial}=="97921499123129", OWNER="fritz", GROUP="fritz", MODE="0600", NAME="usbstick"
 +
 +Zu beachten ist hierbei, dass die Eigenschaften, die zur Identifikation verwendet werden, //Vergleichsoperationen// sind.
 +Deshalb enthalten sie auch ein doppeltes Gleichheitszeichen: "=="!
 +
 +Die Eigenschaften, die wir verändern wollen, sind //Zuweisungsoperationen//, hier steht nur ein einfaches Gleichheitszeichen: "="!
 +
 +Jetzt braucht nur noch UDEV neu gestartet werden, und schon sind die Rechte immer wie gewünscht:
 +
 +  # /etc/init.d/udev restart
 +
 +Nach dem Neustart von UDEV stecken wir den USB-Stick erneut an:
 +
 +  # ls -l /dev/usbstick
 +  brw------- 1 fritz fritz   8, 17 2010-03-23 09:56 /dev/usbstick
 +
 +... 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="usbstick"
 +
 +gegen ein
 +
 +  SYMLINK+="usbstick"
 +
 +aus.
 +
 +Dann würde das ganze so aussehen: 
 +
 +  # ls -la /dev/sdb* /dev/usbstick
 +  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 /dev/usbstick -> sdb
 +
 +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}=="1"
 +
 +Die komplette Regel würde dann so aussehen:
 +
 +  vi /etc/udev/rules.d/usbstick.rules
 +  ATTR{partition}=="1", ATTRS{idVendor}=="1307", ATTRS{idProduct}=="0165", ATTRS{serial}=="97921499123129", OWNER="fritz", GROUP="fritz", MODE="0600", SYMLINK+="usbstick"
 +
 +Jetzt noch einmal UDEV neu starten:
 +
 +  # /etc/init.d/udev restart
 +
 +... den Stick erneut anstecken ... und schon ist alles wie gewünscht:
 +
 +  # ls -la /dev/sdb* /dev/usbstick
 +  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 /dev/usbstick -> sdb1
 +
 +==== Link über udev anlegen lassen ====
 +
 +  * [[http://www.multimedia4linux.de/howto/DE-DVD-RAM-HOWTO-5.html#ss5.3]]
 +
 +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 /etc/udev/rules.d/ gespeichert und können sich auch je nach Distribution unterscheiden.
 +
 +Beispiel für Ubuntu, Kubuntu und Xubuntu: Öffnen Sie die Datei /etc/udev/rules.d/40-permissions.rules und fügen Sie folgende Zeile ein:
 +
 +  ENV{ID_CDROM_DVD_RAM}=="?*"             GROUP="dvdram"
 +
 +Öffnen Sie die Datei /etc/udev/rules.d/60-symlinks.rules und fügen Sie folgende zwei Zeilen ein:
 +
 +  # Create /dev/dvdram* symlinks for DVD-RAM devices
 +  ENV{ID_CDROM_DVD_RAM}=="?*",            SYMLINK+="dvdram", MODE="0777"
 +
 +Öffnen Sie die Datei /etc/groups und fügen Sie noch analog der Gruppe cdrom die Gruppe dvdram ein.
 +
 +==== weitere Links ====
 +
 +  * [[http://reactivated.net/writing_udev_rules.html]]
 +  * [[http://ubuntuforums.org/showthread.php?t=168221&highlight=automount+devices&page=1]]