Storage Spaces Direct (S2D) – новая технология распределенного хранения данных, представленная в Windows Server 2016. Благодаря использованию Storage Spaces Direct локальные диски нескольких серверов можно организовать в отказоустойчивое, масштабируемое хранилище, защищенное от выхода из строя как отдельных дисков, так и целых серверов. Цена такого «программного» хранилища получается значительно меньше, чем стоимость организации полноценного SAN или NAS, а за счет простого масштабирования (до 16 серверов и 400 дисков) и возможности использовать различных накопителей (в том числе SSD и NVMe) можно обеспечить значительную производительность.
Что такое Storage Spaces Direct (S2D)
S2D является дальнейшим развитием технологии Storage Spaces и позволяет объединить локальные диски узлов (серверов) кластер Hyper-V в пулы хранения (Storage Pool). На данных пулах можно создать виртуальные тома (диски) и использовать их в качестве общего тома кластера Cluster Shared Volume (CSV) для хранения файлов виртуальных машин Hyper-V и файловых шар SOFS-серверов. При необходимости расширить размер хранилища достаточно добавить в S2D новый сервер или накопитель. По сути, технология Storage Spaces Direct является ответом Microsoft на VMware vSAN.
Требования к Storage Spaces Direct
В S2D поддерживаются следующие типы устройств хранения:
- Обычные HDD диски (SAS)
- SATA / SAS SSD диски
- NVMe (Non-Volatile Memory Express) — SSD диски, подключенные не через классический интерфейс SATA/SAS, а через более скоростную шину PCI Express
В дальнейшем разные типы дисков можно комбинировать в различные массивы (по скорости и емкости), например, логично расположить кэш и транзакционные логи приложений на скоростных NVMe SSD, медленные и недорогие диски лучше использовать для хранения больших файлов, доступ к которым не требует повышенной производительности и т.д.
Для работы S2D нужно организовать отказоустойчивый кластер, к узлам которого выдвигаются следующие требования:
Требования к узлам кластера S2D
- Редакция Windows Server 2016 — DataCenter
- На серверах нужно установить следующие компоненты: роли Hyper-V, File Services и фичу Failover ClusteringПримечание. Не забудьте отключить SMB 1:
Remove-WindowsFeature –Name FS-SMB1 -Verbose -Restart
- Как минимум два сервера в кластере (в идеале не менее 4 для обеспечения высокой отказоустойчивости)
- Наличие дисков. Помимо системного должен иметь как минимум один физический диск на каждом узле. Все диски, которые планируется добавить в хранилище Storage Spaces Direct должны быть не размечены (не должны быть разбиты и не содержать таблицы разделов)
Итак, предполагаем, что у нас уже собран отказоустойчивый кластер из двух серверов с Windows Server 2016 (можно собрать такой кластер даже в рабочей группе).
Перед тем, как включить Storage Spaces Direct, проверьте, что ваши диски можно объединить в такой пул.
Get-PhysicalDisk –CanPool $True | Sort Model
Включаем Storage Spaces Direct
Активируем S2D с помощью командлета:
Enable-ClusterStorageSpacesDirect
Командлет отрабатывает довольно долго (около 10 минут), в течении которых будет проанализированы все доступные диски и их производительность, и автоматически создан кластерный пул. Также автоматически создаются два тира: Performance и Capacity с разным типом отказоустойчивости хранения: mirror и parity соответственно.
Всего поддерживаются 3 типа организации отказоустойчивого хранения данных:
- Mirrored (3) – данные синхронно реплицируются между 3 (или 2 в минимальной конфигурации) узлами. Высокая скорость чтения обеспечивается распределением операции между всеми серверами.
- Parity (2) – данные с хранением четности распределены между разными дисками. Данные хранятся более эффективно, т.к. не надо как в первом случае хранить несколько копий одних и тех же данных.
- Tiered (1) – используется комбинация обоих техник.
Get-Disk | select Number, FriendlyName, OperationalStatus, Size, PartitionStyle, BusType | sort Number | ft -AutoSize


«BusType»=dword:0000000b (вместо 00000008)Другие примеры использования командлетов PowerShell для управления локальными дисками приведены в статье Управление дисками и разделами из PowerShell.
-CacheState Disabled
.Откроем консоль управления кластером и убедимся, что в разделе Storage новый появился Cluster Pool 1.
Выбрав пул, можно увидеть из каких дисков он состоит.
В случае необходимости, имя пула можно изменить:
Set-StoragePool –FriendlyName “Cluster Pool 1” –NewFriendlyName “S2D”
Если нужно создать том из определенных дисков, можно воспользоваться к примеру, такой командой. Сначала выбираем все диски с LUN 3, а затем собираем из них пул.
$HDDs = Get-PhysicalDisk | ? PhysicalLocation -like "*LUN 3"
New-StoragePool -StorageSubSystemFriendlyName *Cluster* -FriendlyName S2DPool -ProvisioningTypeDefault Fixed -PhysicalDisk $HDDs
Вывести список дисков в пуле:
Get-StoragePool -FriendlyName S2D | Get-PhysicalDisk | ft PhysicalLocation
Добавить в пул новый диск:
$HDDs = Get-PhysicalDisk | ? PhysicalLocation -like "*LUN 4"
Add-PhysicalDisk -PhysicalDisks $HDDs -StoragePoolFriendlyName S2D
Диски, помеченные как S2D, в консоли управления дисками более не отображаются, это нормально.
При наличии разнородных накопителей можно использовать тиринг (не обязательно). Тир типа зеркало из SSD дисков создается так:
New-StorageTier -StoragePoolFriendlyName S2D -FriendlyName "Mirror_Tier" -MediaType SSD -ResiliencySettingName Mirror
Тир из обычных HDD с хранением четности:
New-StorageTier -StoragePoolFriendlyName S2D -FriendlyName "Parity_Tier" -MediaType HDD -ResiliencySettingName Parity
Теперь можно создать том CSV (Cluster Shared Volume):
New-Volume –StoragePoolFriendlyName S2D –FriendlyName CSV001 –PhysicalDiskRedudancy 2 -FileSystem CSVFS_ReFS -Size 200GB
Список томов и типом избыточности можно вывести так
Get-VirtualDisk | ft FriendlyName, ResiliencySettingName, PhysicalDiskRedundancy
Новый CSV том появится в консоли управления дисками.
Данный том можно использовать для размещения виртуальных машин Hyper-V или сетевого хранилища Scale-out File Server.
Итак, при использовании Storage Spaces Direct из нескольких серверов с локальными дисками можно с легкостью создать программное сетевое хранилище данных. За счет технологии S2D обеспечивается как защита от одновременного выхода из строя любых двух дисков или двух серверов (4+ нодовый кластер). Кластер S2D автоматически запускает процесс перераспределения данных между оставшимися устройствами в случае обнаружения неполадок с дисками или серверами. В тестовой среде можно убедится, что при отключении двух любых дисков хранилище продолжает быть доступным, а ВМ, запущенные на нем штатно работают. Процедура замены неисправного диска в хранилище S2D описана в следующей статье.
Штука, безусловно, хорошая — у нас есть десяток стареньких серверов с внутренними дисками. Их как раз можно объединить в логический массив S2D. Но вот то-что для этого Datacenter нужен, это не есть хорошо.
Согласен. Я тоже считаю что требовать за это лицензию Datacenter довольно опрометчиво, т.к. сильно сужает область применения технологии такого распределенного хранилища.
Применять Storage Spaces Direct смогут только крупные хостинг- и облачные провайдеры. А крупному корпоративному сектору она не будет интересна, т.к. почти у всех уже все заточено под внешние массивы с подключением через SAN или iSCSI.
Хотя использовать ее имеено для сборки такого оставшегося старья в одно большое хранилище было бы интересно…
Если Вы используете виртуализацию по полной то выходит все равно дешевле чем покупать хранилище, + меньше точек отказа. А если все совсем серьезно то покупать надо две схд, так все равно дешевле выходит, а для дома можно либо 180 дневную скачать либо торрент edition, что бы пощупать технологию.
Есть же Линуксовые продукты , типа freeNas . Из старых серверов можно собрать неплохие NAS .
А виртуальные диски для этого не подходят? Попробовал тоже самое VMware Workstation. При воде командлета Enable-ClusterStorageSpacesDirect. Ошибка нет подходящих дисков.
Проверьте, какой тип шины возвращается для этих дисков:
Get-Disk | select Number, FriendlyName, OperationalStatus, Size, PartitionStyle, BusType | sort Number | ft -AutoSize
+Диски должны быть неотформатированными…
BusType возвращается как SATA. PartitionStyle как RAW. Все равно выдает ошибку: имеет неподдерживаемый тип носителя
Выполнилие команду
get-physicaldisk
Убедитесь, что у диска отсуствет серийный номер (поле SerialNumber пустое). Он нужен, чтобы S2D собрал диски в пул.
Отредактируйте конфигурационный файл диска VMX и добавьте строку
disk.EnableUUID=”true”
Перезагрузите ВМ и убедитесь, что у диска появился серийный номер
После этого кластерное хранилище должно собраться
Доброго дня. Угуглился, решения так и не нашел. Не знаете ли вы решения как установить UUID для vhdx диска? Hyper-V на 2012r2, гость 2016.
Эксперементирую на виртуалках.
Заранее спасибо!
2Max
К сожалению, я тоже не знаю, как изменить UUID для виртуального диска. Опишите ваш сценарий, зачем вам понадоилась смена UUID, может смогу предложить какой-то другой вариант.
Хотел собрать S2D хранилище на виртуалках, проверить отказоустойчивость и тд и тп, прежде чем заказывать пару одинаковых VDS в датацентре.
Т.е. планируется перенос тестовой среды в продакш? Наверно придется добавить в S2D кластер новые диски / сервера, и после окончания синхронизации постепенно убрать старые диски их хранилища.
Планируется хотябы создать тестовую среду) Сейчас я этого не могу сделать, так как в S2D не добавляются диски, так как у них нет GUID. На ней провести тесты. Потом поднять аналогичный кластер на железе и перенести на него продакшн.
Но видимо придется все сразу делать на железе.
Чего хочу:
Взять 2 сервера DELL R640, нашпиговать ssd, в тч nvme + пара hdd и памятью.
Итого 5 raid1 на каждом сервер, SSD массив под системы, а 4 из них в S2D: , SSD под БД, SSD под хранилище Hyper-V, hdd под локальные бэкапы, 1 в резерве, возможно hot-swap или кэш, не определился еще.
На этих же серверах поднять MSSQL AlwaysOn, на них же запускать виртуальные машины.
По идее получу и HA и failover решение.
Был опыт сборки S2D стенда на базе виртуальных машин VMware с SCSI контролером в режиме Physical SCSI Bus Sharing. Соотвественно, нужно поменить один из виртуальных дисков как SSD (Vmware это умеет).
Интересая вещь, но подскажите:
Есть серверы, на каждом по одному контроллеру рейд.
Я захожу в конфигурацию — выставляю режим JBOD.
Вопрос: а куда мне ставить Windows, если у меня контроллер в режиме JBOD, на один из дисков, тогда не будет отказоустойчивости для диска с ОС!?
Да, отказоустойчивости хостовой ОС не будет. Желательно использовать RAID под диски ОС.
Т.е. отдельный RAID controller? Я ни разу не собирал в режиме JBOD, но я правильно понял, что нельзя их совмещать?
Но этот отдельный диск под ОС уже не будет участвовать в этом JBOD массиве?
JBOD и Raid взаимоисключающие вещи. Но скорее всего, раз ваш контроллер поддерживает JBOD, то и raid 1 как минимум он должен уметь создавать.
Зачем вам, собственно JBOD, понадобился?
Тут то и затык! Если собрать рейд 1 из двух дисков под ОС, а остальные диски оставить просто unassigned (или как-там называется? В разных контроллерах по разному), то Винда не даст собрать S2D, она не увидит дисков. А я надеялся на такой вариант.
Так что если хотим — S2D, то переводим контроллер в режим JBOD, получаем S2D, теряем отказоустойчивость для диска с ОС..
Или использовать встроенные средства ОС и собрать зеркало.
а зачем роль Hyper-V на нодах? Впервые вижу что она нужна.
У кого получилось подня тест.стенд на ВМ под ЕСХи?
как бы оно для этого и делалось, чтобы на хостах виртуализации было общее отказоустойчивое хранилище для ВМ
Подскажите пжл, что делать если get-physicaldisk |ft mediatype Выдает Unspecified, на подключенные диски, и не хочет enable-clusterS2d ?
на этих же нодах до этого подключались iscsi диски, может с этим связано.
попробуйте задать тип диска вручную
Set-PhysicalDisk -UniqueId "hd-uid" -MediaType SSD
илиSet-PhysicalDisk -UniqueId "hd-uid" -MediaType HDD
пробовал
Set-PhysicalDisk : Not Supported
Activity ID: {6e6a5f03-d322-4b37-b025-cea4abfa6996}
строка:1 знак:1
+ Set-PhysicalDisk -UniqueId «{808e553b-7f1c-7d53-1783-6bfa7985ca18}» — …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (StorageWMI:ROOT/Microsoft/…_StorageCmdlets) [Set-PhysicalDisk], CimException
+ FullyQualifiedErrorId : StorageWMI 1,Set-PhysicalDisk
Если в пул объединять то -MediaType меняет, а просто у дисков нет.
дополню, после объединения дисков в пул, выполнил
Get-Physicaldisk | where size -gt 506870912000 | Set-PhysicalDisk –MediaType HDD
а уже после
Enable-ClusterS2D
все прошло.
Отлично, что разобрались и оставили решение здесь 🙂
Подскажите, пожалуйста, при включении S2D процесс зависает на 15%
Enable-ClusterStorageSpacesDirect -Verbose
Выполнено 0/1
[ ]
Включение локальных дисковых пространств кластера
Ожидание затребования физических дисков
[ooooooooooooooo ]
15% Завершить
Enable-ClusterStorageSpacesDirect -Verbose
ПОДРОБНО: 2019/01/16-15:54:04.821 Подтверждение поддержки S2D на всех узлах
ПОДРОБНО: 2019/01/16-15:54:04.821 Запрос сведений о хранилище
ПОДРОБНО: 2019/01/16-15:54:05.680 Сортированные типы дисков (от быстрого к медленному): HDD. Число типов: 1
ПОДРОБНО: 2019/01/16-15:54:05.680 Подтверждение поддержки необходимого состояния кэша на узлах
ПОДРОБНО: 2019/01/16-15:54:05.696 Подтверждение поддержки необходимого состояния кэша всеми дисками
ПОДРОБНО: 2019/01/16-15:54:06.961 Отключение ресурса работоспособности
ПОДРОБНО: 2019/01/16-15:54:07.367 Создание ресурса работоспособности
ПОДРОБНО: 2019/01/16-15:54:07.524 Настройка свойств кластера
ПОДРОБНО: 2019/01/16-15:54:07.524 Задание сведений о состоянии домена сбоя по умолчанию в подсистеме кластерного
хранилища
ПОДРОБНО: 2019/01/16-15:54:07.633 Ожидание затребования физических дисков
ПОДРОБНО: 2019/01/16-15:54:10.649 Число затребованных дисков на узле "DEV-16-HC-001": 0/14
ПОДРОБНО: 2019/01/16-15:54:10.649 Число затребованных дисков на узле "DEV-16-HC-002": 0/6
В отчет тестирования кластера есть следующие строчки:
На узле «DEV-16-HC-002.apkholding.ru» найден диск с неподдерживаемым типом носителя. Поддерживаемые типы носителей: SSD и HDD.
На узле «DEV-16-HC-001.apkholding.ru» найден диск с неподдерживаемым типом носителя. Поддерживаемые типы носителей: SSD и HDD.
Перед этим по совету Василия я добавлял диски в пул и изменял тип командой
Get-Physicaldisk | where size -gt 506870912000 | Set-PhysicalDisk –MediaType HDD
В результате тип изменился на HDD, но S2D все равно не создается.
Судя по логу на первом сервере 14 дисков, на втором — 6. Возможно какие-то диски не поддерживаются. Диски физические или логические (вы не собирали из них RAID на уровне контроллера сервера?)
Что возвращает на обоих серверах команда
Get-PhysicalDisk –CanPool $True | Sort Model
В Server 2019 ужесточили требования к железу. Если посмотреть лог там будет что-то вроде «your hardware is not tested and not supported». Перед включением S2D попробуйте сделать следующее на каждой ноде кластера:
New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\ClusSvc\Parameters" -Name S2D -Value 1 -PropertyType DWORD -Force
После этого заново запустите Enable-ClusterS2D. Хочу предупредить что это неподдерживаемое решение и не рекомдуется в продуктовой среде
Диски физические, подключены через RAID контроллер Adaptec 5805 в режиме jbod.
PS C:\Windows\system32> Get-PhysicalDisk –CanPool $True | Sort Model
FriendlyName SerialNumber CanPool OperationalStatus HealthStatus Usage Size
------------ ------------ ------- ----------------- ------------ ----- ----
Hitachi HDS722020ALA330 JK1131YAGB6DRV True OK Healthy Auto-Select 1.82 TB
Hitachi HDS722020ALA330 JK1131YAG0PAES True OK Healthy Auto-Select 1.82 TB
Hitachi HDS722020ALA330 JK1121YAG5RJDS True OK Healthy Auto-Select 1.82 TB
Hitachi HDS722020ALA330 JK1131YAG0MDLS True OK Healthy Auto-Select 1.82 TB
HITACHI HUS153014VLS300 JNVLAZLC True OK Healthy Auto-Select 136.81 GB
HITACHI HUS153014VLS300 JNVG3H8C True OK Healthy Auto-Select 136.81 GB
HITACHI HUS153014VLS300 JNVLPLHC True OK Healthy Auto-Select 136.81 GB
HITACHI HUS153014VLS300 JNVES49C True OK Healthy Auto-Select 136.81 GB
HITACHI HUS153014VLS300 JNVG2X3C True OK Healthy Auto-Select 136.81 GB
HITACHI HUS153014VLS300 JNVM00RC True OK Healthy Auto-Select 136.81 GB
HITACHI HUS153014VLS300 JNVG8HMC True OK Healthy Auto-Select 136.81 GB
HITACHI HUS153014VLS300 JNVK944C True OK Healthy Auto-Select 136.81 GB
HITACHI HUS153014VLS300 JNVLXHMC True OK Healthy Auto-Select 136.81 GB
HITACHI HUS153014VLS300 JNVLYTJC True OK Healthy Auto-Select 136.81 GB
PS C:\Windows\system32> Get-PhysicalDisk –CanPool $True | Sort Model
FriendlyName SerialNumber CanPool OperationalStatus HealthStatus Usage Size
------------ ------------ ------- ----------------- ------------ ----- ----
HITACHI HUS153014VLS300 JFYUGUNC True OK Healthy Auto-Select 136.81 GB
HITACHI HUS153014VLS300 JFYU9R7C True OK Healthy Auto-Select 136.81 GB
HITACHI HUS153014VLS300 JFYUGTTC True OK Healthy Auto-Select 136.81 GB
HITACHI HUS153014VLS300 JFYUNNNC True OK Healthy Auto-Select 136.81 GB
SEAGATE ST3146356SS 3QN4NGRS00009130KJU9 True OK Healthy Auto-Select 136.61 GB
SEAGATE ST3146356SS 3QN4Q51X00009130KJYH True OK Healthy Auto-Select 136.61 GB
Возвращает ли какие-то ошибки тест валидации кластера?
У меня была похожая проблема, в журнале встречалась ошибка Even ID 200 «Windows was unable to read the disk header for physical disk «.
В моем случае, оказалось, что хранилище не собиралось из-за того, что на трех серверах WS2016 была установлена в режиме Legacy, после переустановки ОС в нативном UEFI режиме проблема пропала.
Тест валидации показывает такие ошибки:
На узле «DEV-16-HC-002.apkholding.ru» найден диск с неподдерживаемым типом носителя. Поддерживаемые типы носителей: SSD и HDD.
На узле «DEV-16-HC-001.apkholding.ru» найден диск с неподдерживаемым типом носителя. Поддерживаемые типы носителей: SSD и HDD.
Железо старое, UEFI не поддерживается.
1) Есть ли ошибки в тесте:
test-cluster -include "Storage Spaces Direct"
2) Обновите по максимому firmware и драйвера (мать, контроллеры) на серверах.
Также возможно, что ваш контроллер просто не поддерживается S2D.
Требования к железу для S2D описаны в статье:
_https://docs.microsoft.com/en-us/windows-server/storage/storage-spaces/storage-spaces-direct-hardware-requirements
Количество дисков на нодах должно быть одинаковым. Иначе у вас будет использоваться только наименьшее количество дисков
Отказ двух дисков или двух серверов поддерживается только для лунов с резервированием Dual-Parity или Three-Way-Mirror. В остальных случаях — 1 диск/нода.
Еще хотелось бы сказать пару слов про файловую систему: если очень хочется использовать ReFS и держать виртуальные машины в кластере (HCI сценарий), необходимо чтобы количество лунов было равно количеству серверов, и необходимо сделать так, чтобы ВМ использующие некий лун должны располагаться на ноде владельце луна — при использовании ReFS CSV работает в режиме FileSystemRedirected, что означает: все операции записи на лун будут идти через его владельца
— Не рабочий трюк.
Вот рабочий
(get-cluster).S2DBusTypes=”0x100″
Спасибо! У меня кроме шины ещё MediaType был Unspecified, в итоге две волшебные команды помогли
Get-Physicaldisk | where CanPool -eq True | Set-PhysicalDisk -MediaType HDD
(get-cluster).S2DBusTypes=»0x100″
Спасибо огромное за статью!
Не знаете как по надежности данное решение?
особенно в сравнении с vmware vsan?
спасибо!
В моем окружении есть примеры внедрения как S2D, так и VSAN.
На мой взгляд VSAN навороченее и удобнее в управлении, но цена…
А как вариант подешевле S2D вполне себе ничего…
Спасибо!
В целях изучения что-то не получается развернуть Storage Spaces Direct в Windows Server 2019 в виртуальной среде на базе VMware vSphere 7. При создании пула носителей возникает ошибка:
В подробных сведениях неработающего кластерного пула следующая информация:
Что я только не пытался делать, но ошибка всегда одна и та же.
Исходная информация, и что было проделано:
— в качестве физических накопителей выступают три Intel DC S3700 200 Gb (SSDSC2BA200G301);
— на всех накопителях созданы хранилища с VMFS 6;
— перебраны различные комбинации настроек Virtual Device Node (LSI Logic SAS, VMware Paravirtual), SCSI Bus Sharing (Physical, Virtual), Disk Mode (Independent — Persistent), Disk Provisioning (Thick Provision Eager Zeroed).
Не совсем понял конфигурацию.
Диски используются только под VMFS хранилища? Если да — нужно создать на них виртуальные vmdk диски через настройки ваших VM. Вы это сделали? Windows увидела тома?
А скажите пожалуйста, почему нужно отключать SMB 1.0 ?
Подскажите пожалуйста, если используется 3 сервера, и в них диски под S2D планируются такие:
в одном 4 SDD по 8TB
во втором 2 SDD по 2TB
в третьем 2 SSD по 1TB и 2 HDD по 2TB
то S2D соберется? Будет ли использоваться все пространство? Или нужно все диски разнести по серверам максимально равномерно?
Или как вообще правильно планировать размещение дисков на серверах под S2D?
Отвечаю себе. Да, кол-во дисков должно быть одинаковым на всех серверах
https://docs.microsoft.com/ru-ru/windows-server/storage/storage-spaces/drive-symmetry-considerations
Здравствуйте, есть 4 SATA высокоскоростных и 4 sas диска(2 сервера с такой конфигурацией), куда ставить ОС на какой диск? Чтобы отказоустойчивость была тоже??
Для системных дисков ОС не получится использовать s2d, она только для оказоусточйивого хранения данных.
Решите, можно ли взять два из ваших дисков под обычный raid1 для системного драйва.
Добрый день!
Что произойдёт с виртуальной машиной на ноде, если нода отказала?