Gunakan UUID dalam aturan udev dan pasang usb drive di / media / $ UUID

13

Saya ingin memasang drive usb /mediaberdasarkan UUID disk. Bagaimana saya bisa menggunakan UUID drive usb dalam file aturan udev dan apa aturan udev untuk memasang drive usb dengan nomor UUID sebagai nama folder.

The blkidperintah output UUID dari disk tapi hanya setelah pemasangan.

Talespin_Kit
sumber
1
Peringatan 2019: Pada sistem Linux desktop modern menggunakan systemd, aturan udev tidak me-mount sistem file di namespace pengguna biasa, yaitu Anda tidak dapat me-mount sistem file menggunakan perintah mount dalam aturan udev. Lebih jauh, dalam sistem ini, sistem sekering (sistem file pengguna) dikonfigurasikan untuk menangani pemasangan USB melalui ikon desktop, jadi pemasangan dengan tangan menggunakan aturan fstab hingga beberapa derajat bertentangan dengan sistem sekering. Untuk memasang sistem file USB oleh UUID secara otomatis pada server tanpa kepala Anda sebaiknya menghapus konfigurasi sistemd sekering dan menggunakan aturan udev untuk memicu layanan pemasangan satu-shot.
Jonathan Ben-Avraham
Lihat solusi ini menggunakan fstab, systemd dan automount, diuji pada Debian baru-baru ini: unix.stackexchange.com/a/347007/31228
Jonathan Ben-Avraham

Jawaban:

14

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/syslogatau via journalctl -b).

Sunting: ali_m telah menunjukkan bahwa variabel lingkungan diatur oleh aturan sebelumnya dan dengan demikian hanya dapat diakses jika .rulesfile 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 RUNperintah 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/UUIDAnda 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/fstabatau udisks adalah untuk me-mount sistem file zfs yang memiliki beberapa keanehan membuat mereka tidak cukup sesuai dengan alat yang biasa.

Perseids
sumber
1
Satu poin krusial yang perlu waktu beberapa saat bagi saya untuk mencari tahu: untuk mencocokkan dengan variabel lingkungan, aturan Anda harus diterapkan setelah variabel tersebut ditetapkan. Untuk mencapai ini, nama file Anda .rulesharus dimulai dengan angka> 60 .
ali_m
@ali_m: Terima kasih, saya telah menambahkan informasi Anda ke jawabannya.
Perseids
Ubuntu 18.04, beberapa perintah udevadm dapat diarahkan ke / dev / sdXX (mis. Info udevadm), yang lain perlu diarahkan ke / sys / block / sdXX untuk beberapa alasan (mis. Tes udevadm).
Greg Bell
0

Ada solusi kasar yang muncul di pikiran saya. Tetapkan entri cooresponding fstab yang IDed oleh UUID. Dan dalam aturan udev, jalankan mount -asetiap kali ada perangkat sd * baru ditambahkan.

air
sumber