Working with Clustered Shared Volumes on a Windows Server Host
This article is intended for Windows Server versions 2012, 2012 R2, 2016, and 2019.
The first three workflow tasks should be completed before beginning the other items that this section is focused on configuring. There are two methods that will be shown, (1) Using Graphical User Interfaces (GUI) for the FlashArray and Windows Server Disk Management and (2) Using Windows PowerShell and Pure Storage PowerShell SDKv1.
This article shows examples using the Resilient File System (ReFS) for Windows Server. Although it is supported for the Pure FlashArray, it is not currently recommended as it does not allow for the use of commands such as TRIM and UNMAP, as well as not being compatible with Offloaded Data Transfer (ODX).
Steps to Create, Connect and Configure
- Installing Multipath-IO (click to open linked article)
- Configuring Multipath-IO (click to open linked article)
- Setting the MPIO Policy (click to open linked article)
- Create FlashArray Volume(s)
- Connect FlashArray Volume(s) to a Host Group for Shared Storage (CSV)
- Manage FlashArray Volume(s) from Windows Server Failover Cluster Manager
This section assumes that there is a Pure Storage FlashArray setup and configured with hosts and all SAN/Network fabric connectivity in place.
FlashArray Management GUI
The steps outlined here can be used for new Volumes as well as restored snapshots, which are simply new volumes after restore.
Create FlashArray Volume(s)
The FlashArray Management interface is very simple to use. Follow the below steps to create a volume. Repeat the same actions to create a volume named ReFS (optional).
1. Create a new volume named NTFS.
Viewing the created NTFS volume.
Connect FlashArray Volume(s) to Host (or Host Group)
1. Connect the NTFS volume to SERVER08.
Viewing the NTFS volume that is now connected to SERVER08.
Windows Server Disk Management
Manage FlashArray Volume(s) from Windows Server Host
1. Start Disk Management using Start > Run > diskmgmt.msc
2. Perform Rescan Disks.
3. Initialize disks by right-clicking on the Disk # and selecting Initialize Disk.
4. The Initialize Disk dialog will open and indicate all of the disks that need to be initialized. For this example, there is Disk 1 (NTFS) and Disk 2 (ReFS) that will be initialized using GPT (GUID Partition Table). GPT is used to support disks larger than 2 TB.
5. Create a volume by right-clicking on the disk partition and selecting New Simple Volume.
6. The New Simple Volume Wizard will open, click Next >.
7. Specify Volume Size, the default is used for use maximum size.
8. Assign Drive Letter or Path, the default is used of selecting the next available drive letter.
9. Format Partition, choose NTFS as the File system, 64K Allocation unit size (cluster size), and set the Volume label.
(Optional) To create an ReFS volume choose ReFS as the File system.
10. Accept the settings from the wizard and click Finish.
The new volume(s) are now ready for use.
Manage FlashArray Volume(s) from Windows Server Failover Cluster Manager
Regarding how to proceed updating the Pure code in a Clustered shared environment: If using Clustered Shared Volumes (CSVs) in a Cluster, MS Cluster Manager Service manages disk connections. Therefore, when the hosts that did own a volume go offline for a reboot, it will do a heartbeat (host owner of a CSV loses its volume access) and find a new host owner on its own to online the volume, without manual intervention.
Windows PowerShell
Create FlashArray Volume(s)
The volumes that will be used in the examples are based on the NTFS and ReFS file systems. The host that will be used is named SERVER01 and is running Windows Server 2016 with Windows PowerShell 5.0.
Following the Windows PowerShell examples assumes that the Pure Storage PowerShell SDK has been installed. If the PowerShell SDK has not been installed please see the Pure1 Support > Programming Interfaces > Windows PowerShell to get started.
1. Start a new Windows PowerShell session.
2. Create a connection to the FlashArray.
$FlashArray = New-PfaArray -EndPoint 10.1.1.1 -Credentials (Get-Credential) -IgnoreCertificateError PS C:\> $FlashArray Disposed : False EndPoint : 10.1.1.1 UserName : pureuser ApiVersion : 1.7 Role : ArrayAdmin ApiToken : 58db6abf-1933-553f-1628-0c6e207aba1e
3. Create two new volumes named ReFS and NTFS.
New-PfaVolume -Array $FlashArray -VolumeName 'ReFS' -Unit T -Size 1 New-PfaVolume -Array $FlashArray -VolumeName 'NTFS' -Unit T -Size 1 source : serial : 45084F3508BF461400011ACB created : 2017-05-23T21:46:04Z name : ReFS size : 1099511627776 source : serial : 45084F3508BF461400011ACC created : 2017-05-23T21:46:04Z name : NTFS size : 1099511627776
Connect FlashArray Volume to Host (or Host Group)
1. Connect ReFS and NTFS volumes to SERVER01.
PS C:\> New-PfaHostVolumeConnection -Array $FlashArray -VolumeName 'ReFS' -HostName 'SERVER08' PS C:\>New-PfaHostVolumeConnection -Array $FlashArray -VolumeName 'NTFS' -HostName 'SERVER08' vol name lun --- ---- --- ReFS Server08 1 NTFS Server08 2
If the volumes need to be visible to a cluster of Windows Server hosts then they need to be connected to a Host Group. The following steps show how to create a Host Group, add a Host, and then connect the volume to the Host Group.
PS C:\> New-PfaHostGroup -Array $f -Hosts 'SERVER08' -Name 'HOSTGROUP1' PS C:\> New-PfaHostGroupVolumeConnection -Array $f -VolumeName 'ReFS1' -HostGroupName 'HOSTGROUP1' PS C:\> New-PfaHostGroupVolumeConnection -Array $f -VolumeName 'NTFS1' -HostGroupName 'HOSTGROUP1' hosts name ----- ---- {SERVER08} HOSTGROUP1 HOSTGROUP1 HOSTGROUP1 PS C:\>Get-PfaHostGroupVolumeConnections -Array $f -HostGroupName 'HOSTGROUP1' | Format-Table -AutoSize vol name lun --- ---- --- ReFS1 HOSTGROUP1 254 NTFS1 HOSTGROUP1 253
Manage FlashArray Volume(s) from Windows Server Host
1. Rescan/update the Windows Server host, SERVER01 to see the new volumes.
PS C:\> Update-HostStorageCache
2. View the currently connected volumes to the Windows Server host.
PS C:\> Get-Disk Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition Style ------ ------------- ------------- ------------ ----------------- ---------- ---------- 1 PURE FlashArray 45084F3508BF461400011ACB Healthy Online 1 TB RAW 2 PURE FlashArray 45084F3508BF461400011ACC Healthy Online 1 TB RAW 0 PURE FlashArray 73E940225A2A52BB0003AE86 Healthy Online 150 GB MBR
If the SAN Policy of the Windows Server host is kept at the default of OfflineShared when the volumes are connected to the host they will not come online automatically. Performing a Get-Disk will indicate that they have an OperationalStatus of Offline.
PS C:\> Get-Disk Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition Style ------ ------------- ------------- ------------ ----------------- ---------- ---------- 1 PURE FlashArray 45084F3508BF461400011ACB Healthy Offline 1 TB GPT 2 PURE FlashArray 45084F3508BF461400011ACC Healthy Offline 1 TB GPT 0 PURE FlashArray 73E940225A2A52BB0003AE86 Healthy Online 150 GB MBR PS C:\> Get-Disk | Where-Object { $_.OperationalStatus -eq 'Offline' } | Set-Disk -IsOffline $False PS C:\> Get-Disk Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition Style ------ ------------- ------------- ------------ ----------------- ---------- ---------- 1 PURE FlashArray 45084F3508BF461400011ACB Healthy Online 1 TB GPT 2 PURE FlashArray 45084F3508BF461400011ACC Healthy Online 1 TB GPT 0 PURE FlashArray 73E940225A2A52BB0003AE86 Healthy Online 150 GB MBR
3. Initialize the new volumes.
Set the -Number parameter from the output of Get-Disk. The Partition Style has been updated from RAW to GPT.
PS C:\> Initialize-Disk -Number 1 -PartitionStyle GPT PS C:\> Initialize-Disk -Number 2 -PartitionStyle GPT PS C:\> Get-Disk Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition Style ------ ------------- ------------- ------------ ----------------- ---------- ---------- 1 PURE FlashArray 45084F3508BF461400011ACB Healthy Online 1 TB GPT 2 PURE FlashArray 45084F3508BF461400011ACC Healthy Online 1 TB GPT 0 PURE FlashArray 73E940225A2A52BB0003AE86 Healthy Online 150 GB MBR
4. Create a new partition.
PS C:\> New-Partition -DiskNumber 1 -UseMaximumSize -AssignDriveLetter DiskPath: \\?\mpio#disk&ven_pure&prod_flasharray&rev_8888#1&7f6ac24&0&3632344139333730343530383446333530384246343631343030303131414342#{53f 56307-b6bf-11d0-94f2-00a0c91efb8b} PartitionNumber DriveLetter Offset Size Type --------------- ----------- ------ ---- ---- 2 D 135266304 1023.87 GB Basic PS C:\> New-Partition -DiskNumber 2 -UseMaximumSize -AssignDriveLetter DiskPath: \\?\mpio#disk&ven_pure&prod_flasharray&rev_8888#1&7f6ac24&0&3632344139333730343530383446333530384246343631343030303131414343#{53f 56307-b6bf-11d0-94f2-00a0c91efb8b} PartitionNumber DriveLetter Offset Size Type --------------- ----------- ------ ---- ---- 2 E 135266304 1023.87 GB Basic PS C:\> Get-Volume DriveLetter FileSystemLabel FileSystem DriveType HealthStatus OperationalStatus SizeRemaining Size ----------- --------------- ---------- --------- ------------ ----------------- ------------- ---- D Fixed Healthy Unknown 0 B 0 B System Reserved NTFS Fixed Healthy OK 169 MB 500 MB C NTFS Fixed Healthy OK 117.59 GB 149.51 GB E Fixed Healthy Unknown 0 B 0 B
5. Format volumes as NTFS and ReFS.
The below examples set the AllocationUnitSize (cluster size) to 64KB.
PS C:\> Format-Volume -DriveLetter D -FileSystem NTFS -NewFileSystemLabel 'NTFS' -AllocationUnitSize 64KB DriveLetter FileSystemLabel FileSystem DriveType HealthStatus OperationalStatus SizeRemaining Size ----------- --------------- ---------- --------- ------------ ----------------- ------------- ---- D NTFS NTFS Fixed Healthy OK 1023.7 GB 1023.87 GB PS C:\> Format-Volume -DriveLetter E -FileSystem ReFS -NewFileSystemLabel 'ReFS' -AllocationUnitSize 64KB DriveLetter FileSystemLabel FileSystem DriveType HealthStatus OperationalStatus SizeRemaining Size ----------- --------------- ---------- --------- ------------ ----------------- ------------- ---- E ReFS ReFS Fixed Healthy OK 1018.03 GB 1023.81 GB PS C:\> Get-Volume DriveLetter FileSystemLabel FileSystem DriveType HealthStatus OperationalStatus SizeRemaining Size ----------- --------------- ---------- --------- ------------ ----------------- ------------- ---- D NTFS NTFS Fixed Healthy OK 1023.7 GB 1023.87 GB System Reserved NTFS Fixed Healthy OK 169 MB 500 MB C NTFS Fixed Healthy OK 117.59 GB 149.51 GB E ReFS ReFS Fixed Healthy OK 1018.03 GB 1023.81 GB
Create Mounts Point(s) (Optional)
This is an optional step and shows how to create Partition Access Paths (mount points) for volumes.
1. Retrieve the partition details in order to see the PartitionNumber which is required for creating a PartitionAccessPath.
PS C:\> Get-Partition DiskPath: \\?\mpio#disk&ven_pure&prod_flasharray&rev_8888#1&7f6ac24&0&3632344139333730343530383446333530384246343631343030303131414342#{53f 56307-b6bf-11d0-94f2-00a0c91efb8b} PartitionNumber DriveLetter Offset Size Type --------------- ----------- ------ ---- ---- 1 17408 128 MB Reserved 2 D 135266304 1023.87 GB Basic DiskPath: \\?\mpio#disk&ven_pure&prod_flasharray&rev_8888#1&7f6ac24&0&3632344139333730343530383446333530384246343631343030303131414343#{53f 56307-b6bf-11d0-94f2-00a0c91efb8b} PartitionNumber DriveLetter Offset Size Type --------------- ----------- ------ ---- ---- 1 17408 128 MB Reserved 2 E 135266304 1023.87 GB Basic DiskPath: \\?\mpio#disk&ven_pure&prod_flasharray&rev_8888#1&7f6ac24&0&3632344139333730373345393430323235413241353242423030303341453836#{53f 56307-b6bf-11d0-94f2-00a0c91efb8b} PartitionNumber DriveLetter Offset Size Type --------------- ----------- ------ ---- ---- 1 1048576 500 MB IFS 2 C 525336576 149.51 GB IFS
2. Create a directory that will be assigned to the new volume.
PS C:\> New-Item -Path 'C:\FlashArrayMounts\NTFS' -ItemType Directory Directory: C:\FlashArrayMounts Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 5/23/2017 3:50 PM NTFS PS C:\> New-Item -Path 'C:\FlashArrayMounts\ReFS' -ItemType Directory Directory: C:\FlashArrayMounts Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 5/23/2017 3:50 PM ReFS
3. Add the mount points for the individual volumes. Use the PartitionNumber retrieved from Step 1 for the new drives (D and E).
PS C:\> Add-PartitionAccessPath -DiskNumber 1 -AccessPath 'C:\FlashArrayMounts\NTFS' -PartitionNumber 2 PS C:\> Add-PartitionAccessPath -DiskNumber 2 -AccessPath 'C:\FlashArrayMounts\ReFS' -PartitionNumber 2
4. View the new mount points.
PS C:\> cd C:\FlashArrayMounts\ PS C:\FlashArrayMounts> ls Directory: C:\FlashArrayMounts Mode LastWriteTime Length Name ---- ------------- ------ ---- d----l 5/23/2017 3:50 PM NTFS d----l 5/23/2017 3:50 PM ReFS
Below is the view of the mount points from Windows Explorer.