Noway11

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

通常我们使用的DELL/HP/IBM三家的机架式PC级服务器阵列卡是从LSI的卡OEM出来的,DELL和IBM两家的阵列卡原生程度较高,没有做太多封装,可以用原厂提供的阵列卡管理工具进行监控;而HP的阵列卡一般都做过封装了,因此需要使用自身特有的管理工具来监控。
MegaCli是一款管理维护硬件RAID软件,可以通过它来了解当前raid卡的所有信息,包括raid卡的型号、raid的阵列类型、raid上各磁盘状态等等。

一般时候我们对硬盘当前的状态不太好确定,一般通过机房人员巡检来完成,有没有通过软件的方式来检查确定这个问题呢。MegaCli就可以做到,一般通过 MegaCli 的Media Error Count: 0 Other Error Count: 0 这两个数值来确定阵列中磁盘是否有问题;Medai Error Count 表示磁盘可能错误,可能是磁盘有坏道,这个值不为0值得注意,数值越大,危险系数越高,Other Error Count 表示磁盘可能存在松动,可能需要重新再插入。MegaCli 可以对阵列中所有的磁盘进行检测,我们可以通过脚本的方式来检测相关参数,从而通知管理人员。

一.下载与安装

线上使用的工具一定要确保来源的安全,尽量官网下载,虽然可能在找的时候稍微有点麻烦。如果有些技巧的话,可能会稍快,下面说两种方式。

第一个下载方式:
http://www.dell.com/support/article/cn/zh/cndhs1/SLN292232 #通过dell官网进行搜索找到包含有下载链接的页面

第二个下载方式:
https://www.broadcom.com/support/download-search #进入官网搜索页面,这是官网跳转过来的搜索页面

安装(注意在安装megacli前需要先安装Lib_Utils-1.00-09.noarch.rpm)
unzip 8-07-14_MegaCLI.zip
rpm –ivh 8-07-14_MegaCLI.rpm

#/opt/MegaRAID/MegaCli/MegaCli64 -help  #可以查看版本以及相关的命令使用说明。默认命令装在了:/opt/MegaRAID/MegaCli/MegaCli64这里
#/opt/MegaRAID/MegaCli/MegaCli64  -cfgdsply -aALL|grep 'Product Name'  #通过命令可以看出我们的RAID卡的型号为:PERC H730 Mini
Product Name: PERC H710P Mini

二.MegaCli命令

#/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aALL  #查看raid级别

#/opt/MegaRAID/MegaCli/MegaCli64 -AdpAllInfo -aALL #查看raid卡信息

#/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL #查看硬盘信息

#/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -aAll #查看电池信息

#/opt/MegaRAID/MegaCli/MegaCli64 -FwTermLog -Dsply -aALL #查看raid卡日志

#/opt/MegaRAID/MegaCli/MegaCli64 -adpCount #显示适配器个数

#/opt/MegaRAID/MegaCli/MegaCli64 -AdpGetTime –aALL #显示适配器时间

#/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aAll  #显示所有逻辑磁盘组信息

#/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL |grep 'Charger Status' #查看电池充电状态

#/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL #显示BBU状态信息

#/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuCapacityInfo -aALL #显示BBU容量信息

#/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuDesignInfo -aALL #显示BBU设计参数

#/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuProperties -aALL #显示当前BBU属性

#/opt/MegaRAID/MegaCli/MegaCli64 -cfgdsply -aALL #显示raid卡型号,raid设置,disk相关信息

#/opt/MegaRAID/MegaCli/MegaCli64 -LDGetProp -Cache -L0 –a0 #查看磁盘的缓存策略

#/opt/MegaRAID/MegaCli/MegaCli64 -LDGetProp -Cache -LALL -aALL  # 查看所有磁盘的缓存策略

磁盘的缓存策略详解:

# /opt/MegaRAID/MegaCli/MegaCli64 -LDGetProp -Cache -L0 -a0                    
  Adapter 0-VD 0(target id: 0): Cache Policy:WriteBack, ReadAdaptive, Direct, No Write Cache if bad BBU

