ฉันต้องการติดตั้งไดรฟ์ usb /media
ตาม UUID ของดิสก์ ฉันจะใช้ UUID ของไดรฟ์ usb ในไฟล์กฎของ udev ได้อย่างไรและอะไรคือกฎของ udev ในการติดตั้งไดรฟ์ usb ด้วยหมายเลข UUID เป็นชื่อโฟลเดอร์
blkid
คำสั่ง outputs UUID ของดิสก์ แต่เฉพาะเมื่อการติดตั้ง
ฉันต้องการติดตั้งไดรฟ์ usb /media
ตาม UUID ของดิสก์ ฉันจะใช้ UUID ของไดรฟ์ usb ในไฟล์กฎของ udev ได้อย่างไรและอะไรคือกฎของ udev ในการติดตั้งไดรฟ์ usb ด้วยหมายเลข UUID เป็นชื่อโฟลเดอร์
blkid
คำสั่ง outputs UUID ของดิสก์ แต่เฉพาะเมื่อการติดตั้ง
คำตอบ:
แม้ว่า UUID จะไม่สามารถเข้าถึงได้โดยตรงโดย udev อย่างน้อยใน Fedora และ Ubuntu พวกเขาถูกตั้งค่าเป็นตัวแปรสภาพแวดล้อม ( ENV
) udevadm info /dev/sdc
คุณสามารถอ่านออกตัวแปรสภาพแวดล้อมทั้งหมดของอุปกรณ์โดยการเรียก เช่นสำหรับ NTFS ในไดรฟ์ภายนอกฉันได้รับ:
$ 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
[…]
ทุกสิ่งที่E:
อยู่ด้านหน้าถูกตั้งค่าเป็นตัวแปรสภาพแวดล้อม
ENV{ID_FS_UUID}=="4A6F2ABC1232FA37"
คุณสามารถจับคู่กับมันด้วย ในฐานะที่เป็นตัวกรองแรกฉันตรงกับKERNEL=="sd?2"
เพื่อให้แน่ใจว่าฉันจัดการอุปกรณ์บล็อกด้วยหมายเลขพาร์ติชันที่ถูกต้องเท่านั้น กฎที่สมบูรณ์จะมีลักษณะเช่นนี้:
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]"
คำสั่ง logger มีประโยชน์ในการยืนยันว่ากฎนั้นทำงานจริง ถัดไปคุณควรตรวจสอบว่ากฎไม่ได้มีข้อผิดพลาดใด ๆ udevadm test /dev/sdc2
กับไวยากรณ์ ไฟล์กฎของคุณควรอยู่ในผลลัพธ์และไม่มีข้อความแสดงข้อผิดพลาดปรากฏขึ้นถัดจากไฟล์ sudo udevadm trigger /dev/sdc2
ตอนนี้คุณสามารถเรียกกฎทั้งหมดสำหรับอุปกรณ์ของคุณเพื่อตรวจสอบว่ากฎของคุณทำงานได้ตามที่วางแผนไว้: หากกฎของคุณตรงกันคุณจะพบข้อความบันทึกที่กำหนดเองในบันทึกของระบบ ( /var/log/syslog
หรือผ่านjournalctl -b
)
แก้ไข: ali_mได้ชี้ให้เห็นว่าตัวแปรสภาพแวดล้อมที่มีการตั้งค่าตามกฎก่อนหน้านี้และจึงเพียง accessibly ถ้า.rules
ไฟล์มีการสั่งซื้อ lexicographical ที่สูงพอสมควร เริ่มต้นด้วย "60" ควรจะเพียงพอ ส่วนตัวฉันเริ่มกฎของฉันด้วย "zz" (ถ้าเป็นไปได้) เพื่อแยกพวกเขาออกจากกฎที่กำหนดไว้ล่วงหน้าได้อย่างรวดเร็ว
RUN
คำสั่งและที่อื่น ๆudev มีประสิทธิภาพมากตัวแปรและแอตทริบิวต์เปลี่ยนตัวไวยากรณ์ โดยเฉพาะทุกสิ่งที่เกิดขึ้น$env{ID_FS_UUID}
จะถูกแทนที่ด้วย UUID ของไดรฟ์ ดังนั้นในการติดตั้งอุปกรณ์ภายใต้/media/
UUID
คุณสามารถใช้กฎนี้:
KERNEL=="sd??", RUN+="/usr/bin/mkdir /media/$env{ID_FS_UUID}", RUN+="/usr/bin/mount $devpath /media/$env{ID_FS_UUID}"
คุณอาจต้องการกำหนดค่า udisks แทน แต่มันเป็นพิเศษสำหรับพื้นที่ปัญหาที่คุณต้องการแก้ไข ดูhttps://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2Fmediaเป็นจุดเริ่มต้น
กรณีการใช้งานจริงของฉันสำหรับการติดตั้งอุปกรณ์ที่มี udev แทน/etc/fstab
หรือ udisks คือการเมานต์ระบบไฟล์ zfs ซึ่งมีนิสัยแปลก ๆ บางอย่างทำให้พวกมันไม่พอดีกับเครื่องมือปกติ
.rules
ชื่อไฟล์ความต้องการที่จะเริ่มต้นด้วยตัวเลข> 60
มีคำตอบคร่าวๆอยู่ในใจฉัน ตั้งค่ารายการ fstab ที่ไม่ตรงตาม IDUU และในกฎ udev ดำเนินการmount -a
ทุกครั้งที่มีอุปกรณ์ sd * ใหม่เพิ่ม