Автоопределение / монтирование SDCards и запуск скрипта для них в Linux

В настоящее время я использую SME Server, и мне нужно запустить скрипт при подключении SD-карт к моему серверу. Сам скрипт работает нормально (он копирует содержимое карточек), но у меня возникают проблемы с автоматическим монтированием и выполнением скрипта.

У меня есть USB-концентратор, состоящий из 10 портов USB; это проявляется как:

[root@server ~]# lsusb 

Bus 004 Device 002: ID 0000:0000  
Bus 004 Device 001: ID 0000:0000  
Bus 003 Device 001: ID 0000:0000  
Bus 002 Device 001: ID 0000:0000  
Bus 001 Device 055: ID 1a40:0101 TERMINUS TECHNOLOGY INC.  
Bus 001 Device 051: ID 1a40:0101 TERMINUS TECHNOLOGY INC.  
Bus 001 Device 050: ID 1a40:0101 TERMINUS TECHNOLOGY INC. 
Bus 001 Device 001: ID 0000:0000  

(Центр - это записи TERMINUS TECHNOLOGY INC)


Поскольку я не могу подключить SD-карты непосредственно к серверу; Я использую приложение USB к SD-карте (10 из них), подключенное к концентратору, для чтения карт. После подключения 10 приложений (без карт) в концентратор; lsusb выдает следующее:

[root@server ~]# lsusb 

Bus 004 Device 002: ID 0000:0000  
Bus 004 Device 001: ID 0000:0000  
Bus 003 Device 001: ID 0000:0000    
Bus 002 Device 001: ID 0000:0000    
Bus 001 Device 073: ID 05e3:0723 Genesys Logic, Inc.   
Bus 001 Device 072: ID 05e3:0723 Genesys Logic, Inc.   
Bus 001 Device 071: ID 05e3:0723 Genesys Logic, Inc.   
Bus 001 Device 070: ID 05e3:0723 Genesys Logic, Inc.   
Bus 001 Device 069: ID 05e3:0723 Genesys Logic, Inc.   
Bus 001 Device 068: ID 05e3:0723 Genesys Logic, Inc.   
Bus 001 Device 067: ID 05e3:0723 Genesys Logic, Inc.   
Bus 001 Device 066: ID 05e3:0723 Genesys Logic, Inc.   
Bus 001 Device 065: ID 05e3:0723 Genesys Logic, Inc.   
Bus 001 Device 064: ID 05e3:0723 Genesys Logic, Inc. 
Bus 001 Device 055: ID 1a40:0101 TERMINUS TECHNOLOGY INC.   
Bus 001 Device 051: ID 1a40:0101 TERMINUS TECHNOLOGY INC.   
Bus 001 Device 050: ID 1a40:0101 TERMINUS TECHNOLOGY INC.   
Bus 001 Device 001: ID 0000:0000  

Как видите, читателями являются записи "Gensys Logic, Inc".

Подключение SD-карты к считывателю не влияет на lsusb (он читает точно так же, как указано выше), однако моя система распознает карты нормально; как указано dmesg:

Attached scsi generic sg11 at scsi54, channel 0, id 0, lun 0,  type 0  
USB Mass Storage device found at 73  
SCSI device sdd: 31388672 512-byte hdwr sectors (16071 MB)  
sdd: Write Protect is on  
sdd: Mode Sense: 03 00 80 00  
sdd: assuming drive cache: write through  
SCSI device sdd: 31388672 512-byte hdwr sectors (16071 MB)  
sdd: Write Protect is on  
sdd: Mode Sense: 03 00 80 00  
sdd: assuming drive cache: write through  
 sdd: sdd1  
SCSI device sdd: 31388672 512-byte hdwr sectors (16071 MB)  
sdd: Write Protect is on  
sdd: Mode Sense: 03 00 80 00  
sdd: assuming drive cache: write through  
SCSI device sdd: 31388672 512-byte hdwr sectors (16071 MB)  
sdd: Write Protect is on  
sdd: Mode Sense: 03 00 80 00  
sdd: assuming drive cache: write through  
 sdd: sdd1  
SCSI device sdd: 31388672 512-byte hdwr sectors (16071 MB)  
sdd: Write Protect is on  
sdd: Mode Sense: 03 00 80 00  
sdd: assuming drive cache: write through  
SCSI device sdd: 31388672 512-byte hdwr sectors (16071 MB)  
sdd: Write Protect is on  
sdd: Mode Sense: 03 00 80 00  
sdd: assuming drive cache: write through  
 sdd: sdd1  

