Storage Tiers allow for use of SSD and hard drive storage within the same storage pool as a new feature in Windows Server 2012 R2. If you’ve not read Jose Barreto’s Step-by-step post on this subject already, it is a great source for links about Storage Tiers as well as a fantastic place to find examples of how to use PowerShell cmdlets to implement Storage Tiers with Storage Spaces. In this episode, I’m going to show you how to implement Storage Tiers using mostly the UI.
If you’re not familiar with Storage Tiers, the idea is to be able to mix Solid State Disk (SSD) storage with conventional disks (HDD). However, Storage Tiers provides the ability to store more frequently accessed data on SSD media...with both types of media used as block based storage for the same virtual disk: the best of both types of storage. That’s a pretty high level summary…and a pretty awesome concept. Previously, in my basement lab I had two different pools: one for each type of storage.
If implementing tiers using PowerShell, some calculations may be required…and it looks a bit complicated if you’re just attempting to try out. Granted, below are quite a few screen shots and this is a lengthy post. However, the process using the UI is fairly easy. I made one diversion into PowerShell to show how to define MediaTypes for storage devices if they’re not detected automatically. The technique I use for that is very similar to Jose’s example but is another variation to show that you’re not limited to just one technique.
If you’ve read my recent post about expanding a storage pool, you may have a better understanding of how Storage Spaces uses columns. Using the UI to configure Storage Tiers will attempt to use the defaults for the number of columns. Using some quick and easy PowerShell during the creation process, you may change the column defaults for a specific storage pool.
Remember: If you have difficulty reading any of the screenshots below, you can obtain a full size image by clicking on them.
1. The first step involves attaching the devices you intend to use. You must have at least one SSD and one physical drive attached. For this example, I chose 4 SSD devices, and 9 1 TB drives. This is indeed an odd arrangement but I’ve chosen it with a purpose: to show the layout of a defined virtual disk, and to show that Storage Spaces will use what it can from this arrangement and leave remaining space for other uses. In this example, I’ve connected the devices and can see them within Server Manager.
Figure1: Server Manager view of attached disks
2. Next, drop into Storage Pools within Server Manager to see the Primordial pool of available disks.
Figure 2: The Primordial Pool
3. Right-click the Primordial pool, and create a new pool.
Figure 3: Create a new pool
4. Give the new pool a name.
Figure 4: Naming the pool
5. In my example, I’m choosing 2 of the disks to be hot spares. The only reason I chose the specific devices below is because they’re the top drives in each external eSATA cabinet and are easy for me to keep track of this way. ;) In this section of the wizard, you will also choose the devices to include in the pool. You may click the checkbox on the line with column labels to select all available devices should you so choose.
Figure 5: Assign device uses
Figure 6: Manually setting MediaType with PowerShell
Notice that the SSD devices were detected as SSD media. However, in this case the physical drives show as unknown. If yours are not detected like in this example, they should be set correctly which can be done using PowerShell. We will proceed for now but will need to correct this later. Leaving the majority of the devices as Unknown will result in error in a later step. Next, confirm choices and proceed.
Figure 7: Confirm Selections
Figure 8: Successful Pool Creation
6. If you proceed forward from here and attempt to create a virtual disk, you may receive the following status message. Also note that the new option to create tiered storage is grayed out. This is because the devices in the pool currently don’t meet the minimum requirements due to the Unknown MediaType of my physical disk storage.
Figure 9: Can’t proceed if storage type needs to be defined
7. The above problem is an easy fix. If your storage was properly detected as HDD, then you can skip this step. Otherwise, open a PowerShell prompt and use commands like in the example below:
Figure 10: Assigning MediaType to Unknown disks.
In PowerShell, the disks show as Unspecified. Since all my physical disks show as Unspecified that are part of the pool, I’m simply using the PowerShell WHERE command (can be abbreviated with a question mark) to filter results and only act on those devices that need definition…setting them to HDD.
8. This is also a good time to override the defaults on number of columns to be used within this particular storage pool. By default, as you’ll note from the first command below, the pool is defined to use automatic selection. I am planning to use a mirroring on the virtual disk to be created and want to use two columns. If I were going to create a simple volume, I would want 4 columns as I have 4 SSD drives. You may also be thinking that I’m crazy for mirroring SSD drives. SSD drives are not exempt from failure.
Figure 11: Changing resiliency defaults for a storage pool
9. Getting back to the UI…now is a good time to refresh Server Manager. The UI needs to be refreshed to be aware of the changes just made or subsequent steps may yield errors.
Figure 12: Refresh Server Manager
10. Next, we will create the virtual disk. You don’t have to create the tiers first in PowerShell because the UI will do this for you by using the available checkbox to enable tiering.
Figure 13: Create the virtual disk
Figure 14: Use the checkbox to enable Storage Tiers
11. Select the layout for the storage. In my example, I want to use mirroring.
Figure 15: Choose resiliency level
12. Select two-way mirror.
Figure 16: Two-way mirror
13. When using tiers, you must use fixed provisioning.
Figure 17: Fixed Provisioning
14. Here you get to view the size of the tiers for the virtual disk. Both tiers will be put together to make the resulting virtual disk. In this example, I’m going with the maximum for each.
Figure 18: Selecting SSD and HDD tier size
15. Reviewing the selections below, you see that out of 9TB of available data, the resulting virtual disk is only 3.6TB. Remember that we used all the available SSD space (which was smaller than available HDD space to begin with), and that by choosing mirroring that we’re really using 7.2TB for a 3.6TB volume. Any space not used will remain available in the pool. The maximum size of 3.6TB for this virtual disk is due to the overall disk layout.
Figure 19: Confirm selections
Figure 20: Completion of virtual disk creation
16. Next step is to create a volume on the virtual disk. Note that because of using tiers, you must use all available space on the virtual disk just created.
Figure 21: Create a volume
Figure 22: Choosing max size in New Volume Wizard
17. Assign a drive letter for the volume.
Figure 23: Assign drive letter.
18. Specify a volume label if you choose.
Figure 24: Volume Label
19. Confirm choices.
Figure 25: Final Confirmation
Figure 26: Last step may take a while to complete
20. Once everything has completed, if you look at the storage pool again, you will see that space remains available in the pool -- even though we chose the maximum size for the virtual disk and volume. This is due to the storage configuration I chose for this example. Based on the configuration options I chose for the virtual disk, Storage Spaces chose the largest virtual disk it could create based on the available disk layout and columns needed. Therefore, essentially the space on two remaining 1TB drives remains for whatever I might want to use it for.
Figure 27: Remaining Space
21. After the wizard completes, the volume may be used for data. You may or may not know that there are scheduled tasks associated with Storage Tiers. Initially they are not enabled, but after establishing the first tiered storage, they will be enabled automatically. After successful completion, those tasks should appear enabled as follows.
Figure 28: Task Scheduler jobs.
I hope this helps to illustrate how to create tiered storage with Storage Spaces using Windows Server 2012 R2. Having the option to use different classes of storage within the same virtual disk is a great feature to have as an option for your storage needs.
Prior Posts about Storage Spaces
Jose Barreto’s Storage Tiering Step-By-Step with PowerShell
TechNet Reference for Get-VirtualDisk
TechNet Reference for Get-StoragePool
Until next time!
Amazing Information to understand in steps.
Great article, thanks. There are a number of good examples of storage spaces, however, I'm finding information available on designing spaces to be lacking. What is the best way to determine the optimal number of columns in a tiered space? For example if I have a 24 disk JBOD with 16 HDDs and 8 SSDs does it make the most sense to have 8 columns? What is the effect of having 4 columns? How would that configuration limit the future expansion of the space? For example could I expand the space by adding 8 more disks?
@ Cory Tomlinson,
You are right, the available information on designing spaces still be lacking.
As per the Product Manager Mr. Jose Barreto,
The number of columns per space, for maximum performance, would be:
- For a simple space, the number of disks in the tier
- For a mirrored space, half the number of disks in the tier
If the tiers have different number of disks, use the smaller number of the two.
In the example in this post, I have 4 disks in the SSD tier and 8 disks in the HDD tier.
So, that means 4 columns (number of disks in the smaller tier) for the simple space and 2 columns (half the number of disks in the smaller tier) for the mirrored one.
But the question is:
If we added more disks in the JBOD for future to expansion.
Let's take the example described above, 4 disks in the SSD tier and 8 disks in the HDD tier for a mirrored space.
I will add 4 SSDs and 4 HDDs (Total= 8 disks in the SSD tier and 12 disks in the HDD tier).
How it will reflect the NumberOfColumns?
Do we need to run a new POS below?
Get-StoragePool Pool1 | Set-ResiliencySetting -Name Mirror -NumberOfColumnsDefault 4