Saya membuat aturan dasar baru
/etc/udev/rules.d/10-myrule.rules
mengandung:
KERNEL!="sdb*", GOTO="auto_mount_end"
ACTION=="add", RUN+="/usr/bin/mount /dev/sdb1 /media"
LABEL="auto_mount_end"
Saya menyimpan, mem-boot ulang, dan memasukkan kartu SD (dikenali oleh /dev/sdb1
, saya melihatnya dmesg
), tetapi tidak ada yang terjadi. Ketika saya melakukannya secara manual mount /dev/sdb1 /media
, itu berfungsi.
Bagaimana saya bisa memecahkan masalah / men-debug udev
aturan seperti itu ?
Catatan: Saya menggunakan ArchLinux, tetapi harus sama pada distro apa pun?
arch-linux
mount
udev
Basj
sumber
sumber
99-myrule.rules
...systemd
mengubah sesuatu menjadi perilaku udev yang normal?udevadm monitor
, lihat ini dan iniudevadm test
dan memvalidasi aturan melawan kenyataan denganudevadm info
.Jawaban:
10-
seperti yang disebutkan oleh jasonwryan, gunakan penomoran yang tinggi (90-an bagus). Jadi Anda berkuasa tidak akan ditimpa oleh yang lain.Gunakan kunci minimum seperti yang benar-benar Anda butuhkan. Contoh,
!=
&GOTO
/LABEL
, alih-alih gunakan langsung==
Target Anda adalah
sdb1
dengan perintah tetap, meminimalkan penggunaan butaKERNEL=="sdb1"
Saya merasa berguna untuk membuat aturan debugging bayangan, saya menelepon shadow karena saya selalu meninggalkannya di file yang sama, jadi saya menggunakannya ketika saya membutuhkannya.
Catatan:
udev-env.txt
dibuat maka aturannya dipicu pula. Garis==
sesuai dengan satu simpul yang cocok. ENV yang direkam dalam file itu bisa berupa campuran antara 2 node atau lebih, dibuat hampir dalam waktu yang bersamaan, ini merupakanstdout
masalah buffering.Gunakan
udevadm monitor -u
,udevadm test ...
danudevadm trigger ...
untuk memverifikasi aturan mana yang memproses acara.Di dalam skrip terserah Anda untuk membuat log debug dan menangkap perintah yang gagal, dengan menyimpan nilai kembalinya juga
stdout
&stderr
pesan.Memperbarui:
Referensi: udev_237 -
man udev
(Ubuntu_18.04)sumber
udevadm test...
tampaknya hanya menunjukkan kepada Anda variabel lingkungan, agarATTRS
Anda dapat menggunakanudevadm info $DEVICE
untuk menemukan pengaturan lain ini.udevadm info
imbalannya pohon perangkat berhati-hati untuk membedakan pengaturan antara perangkat dan perangkat induknya (properti tampaknya diwarisi jika tidak diganti). Dalam kasus saya, subsistem salah.udevadm test "This program is for debugging only, it does not run any program specified by a RUN key. It may show incorrect results, because some values may be different, or not available at a simulation run."
Apakah tidak ada cara untuk melacak apa yang sebenarnya terjadi?udevadm monitor -u
untuk memeriksa acara / kondisi &udevadm trigger ...
untuk menguji tindakan mereka.Saya pikir perintah yang Anda cari di sini adalah
udevadm
. Anda akan menggunakantrigger
dantest
parameter untuk memicu menelusuri ulang acara udev, dan masing-masing untuk menguji peristiwa tertentu.Saya belajar ini dengan cara yang sulit ketika mencoba-coba dengan penamaan perangkat jaringan baru di EL 7. Semoga Sukses!
sumber
Buat file aturan udev
Tambahkan aturan yang memberi tahu udisk untuk mengotomatiskannya
ATTRS{type}=="SD"
mungkin tidak diperlukan jika Anda menggunakan jenis yang berbeda.Muat ulang aturan
Keluarkan, lalu kembalikan.
Referensi: Archlinux Wiki: Beberapa perangkat, yang harus diperlakukan sebagai removable, tidak
sumber
Saya mengalami masalah yang sama dengan RASPBERRY PI 3 B +, mungkin saja perintah di atas dapat membantu Anda. Tapi itu TIDAK membantu saya. Saya mencoba menjalankan skrip untuk memasukkan perangkat penyimpanan USB. Aturan tidak bisa login di syslog, sehingga menjadi sangat sulit untuk memahami aturan mana yang berfungsi atau aturan mana yang gagal.
Jadi saya melakukan yang berikut:
(1) Saya membuat file aturan saya di /etc/udev/rules.d/100-myrule.rules
(2) maka saya menjalankan perintah
sudo /etc/init.d/udev restart
kemudian saya memeriksanya bekerja. Sepotong informasi, mungkin bermanfaat bagi Anda atau tidak, tetapi sistem file hanya dapat dibaca untuk udev sampai perintah at (2) dijalankan.
sumber