USB 장치가 연결되면 자동으로 마운트하는 udev 규칙이 있습니다.
규칙은 다음과 같습니다.
# cat /etc/udev/rules.d/10-usbdetectd.rules
KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"
# Global mount options
ACTION=="add", ENV{mount_options}="relatime"
# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,uid=1000,gid=1000,umask=022"
# Mount the device
ACTION=="add", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/usb"
# Clean up after removal
ACTION=="remove", RUN+="/bin/umount -l /media/usb"
# Exit
LABEL="media_by_label_auto_mount_end"
규칙은 제대로 작동하지만 전체 권한을 사용하여 장치를 설치하고 싶습니다. 이를 위해서는 umask=000으로 설정해야 합니다.
수동으로 시도하면 예상대로 작동합니다.
# ls -dl /media/usb/
drwxr-xr-x 2 root root 4096 Jan 29 2019 /media/usb/
# mount -o relatime,utf8,uid=1000,gid=1000,umask=000 /dev/sda1 /media/usb/
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 6643016 86356 6199492 1% /
devtmpfs 223204 0 223204 0% /dev
tmpfs 256484 0 256484 0% /dev/shm
tmpfs 256484 48 256436 0% /tmp
tmpfs 256484 132 256352 0% /run
/dev/mmcblk0p1 20185 2854 17331 14% /boot
/dev/sda1 1957600 96 1957504 0% /media/usb
# ls -dl /media/usb/
drwxrwxrwx 2 user user 16384 Jan 1 1970 /media/usb/
하지만 udev가 마운트를 완료하면 마스크가 적용되지 않습니다.
# ls -dl /media/usb/
drwxr-xr-x 2 root root 4096 Jan 29 2019 /media/usb/
[USB drive plug]
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 6643016 86356 6199492 1% /
devtmpfs 223204 0 223204 0% /dev
tmpfs 256484 0 256484 0% /dev/shm
tmpfs 256484 52 256432 0% /tmp
tmpfs 256484 132 256352 0% /run
/dev/mmcblk0p1 20185 2854 17331 14% /boot
/dev/sda1 1957600 96 1957504 0% /media/usb
# ls -dl /media/usb/
drwxr-xr-x 2 root root 16384 Jan 1 1970 /media/usb/
udev가 마운트를 완료하면 마운트 옵션이 적용되지 않는 것 같습니다.
uid=1000 및 gid=1000은 내 사용자에 해당합니다.
# cat /etc/passwd
[...]
user:x:1000:1000:- Standard user:/home/user:/bin/bash
[...]
답변1
문제는 udev 규칙 구문에 있는 것 같습니다.
직접 호출하는 대신 외부 스크립트를 사용 하고 일부 로깅을 추가한 후 옵션만 스크립트에 전달된다고 /bin/mount
선언했습니다 .relatime
udev 규칙을 다음과 같이 수정합니다.
[...]
# Global mount options
ACTION=="add", ENV{mount_options}="relatime,utf8,uid=1000,gid=1000,dmask=0000,fmask=0000"
# Mount the device
ACTION=="add", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/usb"
[...]
udev 규칙이 작동하고 USB 드라이브가 예상된 권한으로 마운트됩니다.
따라서 환경 변수가 정의되면(또는 올바른 구문을 사용하지 않는 경우) 환경 변수를 udev 규칙으로 재정의하는 것이 불가능합니다.
파일 시스템별 마운트 옵션을 보존하는 방법을 아는 사람이 있다면 기꺼이 알려드리겠습니다.
그렇지 않은 경우에는 최적이 아니더라도 이 해결 방법으로 충분합니다.