Большинство USB-ключей работают в моей системе: подключите один из них, и udev
будет создан файл устройства для всего ключа (например, /dev/uba
), а также файл устройства для раздела (например, /dev/uba1
).
У меня есть определенный USB-ключ (Sandisk Cruzer Micro 2Gb), который udev
ведет себя неправильно. Файл устройства для ключа создается, но не для раздела.
Если я сравню dmesg
вывод рабочего ключа и моего проблемного ключа, то он будет идентичным, за исключением одной строки, которая отсутствует при использовании проблемного ключа: uba: uba1
. Из этого следует, что mknod
узел для раздела диска никогда не создается.
Самое странное, что я могу сделать...
sudo sfdisk -R /dev/uba
...чтобы принудительно пересмотреть разделы диска, и вдруг раздел будет распознан, mknod
создаст файл устройства, и я смогу получить доступ к ключу, все отлично и замечательно. Какая-то проблема с синхронизацией?
РЕДАКТИРОВАТЬ:
Правила автоматического монтирования USB:
ACTION=="add", KERNEL=="ub[a-z]*[1-9]*", PROGRAM="/sbin/blkid -o values -s TYPE %N", RESULT=="vfat", RUN+="/home/ubuntu/.mount_usb %k %n"
ACTION=="remove", KERNEL=="ub[a-z]*", RUN+="/home/ubuntu/.unmount_usb"
Также:
При переформатировании проблемный ключ по умолчанию устанавливается в FAT16. Принудительное изменение на FAT32 приводит к udevadm monitor --property
выдаче точно таких же свойств для устройства и раздела, как и для рабочего ключа, но проблема все равно остается. Это наводит меня на мысль, что проблема в правилах обнаружения устройств менее вероятна, а может быть, проблема в самом устройстве? Логично ли это?
решение1
Из /dev/uba
структуры именования следует, что вы создали собственное правило UDEV, и теперь оно у вас не работает. Нам нужно увидеть этот код, чтобы помочь вам.
Я уверен, что вы уже обращались к этому документу, но на всякий случай, пожалуйста, ознакомьтесь с этой ссылкой по созданию правил UDEV.http://wiki.debian.org/udev
Отзыв на основе обновления
ДЕЙСТВИЕ=="add", ЯДРО=="ub[az]*[1-9]*", ПРОГРАММА="/sbin/blkid -o значения -s ТИП %N", РЕЗУЛЬТАТ=="vfat", ВЫПОЛНЕНИЕ+="/home/ubuntu/.mount_usb %k %n" ДЕЙСТВИЕ=="удалить", ЯДРО=="ub[az]*", ВЫПОЛНИТЬ+="/home/ubuntu/.unmount_usb"
Похоже, ваш предшественник не знал о usbmount
. Это правило будет работать только на дисках, отформатированных в vfat, теперь вы можете расширить этот список, или... вы можете установить
usbmount
и настроить его, чтобы создать нужные вам имена устройств. Тогда у вас будет что-то, что поддерживается для вас с небольшими изменениями конфигурации, а не полное решение для домашнего использования.
Кстати, там есть синтаксическая ошибка, это value
не так values
, запуск этого из CLI показывает.
sudo blkid -o значение -s ТИП /dev/sdb1 вфат
Итак, %N
это вход, например, блочное устройство, а РЕЗУЛЬТАТ — stdout. Это подробно описано на странице руководства udev. Вы можете сделать что-то вроде этого RESULT=="[vfat|fat16]"
или можете перенаправить вывод в скрипт и выполнить более расширенное сравнение там. Беглый взгляд на пакет usbmount показывает, что расширенные сравнения выполняются в скрипте вызова как для добавления, так и для удаления. Я настоятельно рекомендую вам перейти на usbmount
.