本文紀錄 Windows Server 2019 上建立 S2D 的過程!!

先介紹安裝環境,此次是不含 ADDS 並使用外接 USB 當作仲裁驗證方式部屬 S2D。

我們總共有 2 台機台分別是 Node1 跟 Node2,我們這邊把 Node1 當主要部署及後續操作機台。

那由於我們沒有 ADDS 跟 DHCP 所以我們就先把 Node1 跟 Node2 設定為靜態 IP。

Node1 IP : 192.8.1.42
Node2 IP : 192.8.1.43
# 這邊先擬定一個給 Cluster 建立用的 IP
Cluster IP : 192.8.1.57
Quorum 仲裁機制 : <Host IP>/Q:\\

建立 S2D 步驟

  1. 設定 hosts (每個 Node 都需要設定) 由於我們是沒有 DHCP、ADDS 情況下部屬我們要讓機台互相可以能溝通到所以要設定本機上的 hosts 編輯 C:\Windows\System32\drivers\etc\hosts

    Ex: IP hostname
    192.8.1.43       Node2
    192.8.1.42       Node1
    192.8.1.57       S2D-Cluster
    

    hosts

  2. 設定 TrustedHosts (每個 Node 都需要設定)

    • 新增 TrustedHosts
    Set-Item WSMan:\localhost\Client\TrustedHosts -Concatenate -Value "S2D-Controller , Node1 , Node2“
    
    • 確認 TrustedHosts
    Get-Item WSMAN:\Localhost\Client\TrustedHosts
    

    TrustedHosts

  3. 安裝需要用到的服務 (每個 Node 都需要設定)

    • 安裝套件 Windows 腳色和功能
    Install-WindowsFeature -Name "Hyper-V", "Failover-Clustering", "Data-Center-Bridging", "RSAT-Clustering-PowerShell", "Hyper-V-PowerShell", "FS-FileServer" -IncludeManagementTools
    

    Install-WindowsFeature

  4. 清空 S2D 磁碟 (每個 Node 都需要設定)

    初始化 S2D 硬碟 (確保硬碟都是沒有被 Claimed 的狀態 )

    如果硬碟沒設定過就不需要該步驟(須避開作業系統硬碟)

    請先以 Diskpart 指令確認硬碟編號,然後就可以使用 Clear-Disk 的 PowerShell 來清掃硬碟中所有的內容。

    (請注意!! 硬碟必須為 Online 狀態下,那麼 Clear-Disk 指令才能順利清掃硬碟內容。)

    處理單顆硬碟:
    Clear-Disk  –Number 1  -RemoveData  -RemoveOEM
    一次處理多顆硬碟:
    Clear-Disk  –Number 1,2,3,4  -RemoveData  -RemoveOEM
    

    執行完 Clear-Disk 動作後,硬碟的狀態應恢復到「Unknown、Not Initialized、Unallocated」才是正確狀態

    請注意 !! 若硬碟未呈現正確狀態的話,稍後啟動「Software Storage Bus」機制時,將無法順利把節點主機的本機硬碟加入至儲存資源池中。

    ClearDisk

  5. 測試建立 Cluster 環境 (Node1)

    測試 Node1 Node2 是否符合建立 Cluster 的環境

    Test-Cluster Node1 , Node2
    

    測試完會顯示目前問題與報告產生的地方,有問題建議去看報告會有詳細的問題說明 Test-Cluster

  6. 建立 Cluster (Node1)

    • 建立 Cluster
    New-Cluster –Name S2DCluster -Node Node1,Node2 -AdministrativeAccessPoint DNS -StaticAddress 192.8.1.57
    

    CreateCluster

  7. Quorum USB 設定 (Node2)

    • 先到 USB Properties,之後開啟 Share…
    • Advanced Shareing… > Permissions > Everyone 點選 Full Control USB-Enable
  8. 設定 Cluster 的仲裁機制 (Node1)

    • 設定 仲裁機制為外接 USB
    Set-ClusterQuorum -FileShareWitness \\192.8.1.43\q -Credential $(Get-Credential)
    

    之後會出現登入畫面請輸入相對應機台的帳號與密碼 ClusterQuorum

  9. 開啟 Storage Spaces Direct 服務 (Node1)

    Enable-ClusterStorageSpacesDirect
    

    跑完一小段之後它會問你是不是要使用你剛剛創的 Cluster 輸入 Y 開始建立 Enable-ClusterStorageSpacesDirect

  10. 查看 Failover Cluster Manager (Node1 or Node2)

    • Server Manager > Tool > Failover Cluster Manager
    • 點擊 Failover Cluster Manager 右鍵 > Connect to Cluster > 點擊 OK
    • 它會自己找到目前機台有連接的 Cluster
    • 你可以在 Disks, Pools 下找到剛剛建立好的 Disks, Pools Disk Pool

