通常我们使用的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的举例:
#/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LAll -aAll Bash
Adapter -- Virtual Drive Information:
Virtual Drive: (Target Id: )
Name :raid1
RAID Level : Primary-, Secondary-, RAID Level Qualifier- #通过RAID Level可以看到这是raid1的盘
Size : 278.875 GB #磁盘大小为300G
State : Optimal #最佳状态
Strip Size : KB
Number Of Drives : # 说明是两块盘组成
Span Depth : #说明实际只是raid
全盘做了raid5的举例:
#/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LAll -aAll Bash
Adapter -- Virtual Drive Information:
Virtual Drive: (Target Id: )
Name :raid5
RAID Level : Primary-, Secondary-, RAID Level Qualifier- #通过RAID Level 可以看出这是raid5
Size : 60.032 TB #总大小60T
Sector Size :
Is VD emulated : Yes
Parity Size : 5.457 TB #单盘大小是6T
State : Optimal
Strip Size : KB
Number Of Drives : #由12块盘组成
Span Depth : #深度为1
注:如果是做了热备盘的情况呢,再最下面会有两行信息:
Number of Dedicated Hot Spares: 1 #有1块盘做了热备
0 : EnclId - 32 SlotId - 11 #[32:11]盘做的热备
raid10的举例:
#/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LAll -aAll Bash
Virtual Drive: (Target Id: )
Name :raid10-
RAID Level : Primary-, Secondary-, RAID Level Qualifier-
Size : 556.929 GB #总大小600G
State : Optimal
Strip Size : KB
Number Of Drives per span: #表示每2个物理盘做成一个RAID1盘组
Span Depth : #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