1. 程式人生 > >windows2012 R2群集的磁盤變raw無法格式化的解決

windows2012 R2群集的磁盤變raw無法格式化的解決

群集 pr key

現象:非正常刪除windows2012 R2故障轉移集群後,重新安裝系統後,發現磁盤變成RAW並且聯機後格式化無法順利完成。
技術分享圖片

分析:由於是非正常刪除集群,導致這些磁盤依然被上一個集群的PR Key(SCSI-3 Reservation)鎖定著,導致這些磁盤被占用而不能訪問和格式化。

處理:
對其中一臺節點的異常磁盤分別執行如下清理保留磁盤命令,-Disk 後跟的是磁盤管理器中的磁盤標簽號,具體用法在https://technet.microsoft.com/en-us/library/ee461016.aspx,
清理集群信息的命令:
Clear-ClusterDiskReservation -Disk <disk_number>

技術分享圖片

依次執行後磁盤狀態正常。

總結:重新裝集群時候,務必先將群集節點依次退出集群並清除群集磁盤,再刪除集群,防止共享磁盤繼續被之前集群的PR Key鎖著的問題。

知識補充:
SCSI鎖是多臺主機用來操作LUN的基本機制。在Windows存儲環境中,當多臺Windows主機需要訪問一個LUN的情況下,例如Windows Cluster環境,就會用到SCSI鎖。
原理解讀:
在一個共享存儲的環境下,多臺主機可能會同時訪問同一臺存儲設備,如果此時多臺主機在同一時點上對一個Lun進行寫的操作,那麽可想而知這個Lun將不知道哪個數據先寫,哪個數據後寫。為了防止這種情況發生而導致的數據損壞,於是就引入了SCSI鎖的概念。通過SCSI Reservation機制來進行SCSI鎖的操作,目前絕大多數的磁盤都支持‘SCSI reservvation命令‘。如果一臺主機給磁盤傳輸了一條SCSI Reservation命令,則這個磁盤對於其他的主機就處於鎖定狀態。如果有其他的主機給已經被鎖定的磁盤發送讀寫請求,則會收到‘reservation conflict’報錯信息。如果保留SCSI鎖的主機崩潰,或者其他主機給磁盤發送‘break reservation或者reset target命令,用來解除SCSI鎖。然後,第二個主機發送I/O請求之前需要重新發送SCSI Reservation命令給磁盤。

SCSI鎖的分類:

SCSI鎖有兩種類型:SCSI-2 Reservation和SCSI-3 Reservation。一個LUN上只能存在一種類型的SCSI鎖。

SCSI-2 Reservation只允許設備被發出SCSI鎖的Initiator訪問,也就是主機的HBA。比如主機1上的HBA1對訪問的LUN加上SCSI-2鎖,此時即使主機1的HBA2也無法訪問這個LUN。所以SCSI-2 Reservation也被稱為Single Path Reservation。

SCSI-3 Reservation(Persistent Reservation)是使用PR Key來對磁盤進行加鎖。通常一臺Host會有唯一的PR Key,不同的主機對應的PR Key也不同。所以一般SCSI-3 Reservation通常被應用在多通路的共享環境下面。這裏SCSI-3 Reservation也稱之為Persistent Reservation。

Windows Cluster中的SCSI鎖:

 Windows 2003集群中使用SCSI-2 reserve/release命令。作為非持久的reservation,所以集群中的一臺節點會持有SCSI-2 Reservation的鎖,然後每過3秒會重新刷新一次。如果故障轉移發生,則切換節點主機會在相應的磁盤上放置SCSI-2 Reservation然後維護SCSI鎖。如果所有節點主機上的集群服務都會關閉,Reservation也不會保留。

 Windows 2008以上集群中使用SCSI-3 persistent reservation機制。如果磁盤從主機上沒有正確移除,集群使用的磁盤(Cluster Disk)會保留著這些Reservation。鎖對應的SCSI鎖會一直存在於相應的磁盤之上,即使集群服務被關閉或者磁盤對於主機取消掩飾(unmasked)。所以,有些時候需要強行移除磁盤上的Reservation。

      什麽情況下設備會被加鎖?

一般設備被打開時將會被加上鎖。比如varyonvg、dd等等,需要註意的是對於dd這種命令當它運行時設備會被加鎖,運行完成後會自動解鎖。

註意:varyonvg -c不會對設備加鎖。

另外,當vg varyon之後,只有varyoffvg或者varyonvg -b才會對vg相關的設備進行解鎖。直接用shutdown命令不會做varyoffvg的動作,因此不會解鎖。

群集服務如何保留一個磁盤並使磁盤返回到聯機狀態?

群集服務僅使用 SCSI 協議來管理共享總線上的磁盤。

註意:這並不意味著所有磁盤都將屬於類型 SCSI,指定稱為 SCSI 硬件接口,但相反,存儲單元都必須能夠正確地解釋和處理 SCSI 協議和命令。

