Windows Server File Systems FAQ for FlashArray
This article is intended for Windows Server versions 2008 R2, 2012, 2012 R2, 2016, 2019, and 2022.
Overview
There are two different file systems that can be used when formatting disks in Windows Server: New Technology File System (NTFS) and Resilient File System (ReFS). ReFS is an option in Windows Server 2012 and later. This document will cover common aspects when dealing with NTFS and ReFS.
Running SQL Server on Linux is out of scope for this Windows Server-based article as it has specific disk recommendations and considerations that have nothing to do with NTFS and ReFS.
Supportability
For supportability of NTFS and ReFS file systems, refer to the Microsoft Support Matrix.
NTFS is recommended. As noted in the Microsoft Support Matrix, ReFS is supported but has caveats such as not supporting aspects such as TRIM, UNMAP, and Offloaded Data Transfer (ODX) all of which currently require NTFS.
Allocation Unit
Both NTFS and ReFS support multiple allocation unit sizes. Allocation unit size is sometimes known as either cluster size or block size. In Windows Server 2022, NTFS supports up to a 2M allocation unit size. ReFS only supports two sizes: 4k and 64k.
Pure Storage does not require a specific allocation unit size when formatting disks.Follow application-specific best practices to determine the proper allocation unit for each volume presented from FlashArray. For example, the best practice for Microsoft SQL Server workloads is a 64k allocation unit size which is not only Microsoft's documented best practice but also documented in the Pure article Best Practices: Microsoft SQL Server.
Partition Style
Windows Server has two partition styles when initializing disks: GUID Partition Table (GPT) and Master Boot Record (MBR). For a comparison of the two, see the section "Compare partition styles - GPT and MBR" in the Microsoft Learn article Initialize New Disks. Both are fully supported with FlashArray, but most modern disks should consider the use of GPT since it is enhanced and supports features such as disks larger than 2TB.
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 output above represents the logical block size that is used for the formatting of the file system, ReFS or NTFS.