Meskipun UUID tidak dapat diakses secara langsung oleh udev, setidaknya di Fedora dan Ubuntu mereka ditetapkan sebagai variabel lingkungan ( ENV
). Anda dapat membaca semua variabel lingkungan perangkat dengan menelepon udevadm info /dev/sdc
. Misalnya untuk NTFS pada drive eksternal yang saya dapatkan:
$ udevadm info /dev/sdc2
P: /devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host7/target7:0:0/7:0:0:0/block/sdc/sdc2
N: sdc2
[…]
E: ID_FS_TYPE=ntfs
E: ID_FS_USAGE=filesystem
E: ID_FS_UUID=4A6F2ABC1232FA37
[…]
Segala sesuatu dengan E:
di depan diatur sebagai variabel lingkungan.
Cocok dengan UUID
Anda dapat mencocokkannya dengan ENV{ID_FS_UUID}=="4A6F2ABC1232FA37"
. Sebagai filter pertama saya cocok KERNEL=="sd?2"
untuk memastikan saya hanya menangani perangkat blok dengan nomor partisi yang benar. Aturan lengkap akan terlihat seperti ini:
KERNEL=="sd?2", ENV{ID_FS_UUID}=="4A6F2ABC1232FA37", RUN+="/usr/bin/logger --tag my-manual-usb-mount Mounting the device with UUID 4A6F2ABC1232FA37", RUN+="/usr/bin/mount [Your mount options here]"
Perintah logger berguna untuk menyatakan bahwa aturan benar-benar dijalankan. Selanjutnya Anda harus memeriksa bahwa aturan tersebut tidak mengandung kesalahan sintaksis apa pun udevadm test /dev/sdc2
. File aturan Anda harus tercantum dalam output dan tidak ada pesan kesalahan akan muncul di sebelahnya. Sekarang Anda dapat memicu semua aturan untuk perangkat Anda untuk memeriksa apakah aturan Anda bekerja seperti yang direncanakan: sudo udevadm trigger /dev/sdc2
. Jika aturan Anda cocok, Anda akan menemukan pesan log khusus di log sistem ( /var/log/syslog
atau via journalctl -b
).
Sunting: ali_m telah menunjukkan bahwa variabel lingkungan diatur oleh aturan sebelumnya dan dengan demikian hanya dapat diakses jika .rules
file Anda memiliki urutan leksikografis yang cukup tinggi . Mulai dengan "60" sudah cukup. Secara pribadi saya mulai aturan saya dengan "zz" (jika mungkin) untuk membedakannya dari aturan yang telah ditentukan dalam sekejap.
Menggunakan UUID dalam RUN
perintah dan di tempat lain
Udev memiliki variabel yang cukup kuat dan sintaks substitusi atribut . Khususnya setiap kemunculan $env{ID_FS_UUID}
akan diganti dengan UUID drive. Jadi untuk memasang perangkat di bawah /media/
UUID
Anda dapat menggunakan aturan ini:
KERNEL=="sd??", RUN+="/usr/bin/mkdir /media/$env{ID_FS_UUID}", RUN+="/usr/bin/mount $devpath /media/$env{ID_FS_UUID}"
Anda mungkin ingin mengonfigurasi udisks sebagai gantinya, namun khusus untuk ruang masalah yang ingin Anda pecahkan. Lihat https://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2Fmedia sebagai titik awal.
Kasus penggunaan aktual saya untuk memasang perangkat dengan udev, bukan /etc/fstab
atau udisks adalah untuk me-mount sistem file zfs yang memiliki beberapa keanehan membuat mereka tidak cukup sesuai dengan alat yang biasa.