策略介绍:
WriteBack与WriteThrough
1.WriteBack:进行写操作时,将数据写入RAID卡缓存,并直接返回,RAID卡控制器将在系统负载低或者Cache满了的情况下把数据写 入 硬盘。该设置会大大提升RAID卡写性能,绝大多数的情况下会降低系统IO负载。 数据的可靠性由BBU(Battery Backup Unit)电池 进行保证
2.WriteThrough: 数据写操作不使用缓存,数据直接写入磁盘。RAID卡写性能下降,在大多数情况下该设置会造成系统IO负载上升;

ReadAheadNone, ReadAdaptive, ReadAhead.
ReadAheadNone: 不开启预读。这是默认的设置
ReadAhead: 在读操作时,预先把后面顺序的数据加载入Cache,在顺序读取时,能提高性能,相反会降低随机读的性能。
ReadAdaptive: 自适应预读,当Cache memory和IO空闲时,采取顺序预读,平衡了连续读性能及随机读的性能,需要消耗一定的计算能力。

WT(Write through),WB(Write back),NORA(No read ahead),RA(Read ahead),ADRA(Adaptive read ahead),Cached,Direct

Write Policy(写入策略) 将高速缓存方法设置为回写或通过写。
* 在Write-through(通过写)高速缓存中,当磁盘子系统已接收到一个事务中的所有数据时,该控制器将数据传输完成信号发送给主机。
* 在Write-back(回写)高速缓存中,当控制器高速缓存已接收到某个事务中的所有数据时,该控制器将数据传输完成信号发送给主机。

Read-ahead(预读)启用逻辑驱动器的SCSI预读功能。 可将此参数设为No-Read-Ahead(非预读)、Read-ahead(预读)或Adaptive(自适应)。 默认设置为Adaptive(自适应)。
* No-Read-Ahead(非预读)指定控制器在当前逻辑驱动器中不使用预读方式。
* Read-ahead(预读)在读操作时,预先把后面顺序的数据加载入Cache,在顺序读取时,能提高性能,相反会降低随机读的性能。
* Adaptive(自适应)指定如果最近两次的磁盘访问出现在连续的扇区内,则控制器开始采用Read-ahead(预读)。 如果所有的读取请求都是随机的,则该算法回复到No-Read-Ahead(非预读),但仍要判断所有的读取请求是否有按顺序操作的可能。当Cache memory和IO空闲时,采取顺序预读,平衡了连续读性能及随机读的性能,需要消耗一定的计算能力。

Cache Policy(高速缓存策略) 适合在特定逻辑驱动器上读取。 它并不影响Read ahead(预读)高速缓存。
* Cached I/O(高速缓存I/O)指定所有读取数据在高速缓存存储器中缓存。
* Direct I/O(直接I/O)指定读取数据不在高速缓存存储器中缓存。 此为默认设置。 它不会代替高速缓存策略设置。数据被同时传送到高速缓存和主机。 如果再次读取同一数据块,则从高速缓存存储器读取

Write Cache OK if Bad BBU和 No Write Cache if Bad BBU
No Write Cache if Bad BBU: 如果BBU出问题,则关闭Write Cache。由WriteBack自动切换到WriteThrough模式。如果没有特殊要求,强烈建议采用该设置,以确保数据的安全。
Write Cache OK if Bad BBU: 如果BBU出问题,依然启用Write Cache. 这是不推荐的设置,BBU出问题将无法保证断电情况下数据的正常,如果此时依然采用WriteBack模式,遇到断电将发生数据丢失。除非有UPS作额外保证,不然不推荐采用这个设置。

磁盘策略更改详解:

修改WriteBack:
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -WB -Lall -aAll

修改WriteThrough:
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -WT -Lall -aAll

修改No Write Cache if Bad BBU:
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -NoCachedBadBBU -Lall -aAll

修改Write Cache OK if Bad BBU:
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -CachedBadBBU -Lall -aAll

或者其他:
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp WT|WB|NORA|RA|ADRA -L0 -a0
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -Cached|-Direct -L0 -a0

在线创建raid阵列,删除阵列:

