udev создает файл устройства для USB-ключа, но не для разделов

udev создает файл устройства для USB-ключа, но не для разделов

Большинство 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.

Связанный контент