前言
某块硬盘出现故障了,以/dev/sdal为例。虽然在操作系统里面可以看到/dev/sdal是无法读取故障了, 但去了机房现场,发现硬盘的指示灯没有变成红色,并且服务器上面插着数十块硬盘。 那么如何找到/dev/sdal对应的哪块硬盘呢?
步骤1:查看设备编号
/dev/sda、/dev/sdb、/dev/sdc等等,属于操作系统层面识别的硬盘盘符或者设备符号。
还有一种硬件识别的设备编号/dev/sgxx,例如/dev/sg01、/dev/sg02等等。所以要找到/dev/sdal对应的硬件设备编号是什么?
使用lsscsi命令查看硬盘/dev/sdal对应的硬件设备编号是/dev/sg35,其属于插板槽/dev/sg41的。
插板槽/dev/sg41上面有/dev/sg29~sg40合计12块硬盘,/dev/sg35属于第7块盘,即/dev/sdal属于第7块盘。
[root@localhost ~]# lsscsi -g
[root@localhost ~]# lsscsi -g
[0:0:0:0] disk ATA INTEL SSDSC2KB48 0110 - /dev/sg2
[0:0:1:0] disk ATA INTEL SSDSC2KB48 0110 - /dev/sg3
[0:0:2:0] disk ATA HGST HUS726T6TAL W41G /dev/sdb /dev/sg4
[0:0:3:0] disk ATA HGST HUS726T6TAL W41G /dev/sdc /dev/sg5
[0:0:4:0] disk ATA HGST HUS726T6TAL W41G /dev/sdd /dev/sg6
[0:0:5:0] disk ATA HGST HUS726T6TAL W41G /dev/sde /dev/sg7
[0:0:6:0] disk ATA HGST HUS726T6TAL W41G /dev/sdf /dev/sg8
[0:0:7:0] disk ATA HGST HUS726T6TAL W41G /dev/sdg /dev/sg9
[0:0:8:0] disk ATA HGST HUS726T6TAL W41G /dev/sdh /dev/sg10
[0:0:9:0] disk ATA HGST HUS726T6TAL W41G /dev/sdi /dev/sg11
[0:0:10:0] disk ATA HGST HUS726T6TAL W41G /dev/sdj /dev/sg12
[0:0:11:0] disk ATA HGST HUS726T6TAL W41G /dev/sdk /dev/sg13
[0:0:12:0] disk ATA HGST HUS726T6TAL W41G /dev/sdl /dev/sg14
[0:0:13:0] disk ATA HGST HUS726T6TAL W41G /dev/sdm /dev/sg15
[0:0:14:0] disk ATA HGST HUS726T6TAL W41G /dev/sdn /dev/sg16
[0:0:15:0] disk ATA HGST HUS726T6TAL W41G /dev/sdo /dev/sg17
[0:0:16:0] disk ATA HGST HUS726T6TAL W41G /dev/sdp /dev/sg18
[0:0:17:0] disk ATA HGST HUS726T6TAL W41G /dev/sdq /dev/sg19
[0:0:18:0] disk ATA HGST HUS726T6TAL W41G /dev/sdr /dev/sg20
[0:0:19:0] disk ATA HGST HUS726T6TAL W41G /dev/sds /dev/sg21
[0:0:20:0] disk ATA HGST HUS726T6TAL W41G /dev/sdt /dev/sg22
[0:0:21:0] disk ATA HGST HUS726T6TAL W41G /dev/sdu /dev/sg23
[0:0:22:0] disk ATA HGST HUS726T6TAL W41G /dev/sdv /dev/sg24
[0:0:23:0] disk ATA HGST HUS726T6TAL W41G /dev/sdw /dev/sg25
[0:0:24:0] disk ATA HGST HUS726T6TAL W41G /dev/sdx /dev/sg26
[0:0:25:0] disk ATA HGST HUS726T6TAL W41G /dev/sdy /dev/sg27
[0:0:26:0] enclosu SUGON 380-41910-3000 1205 - /dev/sg28
[0:1:0:0] disk LSI Logical Volume 3000 /dev/sda /dev/sg1
[15:0:0:0] cd/dvd AMI Virtual CDROM0 1.00 /dev/sr0 /dev/sg0
[16:0:0:0] disk ATA INTEL SSDSC2KB96 0110 /dev/sdz /dev/sg29
[16:0:1:0] disk ATA INTEL SSDSC2KB96 0110 /dev/sdaa /dev/sg30
[16:0:2:0] disk ATA INTEL SSDSC2KB96 0110 /dev/sdab /dev/sg31
[16:0:3:0] disk ATA INTEL SSDSC2KB96 0110 /dev/sdac /dev/sg32
[16:0:4:0] disk ATA INTEL SSDSC2KB96 0110 /dev/sdad /dev/sg33
[16:0:5:0] disk ATA INTEL SSDSC2KB96 0110 /dev/sdae /dev/sg34
[16:0:7:0] disk ATA INTEL SSDSC2KB96 0110 /dev/sdag /dev/sg36
[16:0:8:0] disk ATA INTEL SSDSC2KB96 0110 /dev/sdah /dev/sg37
[16:0:9:0] disk ATA INTEL SSDSC2KB96 0110 /dev/sdai /dev/sg38
[16:0:10:0] disk ATA INTEL SSDSC2KB96 0110 /dev/sdaj /dev/sg39
[16:0:11:0] disk ATA INTEL SSDSC2KB96 0110 /dev/sdak /dev/sg40
[16:0:12:0] enclosu SUGON 380-41910-3001 1205 - /dev/sg41
[16:0:13:0] disk ATA INTEL SSDSC2KB96 0110 /dev/sdal /dev/sg35
[root@localhost ~]#
步骤2:使用 sg_ses 命令
查看二进制信息
首先安装sg_ses工具,网上有现成的yum或者apt安装方式,具体怎么安装这里就不讲了。
使用sg_ses命令查看插板槽/dev/sg41的二进制信息,此时需要注意是查看插板槽dev/sg41的二进制信息,不是查看/dev/sg35的二进制信息。
[root@localhost ~]# sg_ses -p 0x2 /dev/sg41 -r
得到如下结果:0~7这前8个字节是插板槽的状态,如下面蓝色所示。 后面每4个字节代表一块硬盘,其中第3个字节如果为“00”,则代表指示灯亮,如果为“02”,则代表指示灯灭。 /dev/sdal这个第7块盘,如下面红色所示。
[root@localhost ~]# sg_ses -p 0x2 /dev/sg41 -r
00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00
01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00
11 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00
01 00 00 00 01 00 00 00 00 00 00 00 01 00 04 bc
01 00 01 f0 01 00 00 b2 01 00 00 58 00 00 00 00
01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
01 00 53 00 01 00 39 00 01 00 34 00 01 00 37 00
01 00 33 00 00 00 00 00 01 02 4c 27 00 00 00 00
01 80 00 20
[root@localhost ~]#
修改二进制信息
把上面的二进制信息拷贝到服务器主机上面的文件,这个文件随便新建一个sesinfo都行。 然后修改二进制信息,如下面红色。
[root@localhost ~]# vi sesinfo
00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00
01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00
08 00 02 00 01 00 00 00 01 00 00 00 01 00 00 00
01 00 00 00 01 00 00 00 00 00 00 00 01 00 04 bc
01 00 01 f0 01 00 00 b2 01 00 00 58 00 00 00 00
01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
01 00 53 00 01 00 39 00 01 00 34 00 01 00 37 00
01 00 33 00 00 00 00 00 01 02 4c 27 00 00 00 00
01 80 00 20
[root@localhost ~]#
控制槽位上的指示灯亮
第 1个字节 ”08” 表示这4 个字节是控制命令,第 3 个字节”00” 表示让 LED灯灭。
[root@localhost ~]# cat sesinfo | sg_ses -c -p 0x2 -d - /dev/sg41