GNU/Linux >> Belajar Linux >  >> Cent OS

Panduan Pemula untuk Udev di Linux

Udev adalah manajer perangkat untuk kernel Linux. Udev secara dinamis membuat atau menghapus file node perangkat saat boot di direktori /dev untuk semua jenis perangkat. Udev sekarang menjadi bagian dari systemd seperti yang Anda lihat dengan melihat nama file “udev” yang disertakan dengan paket RPM systemd.

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

Daemon Udev, systemd-udevd , menerima uevent perangkat langsung dari kernel setiap kali perangkat ditambahkan atau dihapus dari sistem. Untuk setiap peristiwa, systemd-udevd mengeksekusi instruksi yang cocok yang ditentukan dalam aturan Udev.

Nama file perangkat dapat berubah ketika disk dihapus dari sistem karena kegagalan. Misalnya, perangkat diberi nama /dev/sda, /dev/sdb, dan /dev/sdc saat boot. Tetapi pada reboot berikutnya, /dev/sdb gagal dan apa yang sebelumnya /dev/sdc bernama /dev/sdb. Semua referensi konfigurasi ke /dev/sdb sekarang berisi konten yang awalnya dirujuk oleh /dev/sdc.

Solusi untuk menghindari situasi seperti ini adalah dengan menjamin nama yang konsisten untuk perangkat melalui reboot. Anda dapat mengonfigurasi Udev untuk membuat nama persisten dan menggunakan nama ini di tabel mount sistem file, /etc/fstab, atau sebagai argumen untuk perintah mount.

File dan Direktori Aturan Udev

Aturan Udev menentukan cara mengidentifikasi perangkat dan cara menetapkan nama yang persisten melalui reboot atau perubahan disk. Ketika Udev menerima acara perangkat, itu cocok dengan aturan yang dikonfigurasi dengan atribut perangkat di sysfs untuk mengidentifikasi perangkat. Aturan juga dapat menentukan program tambahan untuk dijalankan sebagai bagian dari penanganan peristiwa perangkat.
File aturan Udev terletak di direktori berikut:

  • /lib/udev/rules.d/ – Direktori aturan default
  • /etc/udev/rules.d/ – Direktori aturan khusus. Aturan ini diutamakan.

File aturan harus memiliki nama yang unik. File di direktori aturan kustom menimpa file dengan nama yang sama di direktori aturan default. File aturan diurutkan dan diproses dalam urutan leksikal. Berikut ini adalah sebagian daftar file aturan dari direktori aturan default dan kustom:

# 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

Contoh Aturan Udev

Contoh di bawah ini berisi entri yang dipilih dari /lib/udev/rules.d/50-udev-default.rules mengajukan. File aturan ini berisi lebih dari 60 entri.

# 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"
....

Entri yang dipilih membantu menjelaskan sintaks file aturan.
1. Komentar dimulai dengan tanda #.
2. Setiap baris yang tidak dikomentari dalam file aturan terdiri dari daftar satu atau lebih pasangan nilai kunci yang dipisahkan dengan koma. Ada dua jenis kunci:

  • Mencocokkan kunci
  • Kunci tugas

3. Jika semua kunci pencocokan cocok dengan nilainya masing-masing, aturan akan diterapkan dan kunci penetapan diberi nilai yang ditentukan. Setiap tombol memiliki operasi yang berbeda, tergantung pada operatornya. Operator yang valid adalah:

  • == :Bandingkan untuk kesetaraan
  • != :Bandingkan ketidaksetaraan
  • = :Menetapkan nilai ke kunci
  • += :Tambahkan nilai ke nilai saat ini untuk kunci
  • := :Tetapkan nilai akhir ke kunci. Larang perubahan apa pun di kemudian hari dengan aturan selanjutnya.

4. Pencocokan pola gaya shell (*, ?, []) juga didukung dalam aturan Udev.

Tombol Pencocokan

Nama kunci berikut digunakan untuk mencocokkan dengan properti perangkat. Beberapa kunci juga cocok dengan properti perangkat induk di sysfs, dan bukan hanya perangkat yang menghasilkan acara. Jika beberapa kunci ditentukan dalam satu aturan, semua kunci ini harus cocok.

  • TINDAKAN :Cocokkan nama aksi acara.
  • DEVPATH :Cocokkan dengan devpath perangkat acara.
  • KERNEL :Cocokkan dengan nama perangkat acara.
  • NAMA :Mencocokkan nama antarmuka jaringan. Ini dapat digunakan jika kunci NAME disetel di salah satu aturan sebelumnya.
  • SYMLINK :Cocokkan nama symlink yang menargetkan node. Ini dapat digunakan jika kunci SYMLINK diatur di salah satu aturan sebelumnya. Mungkin ada beberapa symlink tetapi hanya satu yang harus cocok.
  • SUBSISTEM :Mencocokkan subsistem perangkat acara.
  • UJI{topeng mode oktal} :Menguji keberadaan file. Anda dapat menentukan topeng mode oktal.

