我使用 PERC H730 Mini raid 控制器:
# lspci -d::0104 -k
02:00.0 RAID bus controller: Broadcom / LSI MegaRAID SAS-3 3108 [Invader] (rev 02)
Subsystem: Dell PERC H730 Mini
Kernel driver in use: megaraid_sas
Kernel modules: megaraid_sas
这是连接到服务器的磁盘:
# lsscsi -s
[0:2:0:0] disk DELL PERC H730 Mini 4.28 /dev/sda 499GB
[0:2:1:0] disk DELL PERC H730 Mini 4.28 /dev/sdb 8.00TB
[0:2:2:0] disk DELL PERC H730 Mini 4.28 /dev/sdc 8.00TB
[0:2:3:0] disk DELL PERC H730 Mini 4.28 /dev/sdd 8.00TB
[0:2:4:0] disk DELL PERC H730 Mini 4.28 /dev/sde 8.00TB
[0:2:5:0] disk DELL PERC H730 Mini 4.28 /dev/sdf 8.00TB
[0:2:6:0] disk DELL PERC H730 Mini 4.28 /dev/sdg 8.00TB
[0:2:7:0] disk DELL PERC H730 Mini 4.28 /dev/sdh 8.00TB
[0:2:8:0] disk DELL PERC H730 Mini 4.28 /dev/sdi 8.00TB
[0:2:9:0] disk DELL PERC H730 Mini 4.28 /dev/sdj 8.00TB
[0:2:10:0] disk DELL PERC H730 Mini 4.28 /dev/sdk 8.00TB
[0:2:11:0] disk DELL PERC H730 Mini 4.28 /dev/sdl 8.00TB
[0:2:12:0] disk DELL PERC H730 Mini 4.28 /dev/sdp 8.00TB
[0:2:13:0] disk DELL PERC H730 Mini 4.28 /dev/sdm 8.00TB
[0:2:14:0] disk DELL PERC H730 Mini 4.28 /dev/sdn 8.00TB
[0:2:15:0] disk DELL PERC H730 Mini 4.28 /dev/sdq 8.00TB
[0:2:16:0] disk DELL PERC H730 Mini 4.28 /dev/sdo 399GB
On smartctl
,我以为设备名称是denoting which disk on the controller is monitored.
但是,当使用一个 RAID 控制器时,smartctl
也需要The non-negative integer N (in the range of 0 to 127 inclusive) denotes which disk on the controller is monitored.
并在值不同时给出完全不同的结果N
:
# smartctl -i /dev/sdq -d megaraid,0 -j | jq -r .model_name,.user_capacity.bytes
INTEL SSDSC2BX400G4R
400088457216
# smartctl -i /dev/sdq -d megaraid,1 -j | jq -r .model_name,.user_capacity.bytes
SEAGATE ST8000NM0075
8001563222016
似乎使用N=0
返回了错误的磁盘,因为容量与输出的容量不匹配lsscsi -s
。
如何选择合适的N
值smartctl
?
这很正常。您的结果永远不会与
lsscsi
输出匹配,因为您看到的 SCSI 设备根本lsscsi
不是您的物理磁盘 - 这些是逻辑RAID 卷,由您的 RAID 控制器模拟的虚拟“磁盘”(由于不具有任何 SMART 数据)变为虚拟)。实际的物理磁盘对操作系统来说是不可见的——它们隐藏在 RAID 控制器“后面”(这实际上是控制器的工作),这就是为什么您需要“作弊代码
-d megaraid
”来访问它们。(如果控制器像普通 HBA 一样工作并直接暴露磁盘,则不需要任何特殊语法来访问它们,只需使用它们的 /dev 名称;但是控制器无法真正实现 RAID 而不受干扰。 )