我目前正在运行 SME 服务器,需要在将 SD 卡连接到服务器时运行一个脚本。脚本本身运行良好(它会复制卡中的内容),但脚本的自动安装和执行是我遇到的问题。
我有一个由 10 个 USB 端口组成的 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/按路径/不过我认为这是可行的(它似乎保持了恒定的条目)。
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 的地址”
任何想法和解决方案都很好,我之前已经看到过这里很多人的知识,所以我希望有人可以帮助我。
谢谢
答案1
我遇到了同样的问题,花了 3 天时间试图让 @#$%! SME 安装 USB HDD。我想做一个外部 USB 备份,但它拒绝正确安装。它给出了与你指出的类似的错误。问题本身并不完全相同,因为它是 HDD 而不是 SD 卡,但肯定是相似的。
如果您执行 cat /proc/mdstat,您将看到 RAID 配置中列出的硬盘,但它还会显示还有另一个驱动器(当前未安装)作为可添加到 RAID 的可选驱动器。在我的情况下,它是 sdc,因为 sda 和 sdb 组成了 RAID。
然后我使用 fdisk /dev/sdc 删除了 sdc 上的分区,添加了一个新的主分区并保存了它。mkfs.ext3 -L MyLabel /dev/sdc1(给它一个标签名)mkdir -p /media/usbdevice
将其移除,等待几秒钟然后重新插入。egrep "(kernel|fstab|scsi).*(usb|USB)" /var/log/messages 现在应该会显示它已使用标签安装了 USB 驱动器。
viola fstab-sync 完成了它的工作,您可以开始了。
答案2
由于 SME 服务器有 hal 和 udev,因此您可以编写一个小的 Python 脚本/守护进程(该链接谈论的是 USB 设备,但您可以将其修改为任何存储类型)检测媒体插入并执行操作。
答案3
您正在寻找一个名为 的程序halevt
。请注意,您需要熟悉编辑 XML 才能让它执行您想要的操作。