下面的命令是在群集環境中的磁盤時將使用的其他 SCSI 協議功能。

保留︰ 通過獲得或保留所有權的 SCSI 設備的主機總線適配器發出此命令。保留設備的所有其他主機總線適配器,但最初保留其發起人之一會拒絕所有的命令。
釋放︰ 所屬的主機總線適配器發出此命令,當磁盤資源處於脫機狀態。它釋放保留的另一臺主機總線適配器的 SCSI 設備。
重置︰ 在目標設備上,此命令中斷預留。此命令可以重置 (對於整個總線) 或使用 storport 驅動程序目標重置總線上的特定設備的總線。

下面的過程描述服務器群集如何啟動並取得控制權的共享磁盤。此方案假定,只有一個節點每次打開︰

當計算機啟動時,群集磁盤驅動程序 (Clusdisk.sys) 讀取以下的本地註冊表項,以獲得在群集管理的共享磁盤簽名的列表︰
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ClusDisk\Parameters \Signatures
獲取該列表後,群集服務將嘗試掃描所有的設備上共享的 SCSI 總線以查找匹配的磁盤簽名。

群集磁盤驅動程序在群集中的第一個節點啟動時,第一次標記的所有 Lun (LUN︰ 邏輯單元號、 SCSI 總線上用來區分共享同一總線的設備的唯一標識符) 簽名密鑰匹配為離線卷。請註意,這並不相同,則為使群集資源脫機。卷被標記為離線,以防止多個節點同時具有卷寫入權限。如果群集共享的磁盤群集,其中一個磁盤被指定為仲裁磁盤的群集服務。仲裁磁盤是第一資源聯機時,群集服務將嘗試形成群集。

Forming 節點上的群集服務啟動時,它首先嘗試聯機指定為仲裁磁盤的物理設備。獲得所有權的仲裁磁盤上執行磁盤仲裁算法。成功的仲裁,在群集服務給 clusdisk 開始發送定期保留到磁盤 (以保留所有權) 發送的請求。群集服務將請求發送給 clusdisk 取消阻止對仲裁磁盤的訪問權限,然後裝入的磁盤上的卷。成功裝入卷,完成在線的過程和群集服務,然後繼續使用群集過程中窗體。請求從群集磁盤驅動程序傳遞到 Microsoft 存儲驅動程序堆棧和最後到特定於 HBA 驅動程序進行通信的磁盤。它也可能傳遞到運行存儲堆棧中的任何多路徑軟件。有關存儲堆棧和驅動程序模型的詳細信息,請單擊下面的鏈接︰

後該存儲控制器/設備驅動程序報告,成功地保留了該設備,該群集服務確保驅動器可以讀取和寫入。一旦越過這些測試中的所有磁盤,磁盤資源標記為聯機,群集服務將繼續使所有其他資源聯機。

在群集中的每個節點續訂它擁有每三秒任何 Lun 的預留。如果群集中的節點丟失 (例如,如果在私有或公用網絡上有沒有通信) 與其他網絡通信,節點開始該過程稱為仲裁決定仲裁磁盤的所有權。贏得擁有仲裁磁盤資源在群集節點之間的通信完全丟失的節點將保持有效。群集服務和任何資源,任何節點,無法交流,無法維護或獲得仲裁磁盤的所有權將終止該節點的承載將會被移動到群集中的另一個節點。

目前擁有仲裁磁盤的節點是保護節點。Defender 假設,它抵禦任何群集節點它無法與通信和未接收關閉通知。Defender 不斷通過 SCSI 請求續訂仲裁為其預留儲備放在 LUN 上每三秒。
所有其他節點 (節點不擁有仲裁磁盤並不能傳達與擁有仲裁資源的節點) 將成為具有挑戰性的節點。
當挑戰者檢測到丟失的所有通信時,它會立即請求總線範圍的 SCSI 重置中斷任何現有的預留。
7 秒後重置 SCSI 請求,挑戰者嘗試保留仲裁磁盤。如果 defender 節點聯機並且運行正常,它將已經保留了仲裁磁盤那樣通常每隔三秒。挑戰者並檢測到它不能預留仲裁,群集服務將終止。如果 defender 工作不正常,挑戰者可以成功保留仲裁磁盤。10 秒鐘後,挑戰者將在線仲裁,並將群集中的所有資源的所有權。如果保護節點失去仲裁設備的所有權,然後保護節點上的群集服務立即終止。

當群集節點所需的磁盤資源脫機時,它請求釋放 SCSI 保留驅動器然後再一次將是對操作系統不可用。只要群集的磁盤資源脫機,群集中,資源指向 (具有匹配簽名的磁盤) 的卷將無法訪問任何群集節點上的操作系統。

windows2012 R2群集的磁盤變raw無法格式化的解決