gpt4 book ai didi

Linux:如何将 block 设备映射到 USB 设备?

转载 作者:IT王子 更新时间:2023-10-29 01:19:29 27 4
gpt4 key购买 nike

如果我插入 USB 内存棒,我会在/sys/bus/usb/devices 中看到一个新文件夹...因此是一个新的 USB 设备。

我还在/sys/block 中看到一个新文件夹...因此是一个新的 block 设备。

我的问题是:如何获得这两个设备之间的防水映射?方法:如果我在/sys/bus/usb/devices 中得到一个新设备,我如何以编程方式(例如通过检查/sys/...)找出哪个 block 设备映射/与此 usb 设备相关,反之亦然? !

最佳答案

/sys 中的信息以多种方式组织(按驱动程序、按公交车等),并且有许多符号链接(symbolic link)可以从一个层次结构转到另一个层次结构。

案例(在内核 2.6.26 上看到的示例):从 /sys/block/sdc 中的 block 设备开始,符号链接(symbolic link) /sys/block/sdc/device 指向每个设备类型层次结构内。您可以看到它是一个 USB 设备,因为链接的目标类似于

../../devices/pci0000:00/0000:00:1d.7/usb8/8-2/8-2:1.0/host9/target9:0:0/9:0:0:0

相反,USB设备列在/sys/bus/usb/devices中,我们可以看到8-2:1.0是一个类磁盘设备,因为/sys/bus/usb/devices/8-2:1.0/driver 链接到 usb-storage。要找出关联的 block 设备是什么,我们似乎需要进入目录 /sys/bus/usb/devices/8-2:1.0/host9/target9:0:0/9:0: 0:0 包含一个符号链接(symbolic link) block:sdc 其目标是 /sys/block/sdc

已添加:注意:/sys 的确切结构因内核版本而异。例如,对于内核 2.6.32,/sys/block/sdc/device 直接指向 /dev/bus/scsi 而无需通过 USB 跃点。


另一种方法是调用 udevadm info 命令。 udevadm info -p/sys/block/sdc --query=... 根据其 /sys 条目提供有关设备的信息,而 udevadm info -n sdc --query=... 给出关于设备 /dev/sdc 的信息。

信息包括总线信息,例如udevadm info -p/sys/block/sdc --query=env显示

ID_BUS=usb
ID_PATH=pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0

udev 文档可能包含您感兴趣的更多信息。


最后要注意的是:有各种复杂的外壳可能会使您做的任何事情都不那么防水。您的程序将如何处理单个 USB 设备,该设备是分配有多个 block 设备的磁盘阵列?相反,您的程序将如何处理由多个设备(可能其中一些是 USB 而另一些不是)组装而成的 RAID 阵列?您是否关心其他可移动媒体类型,例如 Firewire 和 e-SATA?等等。您将无法预测所有极端情况,因此请确保优雅地失败。

关于Linux:如何将 block 设备映射到 USB 设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3493858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com