Если я вручную монтирую sdd1 (mount /dev/sdd1 /somedirectory/), это работает нормально.

Что мне действительно нужно, так это решение, которое автоматически монтирует каждую карту по мере ее ввода в считыватель; и выполняет сценарий для них (это будет включать в себя копирование их содержимого в другой каталог).

Моя проблема в том, что я не знаю, как это сделать; Я не думаю, что udev будет работать, поскольку USB-устройства не меняются; если бы я мог каким-то образом заставить udev работать с / dev / disk / by-path /, то я думаю, что это выполнимо (похоже, он сохраняет постоянные записи).

ls / dev / disk возвращает:

pci-0000:00:1d.7-usb-0:4.1.1.1:1.0-scsi-0:0:0:0  
pci-0000:00:1d.7-usb-0:4.1.1.2:1.0-scsi-0:0:0:0  
pci-0000:00:1d.7-usb-0:4.1.1.3:1.0-scsi-0:0:0:0  
pci-0000:00:1d.7-usb-0:4.1.1.4:1.0-scsi-0:0:0:0  
pci-0000:00:1d.7-usb-0:4.1.2:1.0-scsi-0:0:0:0  
pci-0000:00:1d.7-usb-0:4.1.3:1.0-scsi-0:0:0:0  
pci-0000:00:1d.7-usb-0:4.1.4:1.0-scsi-0:0:0:0  
pci-0000:00:1d.7-usb-0:4.2:1.0-scsi-0:0:0:0  
pci-0000:00:1d.7-usb-0:4.3:1.0-scsi-0:0:0:0  
pci-0000:00:1d.7-usb-0:4.4:1.0-scsi-0:0:0:0  
pci-0000:00:1d.7-usb-0:4.4:1.0-scsi-0:0:0:0-part1  
pci-0000:0b:01.0-scsi-0:0:1:0  
pci-0000:0b:01.0-scsi-0:0:1:0-part1  
pci-0000:0b:01.0-scsi-0:0:1:0-part2  

Сверху видно, что к считывателю подключена только одна карта (pci-0000:00:1d.7-usb-0:4.4:1.0-scsi-0:0:0:0-part1).

Собирается

mount /dev/disk/by-path/pci-0000\:00\:1d.7-usb-0\:4.4\:1.0-scsi-0\:0\:0\:0-part1 

Работает и помещает карту в /media/usbdisk/, однако:

mount /dev/disk/by-path/pci-0000\:00\:1d.7-usb-0\:4.4\:1.0-scsi-0\:0\:0\:0-part1 slot1/

не работает и возвращает "mount: не удается получить адрес для /dev/disk/by-path/pci-0000"

Любые идеи и решения были бы хорошими, я видел знания многих парней здесь, так что я надеюсь, что кто-нибудь может мне помочь.

Спасибо

3 ответа

У меня была та же проблема, и я сидел на ней 3 дня, пытаясь получить @#$%! МСП для крепления USB HDD. Я хотел сделать внешнее резервное копирование USB, и он отказался правильно его смонтировать. Давать мне похожие ошибки, как вы указали. Не та же самая проблема, скажем так, как жесткий диск, а не SD-карта, но, безусловно, похожая, тем не менее.

Если вы выполните команду cat / proc / mdstat, вы увидите жесткие диски, перечисленные в вашей конфигурации RAID, однако он также покажет вам, что есть еще один диск, в настоящее время не подключенный, в качестве дополнительного диска для добавления в RAID. В моем случае это был sdc, так как sda и sdb составили RAID.

Затем я удалил раздел на sdc с помощью fdisk /dev/sdc, добавил новый основной раздел и сохранил его. mkfs.ext3 -L MyLabel /dev/sdc1 (дать ему имя метки) mkdir -p /media/usbdevice

удалите его, подождите несколько секунд и снова подключите его. egrep "(kernel|fstab|scsi).*(usb|USB)" /var/log/messages теперь должно показать, что он подключил USB-диск с меткой.

Viola Fstab-Sync сделал свое дело, и вы готовы идти.

Вы ищете программу под названием halevt, Имейте в виду, что вам нужно уметь редактировать XML, чтобы он делал то, что вы хотите.

Поскольку на SME Server есть hal и udev, вы можете написать небольшой скрипт / демон Python (эта ссылка говорит о USB-устройствах, но вы можете изменить его для любого типа хранилища), который обнаруживает вставки носителя и выполняет операции.

Другие вопросы по тегам