创建一个raid5阵列,由物理盘号为3,4,5构成,该阵列的热备盘是物理盘号6:
/opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r5 [32:3,32:4,32:5] WB Direct -Hsp[32:6] -a0
#r5代表的就是raid5,[32:5]里面32代表的是Enclosure Device ID,5代表的是Slot Number,WB和Direct缓存策略前面提到了,Hsp[32:6] 指定第七块物理硬盘为热备盘,a0表示陈列卡号。

在线更换raid0硬盘,原硬盘损坏。如盘号为5的硬盘损坏之前做了raid0,现在更换之后需要对新硬盘做raid0:
/opt/MegaRAID/MegaCli/MegaCli64  -DiscardPreservedCache -L5 -a0

#如果全是单盘raid0的话,清空磁盘组5的一般是第六块物理硬盘的raid缓存,不然就要重启服务器生效,L5是通过MegaCli64 -LDInfo -Lall -aALL得到的raid组对应的ID号,如Virtual Drive: 5 (Target Id: 5),ID号是从0开始的。
#/opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r0 [32:5] -a0 #将盘号为5的硬盘做成raid0模式,其他参数使用默认。

清空所有的缓存:(一般不要这么干)
#/opt/MegaRAID/MegaCli/MegaCli64 -DiscardPreservedCache -Lall -a0 -NoLOG

删除raid阵列:
#/opt/MegaRAID/MegaCli/MegaCli64 -CfgLdDel -L5 -a0  #删除阵列

其他的一些raid操作:

指定第 5 块盘作为全局热备
#/opt/MegaRAID/MegaCli/MegaCli64 -PDHSP -Set [-EnclAffinity] [-nonRevertible] -PhysDrv[32:5] -a0

指定为某个阵列的专用热备
#/opt/MegaRAID/MegaCli/MegaCli64 -PDHSP -Set [-Dedicated [-Array1]] [-EnclAffinity] [-nonRevertible] -PhysDrv[32:5] -a0

删除全局热备
#/opt/MegaRAID/MegaCli/MegaCli64 -PDHSP -Rmv -PhysDrv[32:5] -a0

将某块物理盘下线/上线
#/opt/MegaRAID/MegaCli/MegaCli64 -PDOffline -PhysDrv [32:4] -a0
#/opt/MegaRAID/MegaCli/MegaCli64 -PDOnline -PhysDrv [32:4] -a0

手工配置初始化:

#/opt/MegaRAID/MegaCli/MegaCli64 -LDInit  -start –L0  -a0               #快速初始化

#/opt/MegaRAID/MegaCli/MegaCli64 -LDInit  -start  -full –L0 -a0        #完全初始化

#/opt/MegaRAID/MegaCli/MegaCli64 -LDInit  -progdsply -L0 -a0        #显示初始化的进度

#/opt/MegaRAID/MegaCli/MegaCli64 -LDInit  -abort  -L0  -a0               #结束完全初始化

raid卡电池操作:

#/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -BbuLearn a0  #手动充电

#/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL #查看充电状态

#/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL #查看充电进度百分比

查看raid阵列中掉线的硬盘:
#/opt/MegaRAID/MegaCli/MegaCli64 -pdgetmissing -a0

查看Megacli的log:
#/opt/MegaRAID/MegaCli/MegaCli64 -FwTermLog dsply -a0 > /tmp/Megacli.log

查看磁盘的raid级别:

RAID Level对应关系:
RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0   #RAID 1
RAID Level : Primary-0, Secondary-0, RAID Level Qualifier-0   #RAID 0
RAID Level : Primary-5, Secondary-0, RAID Level Qualifier-3   #RAID 5

如何判断磁盘的raid级别:

双盘做了raid1的举例:

 1 #/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LAll -aAll                             
 2 
 3 Bash
 4 Adapter 0 -- Virtual Drive Information:
 5 Virtual Drive: 0 (Target Id: 0)
 6 Name                :raid1
 7 RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0  #通过RAID Level可以看到这是raid1的盘
 8 Size                : 278.875 GB  #磁盘大小为300G
 9 State               : Optimal  #最佳状态
10 Strip Size          : 64 KB
11 Number Of Drives    : 2  #2 说明是两块盘组成
12 Span Depth          : 1  #说明实际只是raid 1

