如何为可移动USB驱动器指定静态安装点?

我有一堆的USB端口和集线器。 当您连接usb拇指驱动器时,Linux会按先到先得的原则将其分配给虚拟块设备。 它创buildsdd,sde,sdf等,而不pipe我将哪个端口插入驱动器。 我们将文件复制到这些驱动器上,当出现错误时,我不可能告诉哪个驱动器发生了错误。

我想要做的就是configurationudev,以便将物理硬件设备/端口映射到特定的虚拟设备。 也就是说,端口1 => sdd,端口2 => sde,端口3 => sdf等。这将允许我告诉哪个拇指驱动器发生了错误。

我find了一些资源(例如http://reactivated.net/writing_udev_rules.html ),从中可以看出这是可以做到的。 不过,我对这样的低级configuration没有经验。 他们对我感到困惑。

还有另外一个参考可以使事情更清楚吗? 或者也许有些软件可以帮我吗? 还是一个让它更容易的库?

/dev/disk/by-path将包含映射到特定USB端口的一致名称(至less它们在我的机器上)。

还可以查看/dev/disk/by-id/dev/disk/by-uuid ,了解访问特定设备的方式,而不pipe使用哪条path访问它们。

最典型的用例是通过文件系统uuid进行匹配,但是你正在写的是整个磁盘相同的设备,这是不行的。 相反,您可以按照型号和序列号进行匹配。 一个例子(未经testing)的udev规则是这样的:

 KERNEL=="sd*", ATTR{removable}=="1", ATTR{vendor}=="Yoyodine", ENV{ID_SERIAL}=="123-456-789", NAME=="disk/by-serial/scsi-$attr{vendor}-$env{ID_SERIAL}" 

要查看给定设备(现在称为/dev/sdz udevinfo -n /dev/sdz -a存在的ATTR值,请运行udevinfo -n /dev/sdz -a 。 要查看存在的ENV值,请运行udevinfo -n /dev/sdz --query=env

如果要按端口而不是序列号进行匹配,请在您引用的文档中查找父设备。 我怀疑像KERNELS=="usb42"工作,但我没有尝试过。

这些驱动器是自动安装的吗? 你用什么工具进行自动安装? 你每次挂载时都重新创build文件系统,还是分区/文件系统相当稳定?

如果您唯一标记文件系统,则通常可以使用标签而不是设备名称来挂载文件系统。

在创build文件系统时,UUID被分配给文件系统。 您可以在与UUID对应的USB设备上放置某种标签。

我正在使用这个黑客与两个Python脚本类似的目的:

 ophis@tlatoani:~$ more /usr/bin/drive.py # !/usr/bin/env python import os, sys if len(sys.argv) == 2: label = sys.argv[1] os.system("drivelabels.py >/tmp/drv.txt") drvmap = map(lambda x:map(lambda y:y.strip(), x.split("\t")), file("/tmp/drv.txt").readlines()) for d in drvmap: if d[0] == label: print d[1] sys.exit() print "/srv" ophis@tlatoani:~$ more /usr/bin/drivelabels.py #!/usr/bin/env python import os os.system("ls -lh /dev/disk/by-label >/tmp/bylabels.txt ; df -ha >/tmp/drivemap.txt") bylabel_text=map(lambda x:x.split(" "), file("/tmp/bylabels.txt").readlines()) l, ll = {}, {} for byl_t in bylabel_text: label, dev = byl_t[len(byl_t)-3], byl_t[len(byl_t)-1] dev = dev[-dev.rfind("/"):].strip() if dev != "": l[ label ] = dev drivemap_txt=map(lambda x:x.split(" "), file("/tmp/drivemap.txt").readlines()) for k in l.keys(): for d in drivemap_txt: if d[0].strip() == "/dev/%s" % l[k]: ll[ k ] = d[-1].strip() for assign in ll.keys(): print "%s\t%s" % (assign, ll[assign]) 

所以这允许我通过标签访问驱动器:

 target=`drive.py STICKY` cp -v *.tex $target 

希望有人会觉得这有帮助!