Как подключить USB-накопитель в правиле udev?

Я установил правило в udev для запуска сценария в фоновом режиме для автоматического подключения USB-накопителя. Ему удалось запустить скрипт нормально, но монтирование по какой-то причине не удается.

ПРАВИЛО:

ACTION=="add", KERNEL=="sd[az]*", 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 команду mount /dev/sda1 /mnt/usb после того, как подключу USB, прежде чем включить правило, он смог смонтировать его просто отлично. Я просто не понимаю, почему он не может смонтировать правила udev.

    3 Solutions collect form web for “Как подключить USB-накопитель в правиле udev?”

    Этот скрипт потерпит неудачу, если /mnt/usb уже существует. Не уверен, что это источник проблемы, но это наверняка ошибка сценария.

    mount /mnt/usb

    Используйте вместо:

     mount -p /mnt/usb 

    От man mount :

    -p, –parents

    без ошибок, если есть, создайте родительские каталоги по мере необходимости

    У вас нет гарантии, что USB-накопитель будет sda1, sdb1, sdc1 при добавлении. Я думаю, что здесь может потребоваться более совершенная логика, но она совершенно не связана с вопросом.

    По вопросу см. Ссылку ниже: Почему Linux помечает FAT как «грязную» просто из-за ее монтирования?

    Насколько я понимаю, просто вытаскивая USB из машины Windows без извлечения не очищает грязный бит на диске. Linux предполагает худшее, когда грязный бит установлен. Я предполагаю, что здесь вы можете автоматически запустить fsck, чтобы очистить грязный бит в этом сообщении об ошибке, если оно присутствует, а затем продолжить монтирование. Хотя я не уверен, что вызов umount или fsck очистит грязный бит.

    Я надеюсь, что это движется в правильном направлении.

    Хотя это не очень хорошо задокументировано, вы не должны запускать mount из правила Udev.

    Пожалуйста, смотрите мой ответ на аналогичный вопрос для альтернатив.

    Linux и Unix - лучшая ОС в мире.