2018-07-03

Microsoft Storage Pool 建立 Virtual Disk 容量異常的問題

利用一些不同容量的 硬碟 + Storage 組成一個 Storage Pool 的時候遇到了問題
所有容量合計有 54.5 TB , 但是在建立 Virtual Disk 的時候只能建立一個 6.80 TB 的 Disk
如果把這個 6.80 TB 的 Disk 建立後, 又可以建立一個 33 TB 的 Disk
但怎麼樣都無法建立一個 54.5 TB 的 Disk

這個問題在初期建立 Thin Disk 的時候造成一些問題

因為 Thin Disk 我選了最大容量 54.5 TB
但在實際儲存容量使用達到 6.8 TB 的時候就再也無法寫入
如果在 CMD 下面 Copy 檔案, 會顯示 Insufficient disk space

在 Event Log 中有以下錯誤



在 GUI 介面中明明有 54.5TB, 卻只能建力 6.80 TB 的 Disk 

掙扎很久後經同業友人提供以下資訊找到解決方法

SOLVED: Write error with Windows Storage Pool network shares

這篇文章最後一段寫道:

[The Answer]
Turns out, when you create virtual disks within Windows storage pools the virtual disk is by default configured to stripe the data across as many drives as there are. I had three, so it striped across three for more throughput. Good basic logic there. However, when I added a new drive it couldn't use it by default because it wanted to stripe equally across three drives, and there werern't 3 drives available with enough space to do so. Therefore, it claimed the drive was full (which was also confusing, because I configured the drive to expand virtually to 20TB and it only had 6.8TB used) any time it tried to make a write. To have used the same striping setup with that virtual disk, I would have needed to add three physical hard disks when I did my upgrade. Not exactly how I had envisioned my upgrade path.

For an explanation of how striping works in Windows storage pools, this was a great article to read -
http://www.itprotoday.com/windows/navigating-storage-spaces-and-pools

To fix, there are two options that I can see. First, if keeping on Windows 2012 R2 (or Windows 8 I would imagine) you can create a new virtual disk with one "column" for striping. Original idea for that came from https://community.spiceworks.com/topic/336937-microsoft-windows-server-2012-storage-pool-disk-issue in the best answer. This removes the throughput benefits of striping, but it will scale with every single physical hard disk that gets added to the pool. Then, move all files from the trouble virtual disk to the new virtual disk, and delete the old virtual disk. I'm currently in the process of doing this right now.

Second, if you are running a Windows Server 2016 instance, or using Windows 10 for your storage pool, there's a fix in a PowerShell command "Optimize-StoragePool" which will rebalance data across disks. Here's a link for more info - https://stebet.net/microsoft-finally-adds-rebalancing-to-storage-spaces Note though, that the virtual disk will still have the same number of columns for striping (it can't be changed after the fact) and will likely run into this issue again, but it can be rebalanced again. I don't know the effectiveness of this long term, as I don't have my storage pool set up on those versions of Windows.

其中解決問題的方法與 NumberOfColumns 有關
我改用 PowerShell 用指令終於建出了與 Pool Size 一樣大的 Disk 了


New-VirtualDisk
-StoragePoolFriendlyName AthenaPool

-FriendlyName AthenaVault
-ResiliencySettingName Simple
-ProvisioningType Fixed
-UseMaximumSize
-NumberOfColumns 1



沒有留言: