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.