Настройка хранилища Storage Spaces Direct (S2D) в Windows Server

Storage Spaces Direct (S2D, локальные дисковые пространства) – это технология программно-определяемого хранения данных (Software-Defined Storage) от Microsoft, доступная начиная с Windows Server 2016. Благодаря Storage Spaces Direct вы можете обледенить локальные физических дисков нескольких серверов в единое отказоустойчивое, масштабируемое хранилище, защищенное от выхода из строя как отдельных дисков, так и целых серверов. Цена такого программного хранилища может получиться значительно меньше, чем стоимость аппаратных дисковых массивов, а за счет простого масштабирования (до 16 серверов и 400+ дисков) и возможности использовать разные типы накопителей (HDD, SSD, NVMe) можно обеспечить значительную производительность. В этой статье мы рассмотрим пошаговый процесс развёртывания S2D кластера на Windows Server 2025.

Что такое Storage Spaces Direct (S2D)

S2D является дальнейшим развитием технологии Storage Spaces и позволяет объединить локальные диски нескольких узлов (серверов) в пулы хранения (Storage Pool). На данных пулах можно создать виртуальные тома (диски) и использовать их в качестве общего тома кластера Cluster Shared Volume (CSV) для хранения файлов виртуальных машин Hyper-V и файловых шар SOFS. Если вам понадобится расширить размер такого хранилища, достаточно добавить в S2D кластер новый сервер или новый физический накопитель в любой из серверов. По сути, технология Storage Spaces Direct является ответом Microsoft на VMware vSAN.

S2D поддерживает несколько режимов отказоустойчивого хранения данных:

  • Mirrored (3) – данные синхронно реплицируются между 3 (или 2 в минимальной конфигурации) узлами. Высокая скорость чтения обеспечивается распределением операции между всеми серверами.
  • Parity (2) – данные с хранением четности распределены между разными дисками. Данные хранятся более эффективно, т.к. не надо как в первом случае хранить несколько копий одних и тех же данных (четыре узла).
  • Tiered (1) – используется комбинация обоих техник (Mirror-Accelerated Parity). Данные сначала пишутся в тир зеркала (Mirror), а затем в фоне и переносятся в тир четности.

Требования к Storage Spaces Direct

В S2D поддерживаются следующие типы устройств хранения:

  • Обычные HDD диски (SAS/SATA)
  • SATA / SAS SSD диски
  • NVMe (Non-Volatile Memory Express) сверхбыстрые SSD диски, подключенные через скоростную шину PCI Express

Разные типы дисков можно комбинировать в различные массивы (по скорости и емкости). Например, логично расположить кэш и транзакционные логи приложений на скоростных NVMe SSD, а медленные и недорогие диски лучше использовать для хранения архивных файлов, доступ к которым не требует повышенной производительности и т.д.

Базовые аппаратные требования:

  • 4 Гб RAM на каждые 1Тб емкости хранения
  • Желательно одинаковая конфигурация серверов (один производитель, модели)
  • Не менее 2 NIC на сервер
  • Обязательно наличие высокоскоростной сети между узлами S2D кластера (от 10 GbE и выше).
  • Для снижения задержек рекомендуется наличие поддержки RDMA (Remote Direct Memory Access) для NIC: iWARP или RoCE
  • Наличие дисков. Помимо системного должен иметь как минимум один физический диск на каждом узле. Все диски, которые планируется добавить в хранилище Storage Spaces Direct должны быть не размечены (не должны быть разбиты и не содержать таблицы разделов).
  • RAID-контроллеры не поддерживаются. Диски должны подключаться через простой HBA-адаптер в режиме Pass-through

Для работы S2D нужно организовать отказоустойчивый кластер, к такими требованиями к узлам:

Подготовка серверов для кластера Storage Spaces Direct

В нашей тестовой лаборатории мы разворачиваем трехузловой кластер S2D на базе Windows Server 2025.

У нас есть три сервера S2D—Node01, S2D—Node02, S2D—Node03, на каждом из которых, кроме системного, подключено по 4 SSD диска. Задаем уникальное имя компьютера (hostname) на каждом из серверов.

