udev 규칙에서 UUID를 사용하고 / media / $ UUID에서 USB 드라이브를 마운트하십시오. udev 규칙 파일에서 usb 드라이브의

/media디스크의 UUID를 기반으로 USB 드라이브를 마운트하고 싶습니다 . udev 규칙 파일에서 usb 드라이브의 UUID를 사용하고 폴더 이름으로 UUID 번호를 사용하여 usb 드라이브를 마운트하는 udev 규칙은 무엇입니까?

blkid명령은 디스크의 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:앞에 있는 모든 것은 환경 변수로 설정됩니다.

UUID와 일치

와 (과) 일치 할 수 있습니다 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]"

로거 명령은 규칙이 실제로 실행되도록하는 데 유용합니다. 다음으로 규칙에 구문 오류가 없는지 확인해야합니다 udevadm test /dev/sdc2. 규칙 파일이 출력에 나열되고 그 옆에 오류 메시지가 나타나지 않아야합니다. 이제 장치의 모든 규칙을 트리거하여 규칙이 계획대로 작동하는지 확인할 수 있습니다 sudo udevadm trigger /dev/sdc2. 규칙이 일치하는 경우에 당신은 시스템 로그에 사용자 지정 로그 메시지 (찾을 수 /var/log/syslog또는 경유를 journalctl -b).

편집 : ali_m 은 환경 변수가 이전 규칙에 의해 설정되어 있으므로 .rules파일의 사전 순서충분히 높은 경우에만 액세스 할 수 있다고 지적했습니다 . “60”으로 시작하면 충분합니다. 개인적으로 나는 미리 정의 된 규칙과 한 눈에 구별하기 위해 “가능한 경우”로 규칙을 시작합니다.

RUN명령 및 다른 곳 에서 UUID 사용

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}"

udisk를 대신 구성하려고 할 수도 있지만 해결하려는 문제 공간에 특화되어 있습니다. 시작 지점으로 https://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2Fmedia 를 참조 하십시오 .

udev 대신 udev를 사용하여 장치를 마운트하는 실제 사용 사례 /etc/fstab는 일반적인 도구에 맞지 않는 특이성을 가진 zfs 파일 시스템을 마운트하는 것입니다.


답변

내 마음에 거친 해결책이 있습니다. UUID로 식별 된 해당 fstab 항목을 설정하십시오. 그리고 udev 규칙에서 mount -a새로운 sd * 장치가 추가 될 때마다 실행하십시오 .


답변