前言
簡單來說,不管在怎麼高品質的硬體設備都會有損壞的一天,本文將說明在 S2D (Storage Spaces Direct) 運作環境中,當硬碟損壞時如何進行更換作業。原則上,整個故障損壞硬碟的更換程序如下:
- 確認故障硬碟: 確認故障損壞的硬碟在哪台 S2D 主機中,而又是 S2D 主機眾多硬碟中的哪顆硬碟 (硬碟序號)。
- 設定故障硬碟為 Retire: 透過 PowerShell 指令,將故障損壞的硬碟使用狀態由 Auto-Select 設定為 Retire。
- 從 Storage Pool 中移除故障硬碟: 在 S2D Storage Pool 當中,將該顆故障損壞硬碟移除。
- 拔除故障硬碟: 至 S2D 主機,將故障損壞硬碟拔除。
- 新硬碟加入至 Storage Pool: 將新的硬碟插入至 S2D 主機後,執行 PowerShell 指令將新硬碟加入至 Storage Pool 當中。
確認故障硬碟
在本文測試環境中,S2D Cluster 由 2 Nodes 節點主機所組成,每台節點主機配置 4 顆 960 GB SSD 及 12 顆 6 TB 機械式硬碟。首先,我們透過「Get-StoragePool *S2D* | Get-PhysicalDisk」指令,可以發現有顆硬碟發生故障損壞的情況,從 PowerShell 指令的執行結果可以看到,有問題的硬碟狀態為「Lost Communication、Warning」(有關運作狀態的詳細資訊,請參考 Storage Spaces health and operational states | Microsoft Docs)。
圖、S2D 運作環境中,某顆硬碟發生故障損壞的情況
此時,透過「Get-VirtualDisk」指令可以看到有 S2D Volume 受到這顆故障硬碟損壞的影響,而讓 Volume 的健康狀態由「Healthy」轉變為「Warning」。
圖、Volume 受到故障硬碟損壞的影響健康狀態變為 Warning
設定故障硬碟為 Retire
此時,我們可以透過「Get-PhysicalDisk |? OperationalStatus -Notlike OK」指令,將故障損壞硬碟從 S2D Cluster 眾多硬碟中過濾出來,然後把結果儲存至 $FailDisk 變數當中。接著,執行「Set-PhysicalDisk -InputObject $FailDisk -Usage Retired」指令,組態設定該故障損壞硬碟的使用狀態為 Retired。此時,S2D 將會將故障損壞硬碟中相關的 Slab 資料區塊,開始複寫 1 份至不同台 S2D 主機的不同顆硬碟上。這也是 S2D 超融合架構不同於以往傳統 RAID 架構,無須等新硬碟加入便開始複寫新的資料至可用儲存空間確保資料高可用性。
圖、組態設定故障損壞硬碟的使用狀態為 Retired
從 Storage Pool 中移除故障硬碟
確認故障損壞硬碟的使用狀態為 Retired 之後,請執行「Get-StoragePool *S2D* | Remove-PhysicalDisk -PhysicalDisks $FailDisk」指令,將該故障損壞硬碟從 S2D Storage Pool 當中移除。倘若,此時無法順利從 Storage Pool 當中移除故障損壞硬碟的話,可以嘗試稍後實際拔除故障損壞硬碟之後再次執行看看。
因此,再次執行「Get-StoragePool *S2D* | Get-PhysicalDisk」指令,已經看不到故障損壞硬碟。
圖、將該故障損壞硬碟從 S2D Storage Pool 當中移除
拔除故障硬碟
確認故障損壞硬碟已經從 S2D Storage Pool 當中移除後,便可以至該台 S2D 節點主機拔除故障硬碟,倘若你無法確認是哪顆硬碟的話,可以透過「Get-PhysicalDisk |? OperationalStatus -Notlike OK | Enable-PhysicalDiskIdentification」指令,讓故障損壞硬碟亮燈。取消故障硬碟亮燈請執行 Get-PhysicalDisk |? OperationalStatus -like OK | Disable-PhysicalDiskIdentification
或是透過 Server Manager 圖形操作介面,選擇故障損壞硬碟後按下滑鼠右鍵選擇「Toggle Drive Light」項目即可觸發故障損壞硬碟亮燈。
取消故障硬碟亮燈,只要再次點選 Toggle Drive Light 項目即可。
圖、透過 Server Manager 圖形操作介面,觸發故障損壞硬碟亮燈
新硬碟加入至 Storage Pool
順利拔除故障損壞硬碟並插入新硬碟之後,此時執行「Get-PhysicalDisk |? CanPool -eq True」指令,可以看到新硬碟的 CanPool 狀態為 True。倘若,無法順利偵測到新硬碟的相關資訊時,請嘗試將該台 S2D 主機進入維護模式後重新啟動,讓 S2D 主機再次執行完整的 Disk Identification 動作。
同樣的,將新硬碟的過濾結果寫入至 $NewDisk 參數中,然後執行「Get-StoragePool *S2D* | Add-PhysicalDisk -PhysicalDisks $NewDisk -Verbose」指令,將新硬碟加入至 S2D Storage Pool 當中。
請確保新硬碟尚未初始化、格式化,否則屆時 S2D 將無法順利宣告及使用此顆新硬碟!!
圖、將新硬碟加入至 S2D Storage Pool 當中
此時,再次執行「Get-StoragePool *S2D* | Get-PhysicalDisk」指令,可以看到新硬碟已經順利宣告並加入至 S2D Storage Pool 當中。
圖、新硬碟已經順利宣告並加入至 S2D Storage Pool 當中
此時,透過 Show-PrettyPool.ps1 可以看到,新硬碟目前並沒有 Slab 資料區塊寫入其中,所以硬碟空間的使用率為 0 %。
有關 Show-PrettyPool.ps1 請參考站內文章 深入剖析 S2D Storage Pool。
圖、新硬碟目前沒有 Slab 資料區塊寫入其中
原則上,S2D Cluster 會在後續適當時機執行 S2D Storage Pool Rebalance 的動作,或者你也可以手動執行「Get-StoragePool *S2D* | Optimize-StoragePool」指令,立刻進行 S2D Storage Pool Rebalance 的動作。
圖、立刻進行 S2D Storage Pool Rebalance 的動作
當 S2D Storage Pool Rebalance 動作執行完畢後,再次執行 Show-PrettyPool.ps1 可以看到,新硬碟已經有 Slab 資料區塊寫入其中,所以硬碟空間的使用率上升為 2.9 %。
圖、S2D Storage Pool Rebalance 後,新硬碟已經有 Slab 資料區塊寫入其中