Since this is somewhat related and my search for answers brought me here, I'll revive this thread.
As mentioned, you cannot boot from storage spaces, no way around that, but you can do the next best thing:
You can get Windows Server to [UEFI] boot from a software RAID 1 and use the remaining unpartitioned space in storage spaces however you like.
My setup: 4 x 1TB NVME drives that I want to boot Windows Server 2022 from; no other disks in that system. OS needs to be mirrored. Data on storage spaces virtual disks.
**
DISCLAIMER:
Before you start should have proficient knowledge about windows software raid and storage spaces, and you should know how to clone disks. Best create a VM and play around – that’s what I did. Caveat: If one of the disks fails you might need to manually select another plex in boot manager and or BIOS upon boot.
Everything that is done here in disk manager can be done using diskpart of course. I’m aware this process can be optimized + streamlined, but I couldn’t be bothered to test that, and this worked for me.
DO NOT BLINDLY COPY + PASTE !**
So here’s a loose how-to, assuming you have a setup with 4 drives:
- Install Windows Server on one of the disks, let’s call it A; leave disks B,C,D alone for now. During setup, create a partition, say 128GB and install it into that partition. In my case that should leave plenty of unpartitioned space on A.
Boot into Windows, finish up with the basics, don’t do more than that for now (do the rest when finished here). - Boot a Linux ISO, and clone the disk you initially installed windows server to, onto the remaining 4 disks. Alternatively use any other tools you have. You should now have 4 identical disks. it's probably enough to clone the first 1 GB of the disk, and just fix the GPT backup.
- Boot into your Windows Server, open disk manager. You should see your boot drive + 3 clones, with the 3 clones marked as offline because of UUID conflicts.
- Resolve UUID disk conflicts using dispart, do this for every offline disk; replace <?> with disk number.
read detailed how-to here: https://infohub.delltechnologies.com/l/dell-powerstore-microsoft-hyper-v-best-practices/change-a-disk-id-with-diskpart-3/DISKPART>
select disk <?>uniqueid diskuniqueid disk id=<newid> - open Disk Manager, set all offline disks to online; delete all clones (only the clones) of the system partition on your disks B,C,D, leave EFI FAT32 and recovery partitions alone. You should now have the original disk A with your 128GB system partition and 3 disks B,C,D with a “hole” of 128GB in the partition table.
- in Disk Manager, right click your system partition on disk A, select “create mirror” and go through the creation wizard, selecting all 3 disks as mirrors. The drives will be converted to dynamic drives – that’s ok. The original system partition is now being cloned into the correct places on drives B,C,D, with all other partitions around it untouched. Wait for this process to finish.
- Windows will automatically fix the boot loader on drive A to show the other windows installs (plex 2,3,4) on the mirrored partitions. However, you it will not fix the boot loader on the other drives, so we need to do that manually.
- fix the boot loader on drives B,C,D so you can boot from any of them in case of a faulty drive. easiest way for me was to (again) use a Linux ISO to boot and clone the FAT32 EFI partition from drive A to B,C,D - overwriting it there on those drives.
- At this point, you should be able to boot from any of the drives. Windows software RAID will only keep the system drive synced across the disks, the EFI partition and recovery partitions will not be touched by it. If you make any changes to those partitions (usually never happens), you will need to sync (read: clone) them manually.
- Let the fun begin: you can now create a storage spaces storage pool across all disks A,B,C,D in the remaining empty, unpartitioned space of those disks and configure it to your liking. I used powershell for that, for example:
$SubSysName = (Get-StorageSubSystem).FriendlyName
New-StoragePool -FriendlyName SP0 -StorageSubsystemFriendlyName $SubSysName -PhysicalDisks (Get-PhysicalDisk | Where-Object FriendlyName -like *)
New-VirtualDisk -StoragePoolFriendlyName SP0 -FriendlyName VD0 -ResiliencySettingName Mirror -NumberOfDataCopies 2 -ProvisioningType Fixed -Verbose -NumberOfColumns 2 -Size 256GB
## [ … create more storage spaces virtual disks or whatever you need ] ##
- disk manager should now show a new partition in the previously unpartitioned space on your drives. It’s a protective partition with storage spaces inside. aside from that, you should now also see your storage spaces virtual disks that you can either mount or use in hyper-v VMs, in case you created some right away).
Here's a screenshot of disk manager on my test VM with 2 x 64 GB disks. I used all the empty space that remained to create one storage spaces virtual disk.