Créer un espace de stockage redondant et encrypté sur Windows Serveur 2022 Core

Introduction

L'objectif est de créer un espace de stockage (par exemple pour les données des utilisateurs) sur un pool de stockage de 5 disques, avec une redondance en miroir triple, encrypté.

Le tout en PowerShell sur un serveur Windows 2022 en Core.
Clairement pas aussi rapide à faire qu'en ZFS, mais on s'en sort quand même.

Pré-requis : avoir connecté 5 disques de même capacité à un serveur Windows 2022 Core à jour.


I - Préparation des Disques

i. Initialiser les disques :

Ouvrez PowerShell.

Utilisez Get-Disk pour voir tous les disques.

Get-Disk

Nous prendrons l'exemple d'ID de disques de 1 à 5

Initialisez les disques avec

Initialize-Disk -Number <DiskNumber> -PartitionStyle GPT

Pour chaque disque non initialisé

Exemple : Pour initialiser les disques de 1 à 5 d'une traîte :

Initialize-Disk -Number 1,2,3,4,5 -PartitionStyle GPT

II - Configuration du Pool de Stockage

ii. Créer un Pool de Stockage :

Récupérer les objets des disques spécifiés plus haut :

$disks = Get-PhysicalDisk | Where-Object { $_.DeviceID -in 1,2,3,4,5 }

Créer le Pool de Stockage (on l'appellera 'RDSecureDataPool' pour ReDundant... Mais libre à vous de choisir autre chose)

New-StoragePool -FriendlyName 'RDSecureDataPool' -StorageSubsystemFriendlyName 'Windows Storage*' -PhysicalDisks $disks

Voir le pool :

Get-StoragePool -FriendlyName 'RDSecureDataPool'

Vérifier que les disques 1,2,3,4,5 sont bien dans le pool :

Get-StoragePool -FriendlyName 'RDSecureDataPool' | Get-PhysicalDisk

III - Créer un Espace de Stockage avec Réplication

i. Créer un disque virtuel avec réplication des données :

Pour une réplication triple, vous pouvez utiliser la résilience par Parité ou Miroir.
A titre personnel, je ne suis pas fan de la redondance en parité à cause de la dégradation des performances et de la lenteur d'écriture et de reconstruction des données en cas de panne.
Il faut néanmoins savoir que l'espace disque en Mirror sera beaucoup plus faible.
Utilisez la commande :

New-VirtualDisk -StoragePoolFriendlyName 'RDSecureDataPool' -FriendlyName 'EspaceNom' -ResiliencySettingName Mirror -NumberOfDataCopies 3 -Size <Size>GB -ProvisioningType Thin.

Remplacez 'EspaceNom' par le nom de votre espace de stockage et '<Size>' par la taille totale que vous souhaitez pour l'espace.

Si vous souhaitez que votre disque virtuel occupe la totalité de l'espace disponible sur le pool, il faut ajouter une étape : déterminer la taille totale disponible sur le pool.
Il faut savoir que ce n'est pas une bonne pratique en raison de la dégradation des performances au fur et à mesure que le disque virtuel se remplira. Il est recommandé de laisser un espace vierge compris entre 10 et 20% de l'espace libre sur le pool (et sur un disque aussi.).
Nous allons calculer cet espace vierge à partir des commandes permettant de déterminer la taille maximale disponible (histoire de comprendre le mécanisme) puis appliquer une diminution de 20%

$pool = Get-StoragePool -FriendlyName 'RDSecureDataPool'

$totalSpace = $pool.Size

$desiredPercentage = 0.80

$diskSize = $totalSpace * $desiredPercentage

Voici la taille correspondant à 80% de l'espace disponible sur le Pool :

echo $disksize

Créons à présent le Disque Virtuel qui occupera 80% de la taille du pool de stockage :

New-VirtualDisk -StoragePoolFriendlyName 'RDSecureDataPool' -FriendlyName 'MirrorDisk3copies' -ResiliencySettingName Mirror -NumberOfDataCopies 3 -Size $diskSize -ProvisioningType Thin

J'ai donné à mon disque virtuel le nom de 'MirrorDisk3copies' pour me souvenir rapidement du type de redondance mis en place.

A titre d'exemple, mes 5 disques de 10Go attachés au serveur ont permis de créer un pool (RDSecureDataPool) d'une taille de 47.42Go), et le disque virtuel que nous venons de créer (MirrorDisk3copies) occupe une taille de 38Go, ce qui représente 76% d'occupation. La création du pool fait perdre de l'espace, les 20% d'occupation du pool en moins aussi et la création de la partition NTFS en fera également perdre un peu plus ... :-S...

ii. Formater et Créer un Volume :

D'abord, il faut récupérer le numéro du disque virtuel que nous venons de créer.
On pourrait croire que cette information pourrait être obtenue simplement grâce à la commande Get-VirtualDisk... et bien non, pas directement.
Franchement, je n'en finis plus de me bidonner avec PowerShell. Rien n'est conçu pour être simple, logique et pragmatique.
Si vous venez de créer votre pool et votre disque virtuel, alors votre disque est 'Offline' par défaut, ce qui nous arrange bien, car ainsi, on peut récupérer le numéro du disque en une seule commande :

Get-Disk | Where-Object { $_.OperationalStatus -eq 'Offline' }

Mais si vous avez déjà créé une partition dessus, alors là, ça se complique carrément !

$vdisk = Get-VirtualDisk -FriendlyName 'MirrorDisk3copies'

$partition = $vdisk | Get-Partition

$disk = $partition | Get-Disk

$disk.Number

Grâce à la première commande, j'ai découvert que mon disque virtuel a le numéro « 6 ».
Rien d'étonnant puisque les 5 premiers sont les numéros des 5 disques du pool.

iii. Créez une partition sur le disque virtuel et la formater

Initialize-Disk -Number <DiskNumber> -PartitionStyle GPT

New-Partition -DiskNumber <DiskNumber> -UseMaximumSize -AssignDriveLetter

Format-Volume -DriveLetter <DriveLetter> -FileSystem NTFS -NewFileSystemLabel 'NomVolume'

Exemple :

Initialize-Disk -Number 6 -PartitionStyle GPT

New-Partition -DiskNumber 6 -UseMaximumSize -AssignDriveLetter

(notez la lettre du lecteur obtenue .. D dans mon cas)

Format-Volume -DriveLetter D -FileSystem NTFS -NewFileSystemLabel 'DATA'

(J'ai choisi d'appeler mon lecteur DATA)

Un mot concernant le choix du système de fichiers. Il est possible d'utiliser ReFS plutôt qu'NTFS, plus intéressant pour la redondance.
Mais ReFS est un peu plus exigeant en pré-requis, donc je ne détaille pas ici.

Voilà, à présent le lecteur D: (DATA) est utilisable.
Chaque donnée copiée dessus sera recopiée 3 fois sur notre pool de 5 disques.
Clairement pas aussi simple rapide et efficace que ZFS, mais ça se fait quand même sans trop de mal.


IV - Encrypter notre lecteur DATA

i. Installer la fonctionnalité BitLocker

Install-WindowsFeature BitLocker

Redémarrez le serveur pour terminer l'installation.

ii. Chiffrer le lecteur

Activer BitLocker sur le Volume :

Enable-BitLocker -MountPoint 'D:\' -UsedSpaceOnly -RecoveryPasswordProtector

L'encryption commence.

Pour connaître l'avancement de BitLocker :

Get-BitLockerVolume -MountPoint 'D:'

A 100% et avec un VolumeStatus à 'FullyEncrypted', c'est fini !


⬆️ Retour en haut de la page