我有一台服务器,该服务器有 2 个带有 Adaptec 硬件 RAID 的内部磁盘和一个通过 SAS 连接的外部磁盘盒。
lsscsi
找到所有设备:
# lsscsi
[0:0:0:0] disk Adaptec System V1.0 /dev/sda
[0:1:0:0] disk WDC WD1003FBYX-0 01.0 -
[0:1:1:0] disk WDC WD1003FBYX-0 01.0 -
[1:0:0:0] disk Promise VessRAID 1840s 0304 -
前 3 个是 2 个物理磁盘和位于其上的硬件 RAID。
第四个是通过SAS连接的外部磁盘盒。
如您所见,/dev 中没有与外部 VessRAID 对应的设备。
VessRAID 是一个外部 SAS-RAID 盒,它本身是一个 SAS 设备。Linux 清楚地看到了该设备,但不知何故它没有将其变成 /dev 中的设备。
VessRAID 上有两个逻辑驱动器。
我觉得我需要告诉 Linux 这是一个 SAS 磁盘设备,Linux 应该使用它来扫描逻辑驱动器并让它们显示在 /dev 中。但我一直找不到执行此操作的神奇命令。
经过深入挖掘,/sys
我们发现:
# cat /sys/class/bsg/1\:0\:0\:0/device/model
VessRAID 1840s
# cat /sys/class/bsg/1\:0\:0\:0/device/vendor
Promise
这再次证实 Linux 看到了该已知设备。
/dev/disk/* 将 RAID 的内部磁盘视为具有 2 个分区的一个设备。它看不到外部磁盘:
# ls -al /dev/disk/by-path
total 0
drwxr-xr-x 2 root root 100 Jun 29 17:06 .
drwxr-xr-x 5 root root 100 Jun 29 17:06 ..
lrwxrwxrwx 1 root root 9 Jun 29 17:06 pci-0000:02:00.0-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 Jun 29 17:06 pci-0000:02:00.0-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jun 29 17:06 pci-0000:02:00.0-scsi-0:0:0:0-part2 -> ../../sda2
答案1
问题不在于 Linux 端,而在于存储端。需要做的是在存储设备上将 Linux 指定为启动器并禁用 LUN Masking。
完成此操作后,我只需modprobe -r mptsas;sleep 1; modprobe mptsas
强制重新扫描即可。然后磁盘出现在lsscsi
:
[0:0:0:0] disk Adaptec System V1.0 /dev/sda
[0:1:0:0] disk WDC WD1003FBYX-0 01.0 -
[0:1:1:0] disk WDC WD1003FBYX-0 01.0 -
[4:0:0:0] disk Promise VessRAID 1840s 0304 /dev/sdb
[4:0:0:1] disk Promise VessRAID 1840s 0304 /dev/sdc