ls -l /dev/disk/by-path/ 是最可靠反映物理连接位置的命令,其路径如 pci-0000:00:1f.2-ata-1 编码了pci总线地址、接口类型及端口编号,结合 lspci、lsscsi 和 smartctl 可精准定位磁盘物理槽位。

ls -l /dev/disk/by-path/ 是 Linux 中最可靠反映物理连接位置的命令之一,因为它展示的是设备在 PCI 总线上的实际路径(如 pci-0000:00:1f.2-ata-1),而非易变的 /dev/sdX 名称。要通过它精准定位磁盘插在哪个物理 PCI 插槽,关键在于解析路径中的总线地址,并与服务器硬件拓扑对齐。
看懂 /dev/disk/by-path/ 的路径含义
该目录下每个软链接名都编码了设备的物理连接路径。典型格式如下:
pci-0000:00:1f.2-ata-1 → ../../sda pci-0000:04:00.0-nvme-1 → ../../nvme0n1 pci-0000:0a:00.0-scsi-0:2:0:0 → ../../sdb
重点提取三段信息:
-
0000:00:1f.2:PCI 域:总线:设备.功能号(即插槽在主板上的物理坐标) -
ata-1/nvme-1/scsi-0:2:0:0:接口类型 + 通道/目标/LUN 编号,对应背板或控制器上的端口位置 -
→ ../../sda:该路径最终映射到的当前设备名
✅ 注意:
0000:00:1f.2中的00:1f.2是标准南桥 SATA 控制器地址;04:00.0或0a:00.0这类高位总线号,通常对应 PCIe 插槽上加装的 HBA 卡、NVMe RAID 卡或直连 NVMe SSD。
对应物理插槽的实操步骤
-
列出所有路径并筛选目标磁盘
ls -l /dev/disk/by-path/ | grep -E "(nvme|ata|scsi)" | sort
找到你要分析的磁盘(比如已知它是
/dev/nvme0n1),看它对应的pci-xxxx:xx:xx.x-xxx路径。 -
查该 PCI 地址是否属于扩展卡
lspci -vv -s 0000:04:00.0 | grep -E "^(Slot|Device\ Name|Subsystem)"
- 若输出含
Slot: Slot 3或Physical Slot: 3,说明该卡插在机箱第 3 号 PCIe 插槽; - 若
Subsystem显示厂商型号(如Broadcom / LSI SAS3008),再结合服务器手册确认该卡所接背板的槽位编号规则。
- 若输出含
-
区分直连 NVMe 与 U.2/NVMe-oF 设备
-
pci-0000:0a:00.0-nvme-1:表示 NVMe 控制器位于0a:00.0,-1是其第一个命名空间 → 通常对应主板 M.2 插槽或 PCIe x4 直插 NVMe SSD; -
pci-0000:05:00.0-scsi-0:2:0:0:scsi-0:2:0:0表示 SCSI 总线 0、目标 ID 2、LUN 0 → 查lsscsi输出中0:2:0:0对应的/dev/sdb,再用sg_inq /dev/sg2确认背板型号,从而反推是背板第 2 槽(目标 ID 常与槽位一一映射)。
-
-
交叉验证序列号锁定物理身份
# 获取设备序列号(需 root) sudo smartctl -i /dev/nvme0n1 | grep "Serial Number" sudo smartctl -i /dev/sdb | grep "Serial Number"
将序列号与机箱内硬盘标签比对,再结合
by-path中的 PCI 地址,即可 100% 确认“标号为 ABC123 的硬盘插在主板 PCIe 插槽 4,对应系统设备/dev/nvme0n1”。
不复杂但容易忽略











