Raid相關操作與注意事項
Raid5
SATA盤組成的Raid5,在保護數據的前提下達到高性能:
-
RAID要有BBU
-
Current Cache Policy采用WriteBack,No Write Cache if Bad BBU(沒有BBU要改為WriteThrough),write policy分為兩種:
-
WriteBack
WriteBack有更好的性能,因為數據會寫入controller Cache,不需要等待寫入Hard driver,所以在沒有BBU的情況下很容易引起數據丟失。
-
WriteThrough
WriteThrough不使用Raid的Cache,性能要比WriteBack低很多
-
-
Disk Cache Policy即SATA盤自己的Cache策略,與Raid無關, 最好要設為disable(因為異常掉電可能會很慘)
UPS:不間斷電源,保障計算機系統在停電之后繼續工作一段時間
BBU:在供電出現問題的情況下,為controller Cache提供一段時間的供電,在BBU電量耗盡之前恢復供電,可保證數據完整。
BBU是由鋰離子電池和電子控制電路組成,電池的壽命取決於其老化程度,無論是否充放電已經充放電的多少,鋰離子電池的容量都會減少。為了記錄電池的放電曲線,延長電池的壽命,默認會啟用自動校准模式(AutoLearn Mode),在Learn Cycle 內,Raid卡控制器不會使用BBU,這個過程可能持續12小時,這個過程中會禁用Write back,直到其完成校准。
這個Auto-Learn Mode,一般30天執行一次,我們的BBU 28天之星一次。一般不要關閉,因為這可以有效地延長壽命。 如果不做這個校准,壽命會從2年下降到8個月。
創建Raid
首先通過PDList查看需要組raid的盤Enclosure Device ID與Slot Number:
/opt/MegaRAID/MegaCli/MegaCli64 PDList -A0
然后組建raid
/opt/MegaRAID/MegaCli/MegaCli64 CfgLDAdd -r5 [E:S1,E:S2,E:S3,E:S4] -strpsz128 -A0
# r5 raid5
# E:S Enclosure Device ID:Slot Number
# strpsz128 raid條帶
刪除Raid
首先通過LDInfo看要刪除Virtual Drive值:
/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aAll
然后刪除邏輯盤
/opt/MegaRAID/MegaCli/MegaCli64 -CfgLdDel -Ln -A0
# n 要刪除的邏輯磁盤的值
清除Raid下面的foreign key,不過不清除,后面無法建Raid:
/opt/MegaRAID/MegaCli/MegaCli64 -CfgForeign -Scan -aALL
/opt/MegaRAID/MegaCli/MegaCli64 -CfgForeign -Clear -aALL
Disk與BBU相關設置
查看是否存在BBU
/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -aAll
設置raid Current Cache Policy
# Write Cache OK if Bad BBU(除非特殊情況,否則丟數據可能性變大)
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp CachedBadBBU -Lall -aALL
設置為No Write Cache if Bad BBU,即BBU損壞或learning時變為Write Through:
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -NoCachedBadBBU -Immediate -Lall -aAll
BBU每個月會發起learning,也可以手動發起:
/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -BbuLearn -aALL
Disk Cache
上面說了Disk Cache Policy最好關掉:
關閉Disk Cache
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -DisDskCache -Immediate -Lall -aAll
打開Disk Cache
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -EnDskCache -Immediate -Lall -aAll
檢查Raid上的磁盤
先找出有明顯錯誤的,看media error和other error:
/opt/MegaRAID/MegaCli/MegaCli64 -pdlist -a0|grep -Ei "media error |other error"
光憑media error和other error是無法確定盤是否高危的,還需要找到Device Id,使用smartctl工具進去看磁盤信息:
smartctl -a -d megaraid, /dev/sdd
# 后面跟megaraid,【Device Id】 /dev/sdd【在當前raid卡上的盤符】
# 以下幾條為高危盤的參考
# 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
# 187 Reported_Uncorrect
# 188 Command_Timeout【這個有時候會特別大 有一個換算 一般沒問題】
# 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0
# 198 Offline_Uncorrectable 0x0030 200 200 000 Old_age Offline - 0
如果以上指標一個或多個數值特別大,證明該盤為高危盤。
快速找出危險盤:
/opt/MegaRAID/MegaCli/MegaCli64 -LDPDinfo -A0 |grep "Device Id" |awk '{print $3}' |xargs -I {} smartctl -a -d megaraid,{} /dev/sdd |grep -Ei "Reallocated_Sector_Ct|^187|^188|^197"
關機換Raid卡
先查看BBU和集群信息:
/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -A0 #總信息
/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL
/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuCapacityInfo -A0
狀態應該為Battery State: Optimal是正常
然后更改raid卡策略為WriteThrough:
/opt/MegaRAID/MegaCli/MegaCli64 LDSetProp WT -Lall -Aall(WriteThrough)
/opt/MegaRAID/MegaCli/MegaCli64 LDSetProp WB -Lall -Aall(WriteBack)
先sync,目的是將操作系統文件系統的緩存刷到硬盤:
sync
再將raid卡緩存上的數據刷到硬盤:
/opt/MegaRAID/MegaCli/MegaCli64 -AdpCacheFlush -Aall
raid卡時間
默認raid卡時間與我們系統時間相差八小時,即:raid卡時間+八小時=系統時間
查看raid卡時間
/opt/MegaRAID/MegaCli/MegaCli64 adpgettime -a0
設置raid卡時間
/opt/MegaRAID/MegaCli/MegaCli64 AdpSetTime 20200510 18:18:00 -a0
其他
換盤后查看盤的rebuild進度
/opt/MegaRAID/MegaCli/MegaCli64 -PDRbld -showprog -physDrv [E:S] -a0
/opt/MegaRAID/MegaCli/MegaCli64 -pdrbld -progdsply -physdrv[E:S] -aALL
修改raid盤的rebuild速度,默認為30
/opt/MegaRAID/MegaCli/MegaCli64 -AdpSetProp RebuildRate -30 -a0
獲取raid卡日志
/opt/MegaRAID/MegaCli/MegaCli64 -AdpEventLog -GetEvents -f raid.envent.log -a0
查看邏輯盤信息
/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aAll

圖上Disk Cache Policy是Disabled,如果是Disk's Default則默認如下:
- For virtual disks containing SATA disks , Enabled
- For virtual disks containing SAS disks , Disabled
指定磁盤燈閃爍與關閉
# 閃爍
/opt/MegaRAID/MegaCli/MegaCli64 -PdLocate -start -physdrv [E:S] -aALL
# 取消閃爍
/opt/MegaRAID/MegaCli/MegaCli64 -PdLocate -stop -physdrv [E:S] -aALL
raid卡恢復出廠設置
/opt/MegaRAID/MegaCli/MegaCli64 -AdpFacDefSet -a0