建立 Share Disk 步驟

  • 建立好 Cluster 後想要切出一個空間給某個功能用可以依照以下方法執行
  • 先在 Pool 中點擊右鍵,點選 New Virtual Disk 之後切出你要的空間
  • 切完之後到另一台 Node 下 Disk Management 可以看到此硬碟
  • 初始化它(可以用 ReFS 或是 NTFS 格式化)並設定 槽區
  • 回到原本 Node 下到 Failover Cluster Manager > Disks 下把硬碟加入到 Cluster Share Volumes
  1. 從 Pool 中建立新的虛擬磁碟 (Node1)

    • 從 Pool 中切出一個要使用的空間
    • 盡量不要選 Max 因為我們架構沒有空間給它快取有可能在建構的時候會造成 Fail
    • 切好之後的彈出視窗是可以幫你建立槽區但現在的架構不是單純的一個機台或有AD的情境下所以不適用
    • 之後我們自己手動切槽區 CreateVD
    • 切完之後我們可以看到下面會長出一個新的 Virtual Disk NewVD
  2. 確認有切出虛擬磁碟 (Node2)

    • 跳到 Node2 的 Disk Management 我們可以看到會有一個新的未啟用的 Disk CheckN2VD
  3. 手動切割磁區 (Node2)

    • 我們手動先手動建立跟格式化(ReFS or NTFS 都可以)
    • 之後按右鍵 Change Drive Letter and Paths … 幫它上槽區 N2CreateDisk
  4. 確認 Cluster 的 Pool 上是否有建立出一個磁碟 (Node1)

    • 回到 Node1 的 Failover Cluster Manager > Pool 下可以看到有了槽區並且是 ReFS 格式跟我們剛剛做的符合 CheckPoolDisk
  5. 確認 Cluster 的 Disk 上的資訊 (Node1)

    • 我們到 Disks 確認可以看到類似的內容,並且可以注意到它目前狀態是 Avalable Storage CheckDiskDiskInfo
  6. 新增到 Cluster Share Volumes (Node1)

    • 我們右鍵剛剛創建的 Virtual Disk 按下 Add to Cluster Share Volumes 把我們的硬碟加到 Cluster Share Volumes 讓兩個 node 都能用到 Add to Cluster Share Volumes
  7. 確認 Cluster Share Volume 狀態 (Node1)

    • 加完之後我們就可以看見上面的狀態變成 Cluster Share Volume
    • 下面變成 CSVFS 的格式了
    • 會掛載到每個 Node 的 C:\ClusterStorage 下 Check Cluster Share Volume
  8. 確認是否都有掛載到每個 Node 上 (Node1 and Node2)

    • 到每個 Node 下去驗證 C:\ClusterStorage 下是否有空間 CheckClusterStorage

補充:

更換仲裁機制:

  • Failover Cluster Manager > 右鍵 Cluster > MoreAction > Configure ClusterQuorum Settings…
  • 或是依照前面 Setting USB enable share folder 方式使用 Command Line 來設定新的 Quorum

確認 S2D 損壞硬碟:

  • 確認硬碟狀態:
    Get-StoragePool *S2D* | Get-PhysicalDisk
    
    • 有問題的硬碟狀態為
      OperationalStatus:Lost Communication, HealthStatus:Warning
      
  • 查看受影響的 VirtualDisk:
    Get-VirtualDisk
    
    • 有問題的 VirtualDisk 狀態為:
      HealthStatus:Warning
      

排除 S2D 故障硬碟:

  • 從硬碟區將故障硬碟過濾出來並存成 $FailDisk 變數
    $FailDisk  = Get-PhysicalDisk |? OperationalStatus -Notlike OK
    
  • 設定故障硬碟的使用狀態為 Retired
    Set-PhysicalDisk -InputObject $FailDisk -Usage Retired
    
  • 將故障硬碟從 S2D Pool 中移除
    Get-StoragePool *S2D* | Remove-PhysicalDisk -PhysicalDisks $FailDisk
    
  • 確認 S2D Pool 以無故障硬碟
    Get-StoragePool *S2D* | Get-PhysicalDisk
    

新硬碟加入 Storage Pool:

  • 尋找可以加入 Storage Pool 的新硬碟並存成 $NewDisk 變數
    $NewDisk = Get-PhysicalDisk |? CanPool -eq True
    
  • 將新硬碟加入 Storage Pool 中 (請確保新硬碟尚未初始化、格式化,否則屆時 S2D 將無法順利宣告及使用此顆新硬碟!!)
    Get-StoragePool *S2D* | Add-PhysicalDisk -PhysicalDisks $NewDisk –Verbose
    
  • 確認新硬碟是否已加入 Storage Pool
    Get-StoragePool *S2D* | Get-PhysicalDisk
    

手動重新平均寫入 Slab 資料

  • 正常情況下 S2D 會自己自動執行 S2D Storage Pool Rebalance 的動作把資料平均儲存在每個硬碟上 手動執行 S2D Storage Pool Rebalance
    Get-StoragePool *S2D* | Optimize-StoragePool
    
  • 透過 Show-PrettyPool.ps1 這隻腳本可以看到硬碟上已經寫回 Slab 資料
  • 查看平衡進度
    Get-StorageJob
    

Reference:

117 期 - 微軟最新 S2D 儲存技術,跨伺服器硬碟組成資源池 (weithenn blog)

在 Windows Server 上部署儲存空間直接存取 (microsoft.com)

深入剖析 S2D Storage Pool (weithenn blog)

儲存空間直接存取的巢狀復原 - Azure Stack HCI (microsoft.com)

S2D (Storage Spaces Direct) 更換故障硬碟 (weithenn blog)