Kunci pencocokan lainnya termasuk DRIVER, ATTR{filename}, KERNELS, SUBSYSTEMS, DRIVER, ATTRS{filename}, TAGS, ENV{key}, TAG, PROGRAM, dan RESULT.

Kunci Tugas

Kunci berikut dapat memiliki nilai yang ditetapkan untuknya:

  • NAMA – Nama yang akan digunakan untuk antarmuka jaringan. Nama node perangkat tidak dapat diubah oleh Udev, hanya symlink tambahan yang dapat dibuat.
  • SYMLINK – Nama symlink yang menargetkan node
  • PEMILIK, GRUP, MODE – Izin untuk node perangkat
  • OPSI – Opsi aturan dan perangkat. Opsi abaikan_remove yang digunakan dalam contoh berarti “Jangan hapus simpul perangkat saat perangkat hilang”.

Kunci penetapan lainnya termasuk ATTR{key}, ENV{key}, TAG, RUN{type}, LABEL, GOTO, IMPORT{type}, WAIT_FOR, dan OPTIONS.

Pergantian String

Tombol NAME, SYMLINK, PROGRAM, OWNER, GROUP, MODE, dan RUN mendukung banyak substitusi string seperti printf. Substitusi yang digunakan dalam contoh adalah:

  • %M – Nomor utama kernel untuk perangkat
  • %m – Nomor minor kernel untuk perangkat

Substitusi string tambahan didukung. Lihat halaman manual udev untuk semua substitusi yang didukung dan detail tentang kunci pencocokan tambahan, kunci penetapan tambahan, dan opsi aturan dan perangkat tambahan.

Utilitas udevadm

Utilitas udevadm adalah alat manajemen ruang pengguna untuk Udev. Di antara fungsi lainnya, Anda dapat menggunakan udevadm untuk menanyakan sysfs dan mendapatkan atribut perangkat untuk membantu membuat aturan Udev yang cocok dengan perangkat. Untuk menampilkan penggunaan 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

Anda juga dapat memperoleh penggunaan untuk setiap perintah udevadm. Misalnya, untuk mendapatkan bantuan dalam menggunakan perintah 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

Contoh utilitas udevadm

Beberapa contoh mengikuti. Untuk menanyakan database Udev untuk jalur perangkat /dev/xvdd:

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

Untuk menanyakan database Udev untuk semua informasi perangkat untuk /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

Masukkan yang berikut ini untuk mencetak semua properti sysfs dari /dev/xvda. Properti ini dapat digunakan dalam aturan Udev agar sesuai dengan perangkat. Ini mencetak semua perangkat di sepanjang rantai, hingga root 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"

Membuat Tautan Simbolis ke Node Perangkat

Urutan di mana aturan dievaluasi adalah penting. Saat membuat aturan Anda sendiri, Anda ingin ini dievaluasi sebelum default. Karena aturan diproses dalam urutan leksikal, buat file aturan dengan nama file seperti /etc/udev/rules.d/10-local.rules untuk diproses terlebih dahulu.

Aturan berikut membuat tautan simbolis /dev/my_disk ke node perangkat /dev/xvdd. Anda dapat membuat aturan Udev untuk mengubah nama antarmuka jaringan tetapi nama node perangkat tidak dapat diubah oleh Udev. Hanya symlink tambahan yang dapat dibuat untuk node perangkat.

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

Jalankan pemicu udevadm untuk memproses file aturan:

# udevadm trigger

symlink sekarang ada.

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

Hapus file 10-local.rules dan jalankan udevadm trigger untuk menghapus symlink.


Cent OS
  1. Panduan terminal Linux untuk pemula

  2. Izin Linux 101

  3. Apa Itu CentOS – Panduan Pemula

  1. Migrasi CentOS 8 ke Oracle Linux 8:Panduan Langkah-demi-Langkah

  2. CentOS / RHEL 7 :Panduan pemula untuk firewalld

  3. Panduan Pemula untuk Manajemen Perangkat Lunak Linux dengan RPM

  1. Panduan Pemula untuk NFS di CentOS / RHEL

  2. Panduan Pemula untuk SELinux

  3. Panduan Pemula untuk Administrasi Pengguna dan Grup di Linux