linux下故障硬盘点灯操作

按照常理说,硬盘故障了,会自动亮红灯,故障消除后会自动恢复正常,这个本来是服务器自带的功能。但现实情况往往不是这样,即使硬盘故障了,现场通过外观也看不出来。

1 硬盘点灯的意义

在运维的工作中,很大也是很重要的一项工作就是故障处理,而故障处理中以硬盘故障最为常见。如果更换错误,可能会造成数据丢失,后果很严重。那么如何能够准确快速的更换硬盘呢?给故障的硬盘点灯是一个非常好的选择。

1.1 定位硬盘更直观

无论是raid卡还是HBA卡,每块硬盘都有对应的LED灯,这些LED灯常用来指示磁盘的状态和行为。例如正常状态显示绿色,故障状态显示红色,rebuild状态显示粉色等等。
通过控制这些硬盘灯颜色的变化,现场操作时一眼就能定位到是哪块盘故障了,非常的直观(当然色盲可能有点难度,不过控制闪烁也能区分出来)。

1.2 减少误操作概率

除了定位故障硬盘更加直观以后,也减少了我们误操作的概率。因为这个点灯操作是在操作系统里触发的,在操作系统里定位的故障硬盘是要更准确的。为什么这么说呢?因为有些厂商服务器标识的硬盘ID号是错误的,尤其是国产的服务器。例如我在系统下看到的id号是[32:1],而服务器物理机上标识得可能是5号盘。

2 如何点灯操作

Raid卡的点灯操作用到如下命令:

[root@idc-center009 ~]# /opt/MegaRAID/MegaCli/MegaCli64 -h |grep PdLocate
MegaCli -PdLocate {[-start] | -stop} -physdrv[E0:S0,E1:S1,...] -aN|-a0,1,2|-aALL

MegaCli PdLocate start physdrv[32:1] -a0

MegaCli 是用来点灯的工具,我之前的文章中有介绍,它还可以用来配置raid。
PdLocate 是硬盘点灯的意思。
start 是点灯的意思,同时对应的关灯命令是stop
physdrv[32:1] 是硬盘所在位置
a0 是哪块raid卡,一般只有一块raid卡,就是a0

2.1.1 确定硬盘位置

使用如下命令可以查看到每块硬盘的具体信息。

[root@idc-center009 ~]# /opt/MegaRAID/MegaCli/MegaCli64 pdlist a0 |more
Adapter #0

Enclosure Device ID: 252
Slot Number: 0
Enclosure position: 0
Device Id: 2
Sequence Number: 2
Media Error Count: 0
Other Error Count: 0
Predictive Failure Count: 0
Last Predictive Failure Event Seq Number: 0
PD Type: SAS
Raw Size: 279.460 GB [0x22eec130 Sectors]
Non Coerced Size: 278.960 GB [0x22dec130 Sectors]
Coerced Size: 278.937 GB [0x22de0000 Sectors]
Firmware state: Online, Spun Up
SAS Address(0): 0x5000cca0301d11d1
SAS Address(1): 0x0
Connected Port Number: 0(path0)
Inquiry Data: HGST HUC101830CSS200 A3F002GHZLSB
FDE Capable: Not Capable
FDE Enable: Disable
Secured: Unsecured
Locked: Unlocked
Needs EKM Attention: No
Foreign State: None
Device Speed: Unknown
Link Speed: Unknown
Media Type: Hard Disk Device
Drive: Not Certified
Drive Temperature :29 Celsius

不过信息有点多,我们过滤一下信息,得到我们关心的数据。

[root@idc-center009 ~]# /opt/MegaRAID/MegaCli/MegaCli64 pdlist a0 |egrep 'Enclosure Device ID:|Slot|Fir|Raw' |sed 's/En/\n---------\nEn/g'

---------
Enclosure Device ID: 252
Slot Number: 0
Raw Size: 279.460 GB [0x22eec130 Sectors]
Firmware state: Online, Spun Up

---------
Enclosure Device ID: 252
Slot Number: 1
Raw Size: 279.460 GB [0x22eec130 Sectors]
Firmware state: Online, Spun Up

---------
Enclosure Device ID: 252
Slot Number: 2
Raw Size: 279.460 GB [0x22eec130 Sectors]
Firmware state: Online, Spun Up

---------
Enclosure Device ID: 252
Slot Number: 3
Raw Size: 279.460 GB [0x22eec130 Sectors]
Firmware state: Online, Spun Up

  • Enclosure Device ID和Slot Number 就是我们要的硬盘位置。
  • Firmware state 就是硬盘状态。
  • Raw Size 就是硬盘容量大小。

有了这些信息就可以给硬盘进行点灯了,例如我想给Enclosure Device ID: 252,Slot Number: 1的硬盘点灯。
那么只需要执行如下命令:

[root@idc-center009 ~]# /opt/MegaRAID/MegaCli/MegaCli64 PdLocate start physdrv[252:1] -a0
Adapter: 0: Device at EnclId-252 SlotId-1 -- PD Locate Start Command was successfully sent to Firmware

Exit Code: 0x00

关灯使用如下命令:

[root@idc-center009 ~]# /opt/MegaRAID/MegaCli/MegaCli64 PdLocate stop physdrv[252:1] -a0
Adapter: 0: Device at EnclId-252 SlotId-1 -- PD Locate Stop Command was successfully sent to Firmware

Exit Code: 0x00

2.2 HBA卡点灯操作

这里我通过倒叙的方式讲解容易理解一些,也就是结果导向进行思考。
当然,我们先把必要的软件安装上再讲。可以直接通过yum安装两个软件lsscsi、sg3_utils。

[root@idc-pxe009 ~]# yum install lsscsi sg3_utils
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
Setting up Install Process
Package lsscsi-0.23-3.el6.x86_64 already installed and latest version
Package sg3_utils-1.38-1.x86_64 already installed and latest version
Nothing to do

2.2.1 点灯的最终命令

获取硬盘灯的状态使用如下命令:
sg_ses --dev-slot-num=1 --get=ident /dev/sg12

  • sg_ses 是点灯的工具,这个工具还有很多其他功能,有兴趣的可以去了解一下。官方的解释是这样的:
  • The sg_ses utility is found in the sg3_utils package.
    The sg_ses utility enables a user "to manage and sense the state of the power supplies, cooling devices, displays, indicators, individual drives, and other non-SCSI elements installed in an enclosure".
    ————————————————/dev/sg12 是HBA卡上的enclosu。这里可以大概理解成这样,比如一块HBA卡,HBA卡上分了几个组,每个组上插着多块硬盘,这里的组就是enclosu。
    --dev-slot-num=1 是每个组的硬盘位置,比如这里就是sg12组里的id号等于1的硬盘。
    --get=ident 获取硬盘灯的状态,这里稍微改一下也可以进行设置。
阅读剩余
THE END