USB 플래시 드라이브를 마운트 및 마운트 해제하기위한 udev 규칙을 만들려고했습니다. 순간의 규칙은 매우 간단합니다.
ACTION=="add",KERNEL=="sd[b-z]",RUN+="/root/scripts/plug_flash_drive.sh %k"
ACTION=="remove",KERNEL=="sd[b-z]",RUN+="/root/scripts/unplug_flash_drive.sh %k"
plug_flash_drive.sh도 매우 간단합니다 :
device_name=$1
mount_options="umask=000,utf8"
if [ ! -e "/media/$device_name" ]; then
mkdir "/media/$device_name"
fi
sleep 1
/usr/bin/mount "/dev/$device_name" "/media/$device_name" -o "$mount_options"
unplug_flash_drive.sh :
device_name=$1
umount "/dev/$device_name"
rmdir "/media/$device_name"
몇 가지 테스트를 수행하여 다음을 확인할 수 있습니다.
- 플러그인하면 플래시 드라이브가 감지됩니다. 파일은 / dev에 생성됩니다
- plug_flash_drive.sh는 udev에 의해 호출됩니다
- 스크립트의 mkdir 부분은 작동합니다
- 그러나 스크립트의 "마운트"부분이 실행되지 않아 내 드라이브가 마운트되지 않은 것 같습니다.
- 커맨드 라인에서 스크립트를 호출하면 완벽하게 작동합니다.
udev가 호출 할 때 mount가 실행되지 않는 이유를 아는 사람이 있습니까?
편집 28/08/14 : 스크립트가 끝나기 전에 장치가 실제로 마운트되었는지 디버그 로그에서 확인하기 위해 스크립트 끝에 "grep -q / proc / mounts && echo success || echo failure"를 추가했습니다. udev가 스크립트를 호출하더라도 해당 시점에 장치 가 마운트 된 것으로 보입니다 . 따라서 실제 문제는 "udev를 통해 호출 될 때 마운트 스크립트 종료 후 내 블록 장치가 마운트 해제 된 것 같습니다"입니다.
set -xv
과 exec >> "$HOME"/mount.log 2>&1
에 .sh
파일?
mkdir "$mount_dir"
만rmdir "/media/$device_name"
? 어디에$mount_dir
설정되어 있습니까?