用MegaCli做陣列,需要注意的參數
Adapter #0 陣列卡號,適配器編號
Enclosure Device ID: 32 raid卡的ID號
Slot Number: 0 物理磁盤的slot號,磁盤位置
我們在做raid時,必須要使用上方的參數
指定硬盤的位置時,[Enclosure Device ID: Slot Number]
例如:指定0號盤,[32:0]
指定raid使用的適配器的編號,-aN
例如:指定0號適配器,-a0
MegaCli的安裝
下載rpm包
wget http://mirror.cogentco.com/pub/misc/MegaCli-8.07.14-1.noarch.rpm
安裝
rpm -ivh MegaCli-8.07.14-1.noarch.rpm
安裝完,就會在/opt/下創建個MegaRAID目錄,文件都在里面
添加軟連接
ln -s /opt/MegaRAID/MegaCli/MegaCli64 /usr/bin/MegaCli64
查看幫助手冊
MegaCli64 –h
顯示所有適配器信息 通常注意Adapter即可
MegaCli64 -AdpAllInfo -aAll|grep "Adapter"
查看所有物理硬盤的Enclosure Device ID及Slot Number
MegaCli64 -PDList -aALL | egrep 'Enclosure Device ID|Slot Number'
查看所有物理硬盤狀態
MegaCli64 -PDList -aALL|egrep 'Firmware state'
查看所有物理硬盤的Foreign信息
MegaCli64 -PDList -aALL|egrep 'Foreign State'
若Foreign State不是None ,則需要清除外來配置,操作如下
#掃描外來配置的個數
MegaCli64 -cfgforeign -scan -a0
#清除外來配置
MegaCli64 -cfgforeign -clear -a0
#再次掃描外來配置的個數
MegaCli64 -cfgforeign -scan -a0
查看指定的盤的詳細信息(本文示例,查看1號盤)
MegaCli64 -pdInfo -PhysDrv[32:1] –aALL
查看邏輯盤詳細信息
MegaCli64 -LdPdInfo –aALL
查看raid級別及查看raid是由哪些硬盤組成的
MegaCli64 -LdPdInfo -aALL|more
顯示適配器個數
MegaCli64 –adpCount
創建raid0,1,5
MegaCli64 -CfgLdAdd -rX [Enclosure Device ID : Slot Number, Enclosure Device ID : Slot Number] –aN
# -r :指定raid類型、 X 是 RAID級別 、N 是 adapter ID
創建raid0
MegaCli64 -CfgLdAdd –r0[32:1,32:2] -a0
若清除外來配置之后創建raid仍報錯
執行該命令調整磁盤狀態為Unconfigured(good), Spun Up
MegaCli64 -PDMakeGood -Physdrv [32:1,32:2] -force -a0
創建成功
會有一個初始化同步塊的過程,可以看看其進度:
MegaCli64 -LDInit -ShowProg -LALL –aALL
查看當前的raid配置信息,可以看到Target Id: 0,RAID Level: Primary-0
分區
創建raid之后進行分區操作
查看此時所有可用塊設備的信息
fdisk 創建分區
fdisk /dev/sdb ,n->p->回車->回車-> +100M(要划的分區大小,回車即為默認使用全部大小) ->t->回車->fd->wq
parted 創建分區
由於創建raid0后磁盤大於2T,無法使用fdisk划分大於2T的分區,這里使用parted命令進行分區
Parted命令選擇操作磁盤
parted命令后跟上欲操作磁盤的名字即可選擇此設備進行操作
parted /dev/sdb
新建磁盤標簽類型為GPT
因為parted命令只能針對gpt格式的磁盤進行操作,所以這里必須將新建的磁盤標簽格式設為gpt
mklabe gpt
(parted -s /dev/sdb mklabel gpt)
分區
命令格式
mkpart PART-TYPE [FS-TYPE] START END
PART-TYPE(分區類型)
o primary
主分區
o logical
邏輯分區
o extended
擴展分區
• FS-TYPE(文件系統類型)
o ext4
o ext3
o ext2
o xfs
o 其他......
• START
設定磁盤分區起始點;可以為0,numberMiB/GiB/TiB;
o 0
設定當前分區的起始點為磁盤的第一個扇區;
o 1G
設定當前分區的起始點為磁盤的1G處開始;
• END
設定磁盤分區結束點;
o -1
設定當前分區的結束點為磁盤的最后一個扇區;
o 10G
設定當前分區的結束點為磁盤的10G處;
將/dev/sdb整個空間分給同一個分區
parted -s /dev/sdb mkpart primary "0 -1"
格式化分區
因為整個/dev/sdb只分了一個區,則這個分區名默認會分配為/dev/sdb1;使用mkfs命令將/dev/sdb1分區格式化為ext4
然后創建掛載目錄進行掛載
掛載
臨時掛載
創建掛載目錄
mkdir /gfsdata01
臨時掛載分區
mount /dev/sdb1 /gfsdata01
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/root_vg-lv_root 89G 2.6G 82G 4% /
devtmpfs 126G 0 126G 0% /dev
tmpfs 126G 0 126G 0% /dev/shm
tmpfs 126G 2.0M 126G 1% /run
tmpfs 126G 0 126G 0% /sys/fs/cgroup
/dev/sda1 976M 216M 694M 24% /boot
/dev/sda7 99G 61M 94G 1% /home
/dev/sda8 62G 53M 59G 1% /tmp
/dev/sda6 99G 61M 94G 1% /app
tmpfs 26G 0 26G 0% /run/user/1014
tmpfs 26G 0 26G 0% /run/user/0
/dev/sdb1 17T 20K 16T 1% /gfsdata01
開機自動掛載(永久掛載)
即修改/etc/fstab文件。
echo '/dev/sdb1 /gfsdata01 ext4 defaults 0 0' >>/etc/fstab
刪除分區
rm NUMBER:NUMBER即為parted子命令p回顯的Number對應的數字
下線磁盤
下線前查看raid狀態
查看raid狀態 Optimal(最優的)
MegaCli64 ldinfo lall a0
下線
MegaCli64 -PDOffline -PhysDrv [32:2] -a0
查看此時磁盤狀態
MegaCli64 -PDList –aALL|egrep 'Firmware state'
查看raid0狀態 Offline (離線的)
MegaCli64 ldinfo lall a0
上線磁盤
再將該磁盤上線
MegaCli64 -PDOnline -PhysDrv [32:2] -a0
查看重建進度
MegaCli64 -PDRbld -ShowProg -PhysDrv [32:2] -a0
以動態可視化文字界面顯示
查看是否已上線
MegaCli64 -PDList –aALL|egrep 'Firmware state'
查看raid狀態 Optimal(最優的)
MegaCli64 ldinfo lall a0
刪除raid
MegaCli64 -cfglddel -L0 -a0
注意:執行刪除操作之前先將分區卸載 umount /dev/sdb1
<1>清除當前所有的raid組的配置(慎用)
MegaCli64 -cfgclr -a0
<2>刪除指定的raid組(即邏輯盤信息)
一定要先查看 邏輯盤詳細信息
MegaCli64 -LdPdInfo –aALL
注意Target Id,其代表邏輯盤的id,L +Target Id為指定邏輯盤
L0 代表第一個邏輯盤
L1 代表第二個邏輯盤
依次類推
若執行刪除操作,打印以下信息,則說明是有緩存,需要加上-force參數,再次刪除
Virtual Disk is associate with Cache Cade. Please Use force option to delete #這是說有緩存,要強制刪除
Exit Code: 0x01
MegaCli64 -cfglddel -L0 -force -a0
刷新磁盤信息
發現刪除raid之后,使用fdisk –l 或者lsblk看不到原來的磁盤
Lsblk
這時候需要將磁盤的狀態改回JBOD再看就有了
MegaCli64 -PDMakeJBOD -PhysDrv[32:1,32:2] -a0
lsblk
raid0 添加硬盤
在原來已有的硬盤的基礎上添加一塊磁盤進行擴容
MegaCli64 -LDRecon -Start -r0 -Add -PhysDrv[32:2] -L0 -a0
查看重建進度
MegaCli64 ldinfo lall a0|grep Reconstruction
常見問題處理
1, Firmwarestate:Unconfigured(good), Spun down
解決方法:
①重新熱拔插指定硬盤,該狀態會變成Firmware state:Unconfigured(good), Spun Up
②創建raid后磁盤狀態也會由Spun down變成SpunUp
2, Firmware state: Unconfigured(bad)
解決辦法:
MegaCli64 -PDMakeGood -PhysDrv[E:S] -a0 固件狀態會由Unconfigured(bad)變成Unconfigured(good), Spun Up
MegaCli64 -pdgetmissing -a0 檢查掉線硬盤,掉線硬盤進入Rebuild
MegaCli64 -CfgForeign -Import -a0 重新導入raid配置
MegaCli64 -PDRbld -ShowProg -PhysDrv[32:2] –a0 查看重建進度
3, Firmware state: failed
解決辦法:
出現failed狀態的硬盤大多已損壞,建議更換(或報修);但可以強制上線。
強制上線步驟如下:
可以先將磁盤下線。 # MegaCli64 -PDOffline-PhysDrv[E:S] -a0
然后再上線。 # MegaCli64 -PDOnline -PhysDrv[E:S] -a0
4, 以下狀態的解決辦法:
Foreign State: Foreign
Foreign Secure: Drive is notsecured by a foreign lock key
辦法一:可以清除恢復狀態(慎用)
MegaCli64 -CfgForeign -Clear -a0
辦法二:導入配置,恢復虛擬磁盤組
MegaCli64 -CfgForeign -import -a0
Raid 1
創建raid 1
MegaCli64 -CfgLdAdd -r1[32:1,32:2] -a0
查看當前的raid配置信息,可以看到Target Id: 0,RAID Level: Primary-1
MegaCli64 ldinfo l0 a0
然后創建分區和掛載,操作和前面raid0的類似
下線一個磁盤
MegaCli64 -PDOffline -PhysDrv [32:2] -a0
發現raid狀態改變 Degraded (已降級)
MegaCli64 ldinfo l0 a0
重新將下線的磁盤上線
MegaCli64 -PDOnline -PhysDrv [32:2] -a0
然后觀察發現狀態已正常,正在初始化檢查一致性
刪除操作和raid0相同
添加熱備
#######全局熱備
MegaCli64 -PDHSP -Set [-EnclAffinity] [-nonRevertible] -PhysDrv[32:2] -a0
刪除熱備
MegaCli64 -PDHSP -Rmv -PhysDrv[32:2] -a0
#######局部熱備
指定某個盤-PhysDrv[32:3] 為某個raid設備 -Array0 的熱備
MegaCli64 -PDHSP {-Set [-Dedicated [-Array0]] [-EnclAffinity] [-nonRevertible]} -PhysDrv[32:3] -a0
查看raid信息發現熱備已添加
MegaCli64 ldinfo l0 a0
創建時指定熱備
MegaCli64 -CfgLdAdd -r1 [32:1,32:2] -Hsp[32:3] -a0
下線一個磁盤查看熱被否生效
發現狀態為正在重建說明熱備沒問題
Raid5
創建raid 5
MegaCli64 -CfgLdAdd -r5 [32:1,32:2,32:3] -a0
創建完可以進行分區掛載
下線上線熱備操作和raid1的類似
Raid5 級別遷移
Raid0級別轉換成raid5級別
原來raid0兩塊盤,添加一塊盤轉成raid5
MegaCli64 -ldrecon -start -r5 -add -physdrv[32:3] -l0 -a0
查看進度
MegaCli64 ldinfo l0 a0|grep Reconstruction #該操作可能要花費很長時間
檢查
查看磁盤是否有問題
MegaCli64 -PDList -aALL|grep Error
這是查看所有磁盤信息的命令,然后grep錯誤信息,看下面過濾出來的信息,這是我一個R420的機器。
Media Error Count: 0 Other Error Count: 0 #這兩個數值來確定陣列中磁盤是否有問題;Medai Error Count: #表示磁盤可能錯誤,可能是磁盤有壞道,這個值不為0值得注意,數值越大,危險系數越高,
Other Error Count: #表示磁盤可能存在松動,可能需要重新再插入
當然實際生產環境中,如果想長期的檢查磁盤是否可能要出問題了,還是建議去/var/log/message里面去檢測信息,因為用MegaCli這種方式檢測硬盤,當然硬盤出問題了可以報出來,但是就算你換了硬盤,再次檢測會發現計數器還是沒有清零,這是因為raid緩存的問題,但是這個問題需要重啟服務器才能解決,所以說用這種方式做一個常規性的監控方式的話,這個問題還是要考慮進來的。
查看磁盤緩存策略
MegaCli64 -LDGetProp -Cache -L0 -a0
#輸出內容表示的意思:Adapter 0-VD 0(target id: 0): 為磁盤適配器號,0代表第一個,Cache Policy:后面是緩存策略
一: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作額外保證,不然不推薦采用這個設置。
之前創建raid為指定緩存策略,使的是默認緩存策略,不同型號的服務器默認緩存策略也是不一樣的
RAID卡策略的更改
#修改WriteBack:
/MegaCli64 -LDSetProp -WB -Lall -aAll
#修改WriteThrough:
MegaCli64 -LDSetProp -WT -Lall -aAll
#修改No Write Cache if Bad BBU:
MegaCli64 -LDSetProp -NoCachedBadBBU -Lall -aAll
#修改Write Cache OK if Bad BBU:
MegaCli64 -LDSetProp -CachedBadBBU -Lall -aAll
#或者其他:
MegaCli64 -LDSetProp WT|WB|NORA|RA|ADRA -L0 -a0
MegaCli64 -LDSetProp -Cached|-Direct -L0 -a0
其他命令
手工配置初始化
MegaCli64 -LDInit -start –L0 -a0 #快速初始化
MegaCli64 -LDInit -start -full –L0 -a0 #完全初始化
MegaCli64 -LDInit -progdsply -L0 -a0 #顯示初始化的進度
MegaCli64 -LDInit -abort -L0 -a0 #結束完全初始化
raid電池操作:
MegaCli/MegaCli64 -AdpBbuCmd -BbuLearn a0 #手動充電
MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL #查看充電狀態
MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL #查看充電進度百分比
查看Megacli的log
MegaCli64 -FwTermLog dsply -a0 > /tmp/Megacli.log
查看一塊硬盤是否做了raid
MegaCli/MegaCli64 -LDInfo -LAll -aAll|grep 'Is VD emulated'
Is VD emulated : No #No就是沒做raid
/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LAll -aAll|grep 'Is VD emulated'
Is VD emulated : Yes #yes就是做了raid