Résolu via les commentaires, donc transfert des informations dans une réponse (avec quelques informations supplémentaires).
Les messages d’erreur WSL (relativement) récents ont été utiles dans ce cas. Le Wsl/Service/AttachDisk/MountVhd/E_ACCESSDENIED indiquait un problème de permissions d’un certain type.
Normalement, d’après ce que je peux constater, un fichier .vhdx créé via le Gestionnaire de disques sera possédé par le groupe Administrateurs local. Dans la plupart des cas, l’utilisateur local qui a installé et exécute WSL est membre de ce groupe, donc il n’y a pas de problèmes de permissions.
Cependant, dans ce cas, cela ne semble pas être le cas, puisque le changement de propriétaire du .vhdx a finalement résolu l’erreur ACCESSDENIED.
Quelques éléments supplémentaires :
Le disque virtuel doit être détaché du Gestionnaire de disques (Clic droit → Détacher le VHD) sinon l’erreur suivante se produira :
Failed to attach disk '<path_to>\wsl2-drive.vhdx' to WSL2: The process cannot access the file because it is being used by another process.
Error code: Wsl/Service/AttachDisk/MountVhd/0x80070020
Je recommande personnellement de créer le .vhdx depuis un compte PowerShell administratif en utilisant :
new-vhd -Dynamic -SizeBytes 100gb -BlockSizeBytes 1mb -path <path_to>/<name>.vhdx
La taille de bloc s’avère assez importante pour la vitesse de croissance du disque dynamique. La taille de bloc de 1 Mo est celle que WSL utilise pour ses disques virtuels intégrés.
Également, --bare est requis tant qu’il n’y a pas de système de fichiers sur le lecteur que WSL peut gérer. Votre prochaine étape sera de créer un système de fichiers sur ce disque virtuel depuis l’intérieur de WSL. Comme mentionné dans la documentation WSL, utilisez lsblk pour identifier le disque nouvellement monté.
Ce n’est pas une mauvaise idée de s’assurer complètement que vous formatez le bon périphérique en démontant, lsblk, puis remonter et lsblk à nouveau. Le nouveau périphérique sera évident dans ce cas. Bien entendu, une taille de disque unique est également un moyen valide de l’identifier.
Une fois le périphérique identifié, vous utiliserez quelque chose comme :
sudo mkfs.ext4 /dev/<device> # e.g. sde
Après avoir créé un système de fichiers sur le périphérique, tant que le système de fichiers est reconnu par WSL2 (ext4, btrfs, et probablement quelques autres), vous pouvez omettre l’option --bare pour les montages futurs.
À ce stade, c’est une bonne idée de passer à l’utilisation de --name <name> afin que la partition/le système de fichiers soit monté à un emplacement connu. Par défaut, ce sera /mnt/wsl/<name>.
Le -d Ubuntu-22.04 dans ce cas est un no-op. Je suis un peu surpris que cela ne génère pas d’erreur, mais le périphérique est toujours monté dans toutes les distributions, que vous spécifiiez une distribution avec wsl -d ou non.