Skip to main content
Pure Technical Services

Windows File Systems for FlashArray

Currently viewing public documentation. Please login to access the full scope of documentation.

This article is intended for Windows Server versions 2008 R2, 2012, 2012 R2, 2016, 2019, and 2022.

Overview

For the Pure Storage FlashArray, both the Windows Server New Technology File System (NTFS) and the Resilient File System (ReFS) are supported. However, ReFS is not currently recommended by Pure as noted below.

While ReFS is supported for FlashArray, it is not currently recommended by Pure as it does not support commands such as TRIM and UNMAP, and is not compatible with Offloaded Data Transfer (ODX). Microsoft states that NTFS is required for these to work. You can read more about ReFS in this Microsoft article.

NTFS (New Technology File System)

NTFS allows formatting a drive with a wide range of cluster sizes (allocation unit size). We do not have any specific recommendations outside of using a 64K allocation unit size for Microsoft SQL Server workloads. See the SQL Server > Quick Reference: Best Practices for more details.

ReFS (Resilient File System)

ReFS supports both 4K and 64K cluster (allocation unit size) sizes. 4K is the recommended cluster size for most deployments, but 64K clusters are appropriate for large, sequential IO workloads. We do not have any specific recommendations outside of using a 64K allocation unit size for Microsoft SQL Server workloads. See the SQL Server > Quick Reference: Best Practices for more details.

FlashArray Block Alignment

All of the Windows Server versions noted for this article do, by default, utilize a 1024 MB starting offset. 

Pure Storage uses a 512-byte geometry on the FlashArray and, as such, there should never be a block alignment issue. To determine block alignment, use the StartingOffset from Win32_DiskPartition and divide by the Blocksize from Win32_Volume. The resulting value should be an integer value.

StartingOffset / Blocksize = Integer Value

Example using the below values from three FlashArray volumes:

Disk #0     --  1048576 / 4096 = 256
Disk #1, #2 -- 34603008 / 4096 = 8448 

To check the StartingOffset of a Windows Server host, you could use the following Windows PowerShell.

Get-WmiObject -Class Win32_DiskPartition -ComputerName $env:COMPUTERNAME | select Name, NumberOfBlocks, Size, StartingOffset, Blocksize | Format-Table -AutoSize

Name                  NumberOfBlocks          Size StartingOffset Blocksize
----                  --------------          ---- -------------- ---------
Disk #0, Partition #0        1024000     524288000        1048576       512
Disk #0, Partition #1      313544704  160534888448      525336576       512
Disk #1, Partition #0     2147414016 1099475976192       34603008       512
Disk #2, Partition #0     2147414016 1099475976192       34603008       512

The Blocksize output above represents the physical block size at which the Pure Storage FlashArray is writing data. Disk #0 is a SAN boot volume for C:\ and Disk #1 and #2 are the ReFS and NTFS volumes respectively.

Get-WmiObject -Class Win32_Volume -ComputerName $env:COMPUTERNAME | Select BlockSize, Name, FileSystem | Format-Table -AutoSize

BlockSize Name                                              FileSystem
--------- ----                                              ----------
     4096 \\?\Volume{715e64e7-0000-0000-0000-100000000000}\ NTFS      
     4096 D:\                                               ReFS      
     4096 E:\                                               NTFS      
     4096 C:\                                               NTFS

The BlockSize (cluster size or allocation unit size) output above represents the logical block size that is used for the formatting of the file system, ReFS or NTFS.