GNU/Linux >> Znalost Linux >  >> Cent OS

Průvodce pro začátečníky Udev v Linuxu

Udev je správce zařízení pro linuxové jádro. Udev dynamicky vytváří nebo odstraňuje soubory uzlů zařízení při spouštění v adresáři /dev pro všechny typy zařízení. Udev je nyní součástí systemd, jak můžete vidět zobrazením názvů souborů „udev“, které jsou součástí balíčku systemd RPM.

# rpm -ql systemd | grep udev
/etc/udev
/etc/udev/hwdb.bin
/etc/udev/rules.d
/etc/udev/udev.conf
/usr/bin/udevadm
...

Démon Udev, systemd-udevd , přijímá ueventy zařízení přímo z jádra, kdykoli je zařízení přidáno nebo odebráno ze systému. Pro každou událost systemd-udevd provede odpovídající instrukce specifikované v pravidlech Udev.

Názvy souborů zařízení se mohou změnit, když jsou disky odebrány ze systému z důvodu selhání. Zařízení jsou například při spouštění pojmenována /dev/sda, /dev/sdb a /dev/sdc. Ale při příštím restartu /dev/sdb selže a to, co bylo dříve /dev/sdc, se jmenuje /dev/sdb. Všechny konfigurační odkazy na /dev/sdb nyní obsahují obsah, na který původně odkazoval /dev/sdc.

Řešením, jak se vyhnout tomuto typu situace, je zaručit konzistentní názvy zařízení prostřednictvím restartování. Udev můžete nakonfigurovat tak, aby vytvářel trvalá jména a používal tato jména v tabulce připojení systému souborů, /etc/fstab, nebo jako argument příkazu mount.

Soubory a adresáře pravidel Udev

Pravidla Udev určují, jak identifikovat zařízení a jak jim přiřadit název, který je trvalý po restartování nebo výměně disku. Když Udev přijme událost zařízení, porovná nakonfigurovaná pravidla s atributy zařízení v sysfs, aby identifikoval zařízení. Pravidla mohou také specifikovat další programy, které se mají spustit jako součást zpracování událostí zařízení.
Soubory pravidel Udev jsou umístěny v následujících adresářích:

  • /lib/udev/rules.d/ – Výchozí adresář pravidel
  • /etc/udev/rules.d/ – Adresář vlastních pravidel. Tato pravidla mají přednost.

Soubory pravidel musí mít jedinečné názvy. Soubory v adresáři vlastních pravidel přepíší soubory se stejným názvem ve výchozím adresáři pravidel. Soubory pravidel jsou tříděny a zpracovávány v lexikálním pořadí. Následuje částečný seznam souborů pravidel z výchozího a vlastního adresáře pravidel:

# ls -l /lib/udev/rules.d/
total 348
-r--r--r--. 1 root root  7266 Aug  5  2017 10-dm.rules
-r--r--r--. 1 root root  2454 Aug  5  2017 11-dm-lvm.rules
-rw-r--r--. 1 root root  2865 Jan 25 16:05 11-dm-mpath.rules
-r--r--r--. 1 root root  1499 Aug  5  2017 13-dm-disk.rules
-rw-r--r--. 1 root root   553 Aug  6  2017 39-usbmuxd.rules
-rw-r--r--. 1 root root  1622 Mar  7 13:27 40-redhat.rules
...
# ls -l /etc/udev/rules.d/
total 8
-rw-r--r--. 1 root root 709 Aug  4  2017 70-persistent-ipoib.rules
-rw-r--r--. 1 root root  96 Apr 21 05:09 70-persistent-net.rules
lrwxrwxrwx. 1 root root   9 Sep 29  2014 80-net-name-slot.rules -> /dev/null

Vzorová pravidla Udev

Níže uvedený příklad obsahuje vybrané položky z /lib/udev/rules.d/50-udev-default.rules soubor. Tento soubor pravidel obsahuje více než 60 položek.

# cat /lib/udev/rules.d/50-udev-default.rules 
# do not edit this file, it will be overwritten on update

SUBSYSTEM=="virtio-ports", KERNEL=="vport*", ATTR{name}=="?*", SYMLINK+="virtio-ports/$attr{name}"

# select "system RTC" or just use the first one
SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc"
SUBSYSTEM=="rtc", KERNEL=="rtc0", SYMLINK+="rtc", OPTIONS+="link_priority=-100"

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb"
SUBSYSTEM=="input", ENV{ID_INPUT}=="", IMPORT{builtin}="input_id"
ENV{MODALIAS}!="", IMPORT{builtin}="hwdb --subsystem=$env{SUBSYSTEM}"

ACTION!="add", GOTO="default_permissions_end"

SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666"
SUBSYSTEM=="tty", KERNEL=="tty", GROUP="tty", MODE="0666"
SUBSYSTEM=="tty", KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620"
SUBSYSTEM=="tty", KERNEL=="sclp_line[0-9]*", GROUP="tty", MODE="0620"
SUBSYSTEM=="tty", KERNEL=="ttysclp[0-9]*", GROUP="tty", MODE="0620"
....

Vybrané položky pomáhají při popisu syntaxe souborů pravidel.
1. Komentáře začínají znakem #.
2. Každý řádek bez komentáře v souboru pravidel se skládá ze seznamu jednoho nebo více párů klíč–hodnota oddělených čárkou. Existují dva typy klíčů:

  • Klíče shody
  • Klíče přiřazení

3. Pokud všechny klíče shody odpovídají své příslušné hodnotě, pravidlo se použije a klíčům přiřazení se přiřadí zadaná hodnota. Každý klíč má odlišnou funkci v závislosti na operátorovi. Platné operátory jsou:

  • == :Porovnejte pro rovnost
  • != :Porovnání pro nerovnost
  • = :Přiřazení hodnoty ke klíči
  • += :Přidá hodnotu k aktuálním hodnotám klíče
  • := :Přiřaďte klíči konečnou hodnotu. Zakázat jakékoli pozdější změny podle jakýchkoli pozdějších pravidel.

4. V pravidlech Udev je podporováno také porovnávání vzorů ve stylu shellu (*, ?, []).

Klíče shody

