![在 /dev/disk/by-path 中创建磁盘驱动器设备文件](https://linux22.com/image/10458/%E5%9C%A8%20%2Fdev%2Fdisk%2Fby-path%20%E4%B8%AD%E5%88%9B%E5%BB%BA%E7%A3%81%E7%9B%98%E9%A9%B1%E5%8A%A8%E5%99%A8%E8%AE%BE%E5%A4%87%E6%96%87%E4%BB%B6.png)
我们的应用程序包括测试硬盘驱动器以及测试后插入和移除驱动器。当驱动器插入我们的测试仪时,udev 在 /dev/disk/by-path 中创建一个文件。我们的应用程序查看这些文件以确定何时插入或删除新驱动器。该名称包含驱动器连接的物理插槽或托架,以便我们知道哪些驱动器位于何处。我们正在查看的一个 HBA 控制器在此目录下创建此访问文件,但使用与驱动器所在的物理插槽或托架无关的 LUN。仅凭 LUN,我们不知道驱动器的物理位置我们的测试员。我的问题是谁创建了文件名?是HBA驱动器吗?我有驱动程序的源代码,因此我希望可以修改它以使用物理插槽或托架而不是 LUN 创建文件名。
驱动器一直在实时插入和移除。
答案1
下面的“文件”/dev/disk/by-*
是符号链接udev
由使用内核提供的有关块设备的信息创建。符号链接指向驱动器的实际设备节点。例如:
/dev/disk/by-path/pci-0000:00:11.0-ata-1 -> ../../sdn
和
/dev/disk/by-path/pci-0000:07:00.0-sas-phy0-lun-0 -> ../../sdb
驱动程序不会创建它们,内核也不会创建它们。他们完全是 的责任udev
。
udev
使用/etc/udev/rules.d/
(本地系统管理员自己的规则和覆盖)和/lib/udev/rules.d/
(系统默认值)中定义的规则来创建它们。
例如:/lib/udev/rules.d/60-persistent-storage.rules
。在我的 debian 系统上,该文件的前几行是:
# do not edit this file, it will be overwritten on update
# persistent storage links: /dev/disk/{by-id,by-uuid,by-label,by-path}
# scheme based on "Linux persistent device names", 2004, Hannes Reinecke <[email protected]>
如果您想为该 HBA 上的驱动器编写自己的自定义规则,请尝试运行udevadm info /dev/disk/by-id/....
.那可能提供足够的信息来创建标识驱动器托架的符号链接。
例如,在我的一个驱动器上(连接到 IBM M1015 的 SATA 驱动器、LSI SAS2008、我的 ZFS 池之一的一部分):
# udevadm info /dev/disk/by-path/pci-0000:07:00.0-sas-phy0-lun-0
P: /devices/pci0000:00/0000:00:0b.0/0000:07:00.0/host0/port-0:1/end_device-0:1/target0:0:1/0:0:1:0/block/sdb
N: sdb
S: disk/by-id/ata-WDC_WD10EACS-00ZJB0_WD-WCASJ2114122
S: disk/by-id/wwn-0x50014ee2023dc46f
S: disk/by-path/pci-0000:07:00.0-sas-phy0-lun-0
E: DEVLINKS=/dev/disk/by-path/pci-0000:07:00.0-sas-phy0-lun-0 /dev/disk/by-id/ata-WDC_WD10EACS-00ZJB0_WD-WCASJ2114122 /dev/disk/by-id/wwn-0x50014ee2023dc46f
E: DEVNAME=/dev/sdb
E: DEVPATH=/devices/pci0000:00/0000:00:0b.0/0000:07:00.0/host0/port-0:1/end_device-0:1/target0:0:1/0:0:1:0/block/sdb
E: DEVTYPE=disk
E: ID_ATA=1
E: ID_ATA_DOWNLOAD_MICROCODE=1
E: ID_ATA_FEATURE_SET_AAM=1
E: ID_ATA_FEATURE_SET_AAM_CURRENT_VALUE=254
E: ID_ATA_FEATURE_SET_AAM_ENABLED=0
E: ID_ATA_FEATURE_SET_AAM_VENDOR_RECOMMENDED_VALUE=128
E: ID_ATA_FEATURE_SET_HPA=1
E: ID_ATA_FEATURE_SET_HPA_ENABLED=1
E: ID_ATA_FEATURE_SET_PM=1
E: ID_ATA_FEATURE_SET_PM_ENABLED=1
E: ID_ATA_FEATURE_SET_PUIS=1
E: ID_ATA_FEATURE_SET_PUIS_ENABLED=0
E: ID_ATA_FEATURE_SET_SECURITY=1
E: ID_ATA_FEATURE_SET_SECURITY_ENABLED=0
E: ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN=276
E: ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN=276
E: ID_ATA_FEATURE_SET_SMART=1
E: ID_ATA_FEATURE_SET_SMART_ENABLED=1
E: ID_ATA_SATA=1
E: ID_ATA_SATA_SIGNAL_RATE_GEN1=1
E: ID_ATA_SATA_SIGNAL_RATE_GEN2=1
E: ID_ATA_WRITE_CACHE=1
E: ID_ATA_WRITE_CACHE_ENABLED=1
E: ID_BUS=ata
E: ID_MODEL=WDC_WD10EACS-00ZJB0
E: ID_MODEL_ENC=WDC\x20WD10EACS-00ZJB0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
E: ID_PART_TABLE_TYPE=gpt
E: ID_PART_TABLE_UUID=53ad1007-a736-ca41-a1fb-98ec491cc00a
E: ID_PATH=pci-0000:07:00.0-sas-phy0-lun-0
E: ID_PATH_TAG=pci-0000_07_00_0-sas-phy0-lun-0
E: ID_REVISION=01.01B01
E: ID_SERIAL=WDC_WD10EACS-00ZJB0_WD-WCASJ2114122
E: ID_SERIAL_SHORT=WD-WCASJ2114122
E: ID_TYPE=disk
E: ID_WWN=0x50014ee2023dc46f
E: ID_WWN_WITH_EXTENSION=0x50014ee2023dc46f
E: MAJOR=8
E: MINOR=16
E: SUBSYSTEM=block
E: TAGS=:systemd:
E: UDISKS_ATA_SMART_IS_AVAILABLE=1
E: UDISKS_IGNORE=1
E: UDISKS_PARTITION_TABLE=1
E: UDISKS_PARTITION_TABLE_COUNT=2
E: UDISKS_PARTITION_TABLE_SCHEME=gpt
E: UDISKS_PRESENTATION_HIDE=1
E: UDISKS_PRESENTATION_NOPOLICY=0
E: USEC_INITIALIZED=15128136