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


13

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

blkid명령은 디스크의 UUID를 마운트 할 때만 출력합니다.


1
주의 사항 2019 : systemd를 사용하는 최신 데스크탑 Linux 시스템에서 udev 규칙은 일반 사용자 네임 스페이스에 파일 시스템을 마운트하지 않습니다. 즉, udev 규칙에서 mount 명령을 사용하여 파일 시스템을 마운트 할 수 없습니다. 또한 이러한 시스템에서 퓨즈 (사용자 파일 시스템) 시스템은 데스크탑 아이콘을 통해 USB 마운트를 처리하도록 구성되므로 fstab 규칙을 사용하여 퓨즈 시스템과 어느 정도 충돌이 발생합니다. 헤드리스 서버에 UUID로 USB 파일 시스템을 자동으로 마운트하려면 시스템 퓨즈 구성을 제거하고 udev 규칙을 사용하여 원샷 마운트 서비스를 트리거하는 것이 가장 좋습니다.
조나단 벤-아브라함

: 최근 데비안에서 테스트 fstab에, systemd 및 자동 마운트를 사용하여이 솔루션을 참조하십시오 unix.stackexchange.com/a/347007/31228
조나단 벤 - 아브라함

답변:


14

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 파일 시스템을 마운트하는 것입니다.


1
알아 내야 할 한 가지 중요한 점은 환경 변수와 일치하려면 변수를 설정 한 후에 규칙을 적용해야합니다 . 이를 위해, 당신의 .rules파일 이름은 숫자> (60)로 시작해야합니다 .
ali_m 2018

@ali_m : 감사합니다. 귀하의 정보를 답변에 추가했습니다.
Perseids

Ubuntu 18.04에서 일부 udevadm 명령은 / dev / sdXX (예 : udevadm info)를 가리킬 수 있으며, 다른 일부는 어떤 이유로 (예 : udevadm 테스트) / sys / block / sdXX를 가리켜 야합니다.
그렉 벨

0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.