Následující názvy klíčů se používají k porovnání s vlastnostmi zařízení. Některé klíče se také shodují s vlastnostmi nadřazených zařízení v sysfs, a nikoli pouze se zařízením, které událost vygenerovalo. Pokud je v jednom pravidle specifikováno více klíčů, musí se všechny tyto klíče shodovat.

  • AKCE :Shodujte se s názvem akce události.
  • DEVPATH :Porovnejte cestu devpath zařízení události.
  • JÁDRO :Shodujte se s názvem zařízení události.
  • NAME :Shoduje se s názvem síťového rozhraní. Lze jej použít, pokud byl klíč NAME nastaven v některém z předchozích pravidel.
  • SYMLINK :Shodujte se s názvem symbolického odkazu, který cílí na uzel. Lze jej použít, pokud byl v některém z předchozích pravidel nastaven klíč SYMLINK. Může existovat více symbolických odkazů, ale musí se shodovat pouze jeden.
  • SUBSYSTÉM :Shoduje se se subsystémem zařízení události.
  • TEST{maska ​​osmičkového režimu :Otestujte existenci souboru. Můžete zadat masku osmičkového režimu.

Mezi další klíče shody patří DRIVER, ATTR{název souboru}, JÁDRA, SUBSYSTÉMY, DRIVERS, ATTRS{název souboru}, TAGS, ENV{klíč}, TAG, PROGRAM a VÝSLEDEK.

Klíče přiřazení

Následující klíče mohou mít přiřazené hodnoty:

  • NAME – Název, který se má použít pro síťové rozhraní. Název uzlu zařízení nemůže Udev změnit, lze vytvořit pouze další symbolické odkazy.
  • SYMLINK – Název symbolického odkazu, který cílí na uzel
  • VLASTNÍK, SKUPINA, REŽIM – Oprávnění pro uzel zařízení
  • MOŽNOSTI – Možnosti pravidel a zařízení. Možnost ignore_remove použitá v příkladu znamená „Neodstraňujte uzel zařízení, když zařízení zmizí.“

Mezi další klíče přiřazení patří ATTR{klíč}, ENV{klíč}, TAG, RUN{type}, LABEL, GOTO, IMPORT{type}, WAIT_FOR a OPTIONS.

Náhrady řetězců

Klávesy NAME, SYMLINK, PROGRAM, OWNER, GROUP, MODE a RUN podporují mnoho substitucí řetězců podobných printf. Náhrady použité v příkladu jsou:

  • %M – Hlavní číslo jádra zařízení
  • %m – Vedlejší číslo jádra zařízení

Jsou podporovány další substituce řetězců. Všechny podporované substituce a podrobnosti o dalších klíčích shody, dalších klíčích přiřazení a dalších možnostech pravidel a zařízení najdete na manuálové stránce udev.

Nástroj udevadm

Nástroj udevadm je nástroj pro správu uživatelského prostoru pro Udev. Kromě jiných funkcí můžete použít udevadm k dotazování sysfs a získání atributů zařízení, které vám pomohou při vytváření pravidel Udev, která odpovídají zařízení. Zobrazení využití udevadm:

# udevadm --help
udevadm [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS]

Send control commands or test the device manager.

Commands:
  info          Query sysfs or the udev database
  trigger       Request events from the kernel
  settle        Wait for pending udev events
  control       Control the udev daemon
  monitor       Listen to kernel and udev events
  test          Test an event run
  test-builtin  Test a built-in command

Můžete také získat použití pro každý z příkazů udevadm. Chcete-li například získat nápovědu k použití příkazu info:

# udevadm info --help
udevadm info [OPTIONS] [DEVPATH|FILE]

Query sysfs or the udev database.

  -h --help                   Print this message
     --version                Print version of the program
  -q --query=TYPE             Query device information:
       name                     Name of device node
       symlink                  Pointing to node
       path                     sysfs device path
       property                 The device properties
       all                      All values
  -p --path=SYSPATH           sysfs device path used for query or attribute walk
  -n --name=NAME              Node or symlink name used for query or attribute walk
  -r --root                   Prepend dev directory to path names
  -a --attribute-walk         Print all key matches walking along the chain
                              of parent devices
  -d --device-id-of-file=FILE Print major:minor of device containing this file
  -x --export                 Export key/value pairs
  -P --export-prefix          Export the key name with a prefix
  -e --export-db              Export the content of the udev database
  -c --cleanup-db             Clean up the udev database

Příklad obslužného programu udevadm

Následuje několik příkladů. Chcete-li v databázi Udev zadat cestu k zařízení /dev/xvdd:

# udevadm info --query=path --name=/dev/xvdd 
/devices/vbd-5696/block/xvdd

Chcete-li se dotázat databáze Udev na všechny informace o zařízení pro /dev/xvda:

# udevadm info --query=all --name=/dev/xvda
P: /devices/vbd-768/block/xvda
N: xvda
E: DEVNAME=/dev/xvda
E: DEVPATH=/devices/vbd-768/block/xvda
E: DEVTYPE=disk
E: DM_MULTIPATH_TIMESTAMP=1524287355
E: ID_PART_TABLE_TYPE=dos
E: MAJOR=202
E: MINOR=0
E: MPATH_SBIN_PATH=/sbin
E: SUBSYSTEM=block
E: TAGS=:systemd:
E: USEC_INITIALIZED=476119

Chcete-li vytisknout všechny vlastnosti sysfs /dev/xvda, zadejte následující. Tyto vlastnosti lze použít v pravidlech Udev, aby odpovídaly zařízení. Vytiskne všechna zařízení v řetězci, až po kořen sysfs.

# udevadm info --attribute-walk --name=/dev/xvda

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/vbd-768/block/xvda':
    KERNEL=="xvda"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{ro}=="0"
    ATTR{size}=="41943040"
    ATTR{stat}=="   16775        4   686095    36372     2953      313   203104    42044        0    19603    78392"
    ATTR{range}=="16"
    ATTR{discard_alignment}=="0"
    ATTR{ext_range}=="16"
    ATTR{alignment_offset}=="0"
    ATTR{badblocks}==""
    ATTR{inflight}=="       0        0"
    ATTR{removable}=="0"
    ATTR{capability}=="10"

  looking at parent device '/devices/vbd-768':
    KERNELS=="vbd-768"
    SUBSYSTEMS=="xen"
    DRIVERS=="vbd"
    ATTRS{devtype}=="vbd"
    ATTRS{nodename}=="device/vbd/768"

Vytvoření symbolického odkazu na uzel zařízení

Důležité je pořadí, v jakém se pravidla vyhodnocují. Při vytváření vlastních pravidel chcete, aby byla tato vyhodnocena před výchozími hodnotami. Protože se pravidla zpracovávají v lexikálním pořadí, vytvořte soubor pravidel s názvem souboru, jako je /etc/udev/rules.d/10-local.rules, aby byl zpracován jako první.

Následující pravidlo vytváří symbolický odkaz /dev/my_disk na uzel zařízení /dev/xvdd. Můžete vytvořit pravidlo Udev pro změnu názvu síťového rozhraní, ale název uzlu zařízení nemůže Udev změnit. Pro uzly zařízení lze vytvořit pouze další symbolické odkazy.

KERNEL=="xvdd", SUBSYSTEM=="block", SYMLINK="my_disk"

Spusťte udevadm trigger pro zpracování souborů pravidel:

# udevadm trigger

Symbolický odkaz nyní existuje.

# ls –l /dev/my*
lrwxrwxrwx. ... /dev/my_disk -> xvdd

Odeberte soubor 10-local.rules a spusťte udevadm trigger k odstranění symbolického odkazu.


Cent OS
  1. Oprávnění pro Linux 101

  2. Obnovení hesla root v systému Linux

  3. Průvodce pro začátečníky multipathingem Device Mapper (DM).

  1. Průvodce pro začátečníky ke konfiguraci modulu jádra v Linuxu

  2. Jak řešit problémy s výkonem v Linuxu – Průvodce pro začátečníky

  3. Udev:přejmenování mého síťového rozhraní

  1. Průvodce linuxovým terminálem pro začátečníky

  2. Co je CentOS – průvodce pro začátečníky

  3. Migrace CentOS 8 na Oracle Linux 8:Průvodce krok za krokem