全盘做了raid5的举例:

 1 #/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LAll -aAll                                    
 2 
 3 Bash
 4 Adapter 0 -- Virtual Drive Information:
 5 Virtual Drive: 0 (Target Id: 0)
 6 Name                :raid5
 7 RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3  #通过RAID Level  可以看出这是raid5
 8 Size                : 60.032 TB #总大小60T
 9 Sector Size         : 512
10 Is VD emulated      : Yes  
11 Parity Size         : 5.457 TB #单盘大小是6T
12 State               : Optimal
13 Strip Size          : 64 KB
14 Number Of Drives    : 12  #由12块盘组成
15 Span Depth          : 1  #深度为1

注:如果是做了热备盘的情况呢,再最下面会有两行信息:
Number of Dedicated Hot Spares: 1  #有1块盘做了热备
     0 : EnclId - 32 SlotId - 11   #[32:11]盘做的热备

raid10的举例:

 1 #/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LAll -aAll
 2 
 3 Bash
 4 Virtual Drive: 1 (Target Id: 1)
 5 Name                :raid10-01
 6 RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
 7 Size                : 556.929 GB  #总大小600G
 8 State               : Optimal
 9 Strip Size          : 64 KB
10 Number Of Drives per span:2  #表示每2个物理盘做成一个RAID1盘组
11 Span Depth          : 2 #2个RAID1盘组做成了RAID10

硬盘故障后一般操作方法:

1.热备盘磁盘故障后,使用新硬盘替换,直接将新硬盘指定为热备盘:
#/opt/MegaRAID/MegaCli/MegaCli64 -PDHSP -Set -PhysDrv[32:5] -a0

2.热备盘磁盘故障后,如果使用有数据磁盘更换,首先清除Foreign配置,再将替换磁盘指定为热备盘:
#/opt/MegaRAID/MegaCli/MegaCli64 -cfgforeign -scan -a0      #扫描外来配置的个数
#/opt/MegaRAID/MegaCli/MegaCli64 -cfgforeign -clear -a0     #清除外来配置

#/opt/MegaRAID/MegaCli/MegaCli64 -PDHSP -Set -PhysDrv[32:5] -a0

3.如果确定就是本机磁盘,也可以直接导入来导入配置,恢复虚拟磁盘组:
#/opt/MegaRAID/MegaCli/MegaCli64 -cfgforeign -import -a0  

磁盘状态的变化(从拔盘,到插盘的过程):

Device |Normal|Damage|Rebuild|Normal
Virtual Drive |Optimal|Degraded|Degraded|Optimal
Physical Drive |Online|Failed –> Unconfigured|Rebuild|Online

查看磁盘同步进度:

VD init

阵列创建完后,会有一个初始化同步块的过程,可以看看其进度:
#/opt/MegaRAID/MegaCli/MegaCli64 -LDInit -ShowProg -LALL -aALL

以动态可视化文字界面显示 :
#/opt/MegaRAID/MegaCli/MegaCli64 -LDInit -ProgDsply -LALL –aALL

VD background init

查看阵列后台初始化进度 :
#/opt/MegaRAID/MegaCli/MegaCli64 -LDBI -ShowProg -LALL -aALL

以动态可视化文字界面显示 :
#/opt/MegaRAID/MegaCli/MegaCli64 -LDBI -ProgDsply -LALL -aALL

Disk rebuid

查看某个物理磁盘重建进度:
#/opt/MegaRAID/MegaCli/MegaCli64 -PDRbld -ShowProg -PhysDrv [32:5] -a0

以动态可视化文字界面显示:
#/opt/MegaRAID/MegaCli/MegaCli64 -PDRbld -ProgDsply -PhysDrv [32:5] -a0

Disk copyback

查看某个物理磁盘回写进度:
#/opt/MegaRAID/MegaCli/MegaCli64 -pdcpybk -showprog -physdrv[32:0] -a0 

以动态可视化文字界面显示:
#/opt/MegaRAID/MegaCli/MegaCli64  -pdcpybk -ProgDsply -PhysDrv [32:5] -a0

 

 

posted on 2018-03-27 15:38  Noway11  阅读(3216)  评论(0编辑  收藏  举报