USB 드라이브를 자동으로 마운트하기 위해 백그라운드에서 스크립트를 실행하도록 udev에 규칙을 설정했습니다. 스크립트를 성공적으로 실행했지만 어떤 이유로 마운트에 실패했습니다.
규칙:
ACTION=="add", KERNEL=="sd[a-z]*", RUN+="/etc/mntUsbChk.sh &"
이 스크립트에서:
#!/bin/sh
sleep 2
mkdir /mnt/usb
foundUsb=false
if [ -e /dev/sda1 ]; then
mount /dev/sda1 /mnt/usb
$foundUsb=true
fi
if [ -e /dev/sdb1 ]; then
mount /dev/sdb1 /mnt/usb
$foundUsb=true
fi
if [ -e /dev/sdc1 ]; then
mount /dev/sdc1 /mnt/usb
$foundUsb=true
fi
if [ $foundUsb -eq false ]; then
exit
fi
echo "USB MOUNTED"
[1610.868626] FAT-fs(sdb1): 볼륨이 올바르게 분리되지 않았습니다. 일부 데이터가 손상되었을 수 있습니다. fsck를 실행해 보세요.
/mnt/usb
편집: 자세한 내용: USB를 연결한 후 폴더가 생성되므로 스크립트가 확실히 실행됩니다 .
또한 mount /dev/sda1 /mnt/usb
규칙을 활성화하기 전에 USB를 연결한 후 수동으로 입력하면 제대로 설치됩니다. 왜 일반 udev에 설치할 수 없는지 이해가 되지 않습니다.
답변1
스크립트가 /mnt/usb
이미 있으면 실패합니다. 이것이 문제의 원인인지는 확실하지 않지만 확실히 스크립트 오류입니다.
mount /mnt/usb
대신 사용하세요:
mount -p /mnt/usb
~에서man mount
:
-p, --부모
존재하는 경우 오류가 없습니다. 필요에 따라 상위 디렉터리를 만듭니다.
답변2
추가 시 USB 드라이브가 sda1, sdb1, sdc1이 될 것이라는 보장은 없습니다. 나는 거기에 더 나은 논리가 필요할 것이라고 생각하지만 그것은 질문과 전혀 관련이 없습니다.
이 질문에 대해서는 아래 기존 링크를 참조하세요. Linux에서 FAT가 설치되었다는 이유만으로 FAT를 "더티"로 표시하는 이유는 무엇입니까?
제가 이해한 바에 따르면 USB를 꺼내지 않고 Windows 시스템에서 간단히 분리하면 드라이브의 더티 비트가 지워지지 않습니다. 더티 비트가 설정되면 Linux는 최악의 시나리오를 가정합니다. 나는 자동으로 fsck를 실행하여 이 오류 메시지(있는 경우)의 더티 비트를 지운 다음 다시 설치할 수 있다고 가정합니다. umount나 fsck를 호출하면 더티 비트가 지워질지는 잘 모르겠습니다.
이것이 올바른 방향으로 진행되기를 바랍니다.
답변3
잘 문서화되어 있지는 않지만 mount
Udev 규칙에서 실행하면 안 됩니다.
보다비슷한 질문에 대한 내 대답대안.