Linux存儲在線管理(一)FC磁盤設備管理

轉自EMC中文支持論壇 – https://community.emc.com/go/chinese
介紹

本文主要介紹Linux環境下FC磁盤管理相關只是,主要內容包括FC驅動介紹、Linux SCSI磁盤永久命名、FC磁盤添加與刪除、FC磁盤路徑添加與刪除以及FC存儲鏈路在線掃描。
更多信息

Fibre Channel驅動

Linux系統上Fibre Channel驅動用戶空間接口位於/sys/class文件夾下面。以下條目中,H代表主機,B代表bus號,T代表target,L代表lun id,R代表對端端口號。
注意:
如果主機使用多路徑軟件,修改配置參數之前,建議諮詢多路徑軟件廠商
/sys/class目錄下有三個主要文件夾跟 fibre channel相關的文件夾fc_transport、fc_remote_ports,fc_hosts。其中fc_transport代表已分配存儲信息;fc_remote_ports代表主機到存儲端口鏈路信息(fc_remote_ports文件夾包含未給主機分配存儲的鏈路信息);fc_host代表主機HBA卡信息。

Transport: /sys/class/fc_transport/targetH:B:T/
·         port_id – 存儲端口的 24位交換機端口ID
·         node_name – 存儲端口的64位node name
·         port_name – 存儲端口的64位port name

Remote Port:/sys/class/fc_remote_ports/rport-H:B-R/
·         port_id – 存儲端口的 24位交換機端口ID

·         node_name – 存儲端口的64位node name

·         port_name – 存儲端口的64位port name
·         dev_loss_tmo – 鏈路故障等待時間。故障鏈路不再處理任何新的IO。默認dev_loss_tmo值視具體HBA卡而定,Qlogic默認是35秒,Emulex默認是30秒。HBA卡自帶驅動可以覆蓋這個 參數值。dev_loss_tmo最大值600秒,如果dev_loss_tmo值小於0或者大於600,HBA自帶超時值生效。

·         fast_io_fail_tmo – IO故障等待時間。鏈路波動情況,IO嘗試多長時間。

Host:/sys/class/fc_host/hostH
·         port_id  – HBA端口的 24位交換機端口ID。

·         issues_lip – 重置HBA端口,重新嘗試發現存儲端口。

Persistent命名

操作系統通過路徑發送IO到存儲,Linux系統SCSI磁盤路徑有以下部分組成:
·         HBA卡的PCI標示符

·         HBA卡的管道號

·         存儲端SCSI target地址

·         LUN(Logical Unit Number) 號

SCSI磁盤路徑在Linux上有3中表現方式:一、/dev/sd目錄;二、通過major:minor號;三、/dev/disk/by-path,該目錄是 /dev/sd設備的軟連接。Fibre Channel磁盤路徑示範如下:
image001
上面這三種SCSI磁盤路徑都不是永久不變,當服務器新增或者刪除新的PCI設備時候,路徑就會發生變化,有時候即使是服務器重啓也可能導致路徑變成發生變化。
爲了保證應用程序使用的磁盤路徑能夠永久不變,有以下幾種方法:
1.  WWID

根據SCSI標準,每個SCSI磁盤都有一個WWID。類似於網卡的MAC地址,要求是獨一無二。通過WWID標示SCSI磁盤就可以保證磁盤路徑永久不變,Linux系統上/dev/disk/by-id目錄包含每個SCSI磁盤WWID訪問路徑。實例:
scsi-3600508b400105e210000900000490000 -> ../../sda

提示:Linux自帶的device-mapper-multipath工具就是通過WWID來探測SCSI磁盤路徑,可以將同一設備多條路徑合併,並在/dev/mapper/下面創建新的設備路徑。通過multipath –l可以看到WWID與  磁盤路徑、Host:Channel:Target:Lun與/dev/sd以及major:minor對應關係。
image002
2.  UUID

UUID是有文件系統在創建時候生成的,用來標記文件系統,類似WWID一樣也是獨一無二的。因此使用UUID來標示SCSI磁盤,也能保證路徑是永久不變的。Linux上/dev/disk/by-uuid可以看到每個已經創建文件系統的磁盤設備以及與/dev/sd之間的映射關鍵。
注意:Linux自帶的md和LVM工具也會在SCSI磁盤上面寫入UUID信息。
3.  UDEV

UDEV是Linux提供的一種讓用戶對設備進行自定義命名的機制。可以通過UDEV將WWID/UUID信息跟磁盤路徑映射起來,這樣也可以保證設備路徑永久不變。

磁盤刪除

在刪除磁盤之前,建議先備份好數據,將內存髒數據寫入磁盤,然後再刪除磁盤所有關聯路徑。對於使用多路徑軟件的磁盤,需要同時刪除多路徑設備和每個路徑磁盤。刪除磁盤建議在系統空閒時操作,內存髒數據寫入磁盤會增加系統負載,可以通過vmstat 1 100觀察系統負載。如果滿足一下條件之一,則不建議進行刪除操作:
·         vmstat 100次輸出結果超過10次以上的free內存小於系統內存的5%。