Трехузловой кластер S2D позволит реализовать трёхстороннее зеркалирование (Three-way mirror). Каждая копия данных на отдельном физическом сервере (эффективность хранения 33.3%). Он сможет пережить потерю до двух физических дисков на разных узлах или полный отказ одного целого хоста. Но на нем нельзя создать более экономичный тип хранения Parity (RAID-5) или Mirror-accelerated parity (для них требуется минимум 4 узла).

На каждом сервере две сетевые карты. Оптимально при наличии поддержки SET (Switch Embedded Teaming на NIC, объединить физические сетевые адаптеры в виртуальный коммутатор Hyper-V и нарезать на нем виртуальные сетевые карты для разного типа трафика (старый режим NIC Teaming, LBFO, не поддерживается).

Однако для упрощения мы будем использовать физические NIC напрямую. Одну из них будем использовать под трафик управления и доступа, а вторую под трафик хранения. Для удобства на каждом сервере переименуем сетевые интерфейсы с помощью PowerShell и зададим базовые настройки сети:

# На S2D-Node01
Rename-NetAdapter -Name "Ethernet0" -NewName "Management"
Rename-NetAdapter -Name "Ethernet1" -NewName "StorageNet"
# Назначаем IP для сети управления
New-NetIPAddress -InterfaceAlias "Management" -IPAddress 192.168.14.103 -PrefixLength 24 -DefaultGateway 192.168.14.2
# IP вашего Контроллера Домена
Set-DnsClientServerAddress -InterfaceAlias "Management" -ServerAddresses 192.168.14.204
# Назначаем IP для изолированной сети хранения (без шлюза и DNS)
New-NetIPAddress -InterfaceAlias "StorageNet" -IPAddress 10.10.10.13 -PrefixLength 24

Затем добавляем каждый сервер в домен AD.

Установим необходимые роли Windows Server:

Install-WindowsFeature -Name File-Services, Failover-Clustering, RSAT-Clustering-PowerShell, Storage-Replica -IncludeManagementTools -Restart

Установка роли failover cluster в Windows Server

Собираем Failover Cluster Windows Serve для S2D

Теперь нужно создать кластер высокой доступности Failover Clustering (WSFC) из трех наших серверов.

На каждом хосте хоста кластера проверяем, что Windows Server видит диски, пригодные для S2D (они должны быть в статусе CanPool = True (диски должны быть неразмеченными):

# Проверка дисков, доступных для пула (запустите на каждом узле)

Get-PhysicalDisk | Where-Object CanPool -eq $True|ft DeviceId, MediaType, canpool,OperationalStatus,HealthStatus,size
Get-PhysicalDisk доступные диски

С любого из серверов выполните валидацию кластера (набор тестов, который вернет все ли готово для объединения узлов в кластер S2D):

Test-Cluster -Node "S2D-Node01", "S2D-Node02", "S2D-Node03" -Include "Storage Spaces Direct", "Inventory", "Network", "System Configuration"

Если валидация прошла успешно создаем кластер с именем S2D-Cl командой:

New-Cluster -Name S2D-Cl -Node "S2D-Node01", "S2D-Node02", "S2D-Node03" -NoStorage -StaticAddress 192.168.14.100

Примечание. Если в кластере четное число серверов, придется настроить ресурс-свидетель (обычно это SMB папка, которая задается командой Set-ClusterQuorum -FileShareWitness UNCPath ). Если количество узлов нечетное – свидетель не нужен.

Включаем Storage Spaces Direct (S2D) в кластере Windows

Проверяем, включен ли S2D кластер:

Get-ClusterS2D

Get-ClusterS2D статус кластера

Для автоматической активации и настройки кластера S2D используется командлет:

Enable-ClusterStorageSpacesDirect

Enable-ClusterStorageSpacesDirect включить S2D кластер

Командлет автоматически:

  • Сканирует доступные диски на хостах
  • Создает единый виртуальный пул хранения (Storage Pool) из всех доступных дисков
  • Если используются диски разных типов, некоторые быстрые диски (NVMe или SSD) автоматически выделяются под кэш чтения и записи
  • Также автоматически создаются два тира: Performance и Capacity (при наличии SSD+HDD) с типом отказоустойчивости 3-way mirror (на 4+ узловом кластере создаются тиры parity и mirror)
  • Включает системные службы S2D
Чтобы отключить автоматическое создание пула и настройку кеша, для включения S2D используется команда:

Enable-ClusterStorageSpacesDirect -CacheState Disabled -AutoConfig:0 -SkipEligibilityChecks

Проверим, что автоматически был создан большой пул хранения, с именем “ S2D on <ClusterName> ”:

Get-StoragePool | Where-Object { $_.FriendlyName -like "S2D*" }

Get-StoragePool проверить что пул создан

Проверим, что диски помечены для S2D:

Get-PhysicalDisk | Select-Object FriendlyName, MediaType, OperationalStatus, HealthStatus, Size

Если при выполнении команды Enable-ClusterS2D появится ошибка «no disks with supported bus types found to be used for S2D», скорее всего тип шины (BusType) ваших дисков – RAID (что с точки зрения S2D – неподдерживаемая конфигурация). Проверим тип шины
Get-Disk | select Number, FriendlyName, OperationalStatus, Size, PartitionStyle, BusType | sort Number | ft -AutoSize BusType-RaidТак и есть – во всех случаях это RAID. Решение — обновить драйверы/ firmware контроллеров (в случае серверов HP установить последний HPE Support Pack). Проверим тип BusType еще раз (теперь он сменился на SAS).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\arcsas\Parameters - BusType SASКроме того, есть небольшой трюк позволяющий в реестре изменить тип шины на SATA для нужного типа контроллера: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\arcsas\Parameters
«BusType»=dword:0000000b

(вместо 00000008)Другие примеры использования командлетов PowerShell для управления локальными дисками приведены в статье Управление дисками и разделами из PowerShell.


Внутри созданного пула из физических дисков вы можете создать разное количество томов (причем можно для каждого задавать разный уровень отказоустойчивости и избыточности).

В Windows Server 2025 для создания новых томов на S2D пуле можно использовать графическую консоль Failover Cluster Manager.

  1. Открываете Failover Cluster Manager>
  2. Разверните кластер -> перейдите в ветку Storage -> выберите Pools
  3. Щелкните по нему ПКМ и выберите New Virtual Disks2d создать виртуальный том (диск)
  4. Укажите имя и размер томаимя нового тома s2d
  5. В качестве типа устойчивости для 3 нодового кластера будет предложено только трехсторонее зеркало (Three—way mirror) размер тома s2d и тип отказоустойчивости
  6. После создания тома его нужно будет вручную инициализировать, создать раздел и отформатировать в файловой системе ReFS.отформатировать новый volume
  7. Новый том появится в разделе Storage -> Disks со статусом Available Storage.
  8. Чтобы сделать его общим томом кластера для виртуальных машин, выберите опцию Add to Cluster Shared VolumesДобавить том в Cluster Shared Volumes
  9. Данный том можно использовать для размещения виртуальных машин Hyper-V или сетевого хранилища Scale-out File Server.

Однако для более эффективного и удобного создания и управления томами S2D лучше использовать веб интерфейс Windows Admin Center (WAC) или PowerShell.

Например, создать новый том, отформатировать его в ReFS и добавить в CSV можно всего одной командой:

New-Volume -FriendlyName "Volume01" -StoragePoolFriendlyName "S2D on S2D-Cl" -FileSystem ReFS -Size 2TB

По умолчанию для новых томов используется тип отказоустойчивости, заданный для пула в параметре ResielencySettingNameDefault (у нас это Mirror):

Get-StoragePool s2d* | FL

ResielencySettingNameDefault тип отказоустойчивости пула s2d

При создании тома можно изменить тип отказоустойчивости. Например, создать двухстороннее зеркало (Two-way mirror):

New-Volume -FriendlyName S2D-Vol2-Mirror2 -StoragePoolFriendlyName "S2D on S2D-Cl" -PhysicalDiskRedundancy 1 -ResiliencySettingName "Mirror"  -FileSystem CSVFS_ReFS -Size 10GB

New-Volume в s2d powershell

Трёхстороннее зеркало (Three-way mirror):

New-Volume -FriendlyName S2D-Vol2-Mirror3 -StoragePoolFriendlyName "S2D on S2D-Cl" -PhysicalDiskRedundancy 2 -ResiliencySettingName "Mirror" -FileSystem CSVFS_ReFS -Size 1GB

Для создания тома с четностью (parity):

New-Volume -FriendlyName "S2D-Vol1-Parity" -StoragePoolFriendlyName "S2D on S2D-Cl" -FileSystem CSVFS_ReFS -Size 1GB -ResiliencySettingName Parity

Эта команда по умолчанию пытается создать Dual Parity (двойную четность, аналог RAID-6), которая строго требует минимум 4 узла в S2D.

Чтобы успешно создать Parity-диск на 3 узлах, необходимо вручную задать количество физических копий данных (PhysicalDiskRedundancy = 1)

New-VirtualDisk -FriendlyName "S2D-Vol1-Parity" -StoragePoolFriendlyName "S2D on S2D-Cl"  -Size 1GB  -ResiliencySettingName Parity  -PhysicalDiskRedundancy 1  -ProvisioningType Fixed

Посмотреть список томов с типом отказоустойчивости и уровнем избыточности можно следующей командой:

Get-VirtualDisk | ft FriendlyName, ResiliencySettingName, PhysicalDiskRedundancy

Get-VirtualDisk информация о настройках томов s2d кластере

Так можно вывести общие сведения о виртуальном томе хранения, включая эффективность хранения и общий занимаемый объем:

Get-VirtualDisk "S2D-Vol1-Parity"

Добавить в пул новый диск:

$HDDs = Get-PhysicalDisk | ? PhysicalLocation -like "*LUN 4"
Add-PhysicalDisk -PhysicalDisks $HDDs -StoragePoolFriendlyName S2D

Диски, помеченные как S2D, в консоли управления дисками более не отображаются, это нормально.

консоль управления дисками

Проверка состояния кластера S2D

Для проверки состояния кластера S2D используются следящие встроенные командлеты PowerShell.

Общий статус пула хранения:

Get-StoragePool -FriendlyName "S2D on S2D-Cl"| Select-Object FriendlyName, HealthStatus, `  OperationalStatus, Size, AllocatedSize, IsReadOnly 

Get-StoragePool состояние

Вывести состояние виртуальных томов S2D:

Get-VirtualDisk | Select-Object FriendlyName, OperationalStatus, HealthStatus, ResiliencySettingName, OperationalDetails   

Get-VirtualDisk проверить исправность томов в кластере

Если все ок HealthStatus будет равен Healhy , если нет (например, один из узлов или дисков недоступен, но без потери целостности данных) — Operating Status – Degraded, Incomplete , HealtStatus= Warning .

degraded s2d

Вывести проблемные физические диски:

Get-PhysicalDisk | Where-Object { $_.HealthStatus -ne "Healthy" } | Select-Object FriendlyName, HealthStatus, OperationalStatus, Model     

Get-PhysicalDisk найти неисправные диски

Если один из дисков вышел из строя, его нужно пометить как Retired:

Get-PhysicalDisk | Where-Object {$_.HealthStatus -ne "Healthy" -or $_.OperationalStatus -eq "Retired"}

Пометив тип как Retires следующими командами, будет запущена фоновая эвакуация данных проблемного диска на другие носители:

$FailedDisk = Get-PhysicalDisk | Where-Object {$_.HealthStatus -ne

"Healthy"}     

Set-PhysicalDisk -InputObject $FailedDisk -Usage Retired

Можно включить световой индикатор (LED) на физическом сервере для пометки инженеру, который проводит замену диска в сервере:

Для окончательного удаления старого диска из пула:

Remove-PhysicalDisk -StoragePoolFriendlyName "S2D on S2D-Cl" -PhysicalDisks $FailedDisk

Новый диск, вставленный в слот, будет автоматически обнаружен S2D и добавлен в пул хранения и запущено копирование данных.

Статус восстановления избыточности/ребалансировки в пуле можно проверить командой:

Get-StorageJob

Итак, при использовании Storage Spaces Direct из нескольких серверов с локальными дисками можно с легкостью создать программное сетевое хранилище данных. За счет технологии S2D обеспечивается как защита от одновременного выхода из строя любых двух дисков или двух серверов (4+ нодовый кластер). Кластер S2D автоматически запускает процесс перераспределения данных между оставшимися устройствами в случае обнаружения неполадок с дисками или серверами. В тестовой среде можно убедится, что при отключении двух любых дисков хранилище продолжает быть доступным, а ВМ, запущенные на нем, штатно работают. Процедура замены неисправного диска в хранилище S2D описана в следующей статье.


Предыдущая статья Следующая статья


Комментариев: 52 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)