·         vmstat結果的si和so列不爲空,代表系統正在進行swaping,將內存數據寫入磁盤。

磁盤刪除操作步驟如下:
1.  關閉使用磁盤的進程,備份磁盤數據。可以通過fuser命令查看正在訪問某個磁盤的進程。

2.  umount卸載基於待刪除磁盤的文件系統

3.  md和LVM中刪除磁盤。LVM可以使用vgreduce從卷組移除改磁盤,然後使用pvremove從磁盤刪除LVM元數據。

4.  如果磁盤使用多路徑軟件,通過mulitpath –l查看磁盤所有路徑,然後通過multipath –f刪除磁盤。(如果使用powerpath多路徑軟件,請參考powerpath操作手冊)

5.  blockdev –flushfs 將髒數據寫入磁盤。這一步驟對於裸設備事情情況尤爲重要,因爲裸設備無法通過umount或者vgreduce將髒數據寫入磁盤。

6.  刪除應用程序或者腳本中的磁盤路徑引用。

7.  使用命令echo 1 > /sys/block/device-name/device/delete刪除磁盤,device-name以sd開頭,比如sda、sdb;或者使用命令echo 1 > /sys/class/scsi_device/h:c:t:l/device/delete刪除磁盤,h代表HBA卡號,c代表HBA卡channel,t代表SCSI target ID,i代表LUN ID。h:c:t:l這些信息可以通過lsscsi,scsi_id,multipath –l,ls –l  /dev/disk/by-*方式查看。

8.  直接刪除磁盤文件。

磁盤路徑刪除

當系統使用多路徑軟件時候,可以在線刪除一條路徑而不影響業務使用。操作步驟如下:
1.  在應用程序或腳本中刪除磁盤路徑應用。

2.  使用命令echo offline > /sys/block/sda/device/state將磁盤路徑offline。多路徑軟件將會使用剩餘路徑處理IO。

3.  使用命令echo 1 > /sys/block/device-name/delete命令從SCSI子系統刪除磁盤路徑,device-name通常以sd開頭,比如sda、sdb。

添加新磁盤或者磁盤路徑

添加新磁盤或者磁盤路徑,系統可能會自動分配老磁盤使用的名稱給新磁盤,比如/dev/sd,major:minoe和/dev/disk/by-path。因此在添加之前,請確認應用程序和腳本已經刪除老磁盤的引用。

添加新磁盤或者磁盤路徑步驟如下:
1.  完成交換機和存儲配置,記錄號存儲端口的WWPN。

2.  使用下面命令在系統上重新掃描磁盤設備。

echo “c t l” > /sys/class/scsi_host/hosth/scan
h代表HBA號,c代表HBA卡channel,t代表SCSI target ID,l代表LUN ID。
也可以使用 命令echo “scsi add-single-device 0 0 0 0” > /proc/scsi/scsi完成掃描。
a.  某些HBA卡在存儲分配完成後,需要通過issue_lip才能發現新增加設備,具體參考“存儲鏈路掃描”。(如果需要issue_lip,建議停止IO操作)

b.  新分配LUN在操作系統沒有顯示,可以通過sg_luns命令(來自sg3_utils包)重新獲取陣列LUN列表。

c.  c:t:l信息可以使用命令grep “存儲SP端口WWPN” /sys/class/fc_transport/*/[node_name|port_name]獲取;也可以通過lsscsi、scsi_id、multipath –l或者ls –l /dev/disk/by-*方法獲取。

3.  使用多路徑軟件multipath(或者其他多路徑軟件)確認磁盤路徑添加正常。

存儲鏈路掃描

Linux操作系統提供多種存儲鏈路重置操作。存儲鏈路重置通常用於多路徑設備添加或者刪除,這是一種破壞性操作,將導致IO操作超時。請謹慎使用這類型操作,另外操作時請注意以下事項:
1.  操作前請確認鏈路沒有新的IO,髒數據已經寫回存儲。

2.  在系統內存資源使用緊張情況下,不建議進行鏈路刪除操作。系統內存使用情況可以通過vmstat 1 100命令評估。

以下命令可用於存儲鏈路重新掃描:
·         echo “1” > /sys/class/fc_host/host/issue_lip

issue_lip重置HBA鏈路,重新掃描整個鏈路並配置SCSI target。該操作是一種異步操作類型,具體完成時間需要參考/vag/log/message日誌。Linux操作系統自帶的lpfc和qla2xxx 驅動支持issue_lip命令。
·         echo “- – – ” > /sys/class/scsi_host/hostH/scan

·         rmmod 驅動/ modprobe 驅動 刪除/重新加載HBA卡驅動。

參考

·         Redhat Linux – Storage Administration Guide


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章