Comme vous l'avez remarqué, WSL monte automatiquement les lecteurs Windows fixes sous le nom de fichier /mnt
par défaut.
Il y a une bonne et une mauvaise nouvelle, et une solution de contournement.
La bonne nouvelle :
Il est possible de modifier l'emplacement par défaut de l'automount en créant un fichier de type /etc/wsl.conf
dans WSL :
sudo -e /etc/wsl.conf
Normalement (mais pas dans votre cas) vous changeriez l'emplacement de l'automount en plaçant ce qui suit dans ce fichier :
[automount]
root = <new location>
La mauvaise nouvelle :
Vous ne pouvez pas changer l'emplacement pour /
. Donc /c
, /d
n'est pas possible avec cette méthode.
La solution de contournement :
La manière la plus simple de gérer cela est de créer des montages liés à partir de /mnt/<drive_letter>
a /<drive_letter>
:
sudo mount --bind /mnt/c /c -o X-mount.mkdir
Répétez cette opération pour chaque lettre de lecteur.
Un lien symbolique comme dans l'autre réponse pourrait également fonctionner, mais un montage en liaison devrait être plus robuste.
Automatisation des montages
Il n'est malheureusement pas facile de faire en sorte que cela se produise automatiquement au démarrage de la WSL. Le problème est que, lorsque vous démarrez WSL, il faut un court instant pour que le lecteur Windows devienne disponible. Ce sera un problème, que vous utilisiez un montage en liaison ou un lien symbolique avec le lecteur existant.
Sur une Ubuntu "normale", nous aurions la possibilité de demander à Systemd d'attendre que le lecteur Windows soit disponible avant de tenter le montage en liaison. Mais Systemd ne fonctionne pas sur WSL sans configuration supplémentaire (que je ne recommande pas).
Donc ce que nous devons faire c'est :
- Attendez un peu après le démarrage de WSL pour que le ou les lecteurs deviennent disponibles.
- Ensuite, montez les disques.
- De préférence, nous ne voulons pas avoir à saisir l'adresse
sudo
mot de passe à chaque fois qu'on lance WSL.
Commençons par définir les montages via la fonction normale /etc/fstab
:
sudo -e /etc/fstab
Et ajoutez chaque disque que vous voulez monter comme ceci :
/mnt/c /c none defaults,bind,X-mount.mkdir 0 0
/mnt/d /d none defaults,bind,X-mount.mkdir 0 0
Note : Le X-mount.mkdir
forcera la création du point de montage, même s'il n'existe pas. Sinon, vous devez également vous assurer que les répertoires existent.
Normalement, WSL monte automatiquement les définitions dans les fichiers /etc/fstab
Mais dans ce cas, nous ne voulons pas qu'il le fasse, car il le ferait trop tôt, avant que les lecteurs Windows ne soient disponibles.
Donc nous devons désactiver ça. Nous faisons cela à travers /etc/wsl.conf
également :
sudo -e /etc/wsl.conf
Et ajoutez ce qui suit :
[automount]
mountFsTab = false
Maintenant, nous devons appeler mount -a
comme une racine, mais un certain temps après nous commençons la WSL. Il y a deux options pour cela :
-
Sur Windows 10 :
Ce n'est pas mon option préférée, mais nous pouvons le faire en ajoutant ce qui suit à votre fichier ~/.bashrc
:
nohup bash --noprofile --norc -c "(
sleep 10
/mnt/c/Windows/System32/wsl.exe -u root -d Ubuntu-22.04 -e mount -a
) &" </dev/null >/dev/null 2>&1
説明する。
- Les parenthèses démarrent un sous-shell, de sorte que nous puissions exécuter les commandes qu'il contient en arrière-plan (avec la commande
&
), afin que Bash n'attende pas qu'il se termine avant de poursuivre.
-
nohup
s'assure qu'il ne se termine pas avec le Shell, mais plus important dans ce cas, il nous permet de supprimer toute sortie avec une redirection vers /dev/null
.
- Nous allons utiliser
sleep 10
pour être sûr. Vous pouvez probablement aller plus bas. Les montures ne seront pas disponibles immédiatement après le démarrage de la WSL, mais dans les 10 secondes environ.
- Utilisation de
wsl.exe -u root
signifie qu'il n'est pas nécessaire de saisir un mot de passe. L'ajout d'une règle à sudoers
serait également une possibilité, mais cela fonctionne tout aussi bien sur WSL.
-
Sous Windows 11 :
Je sais que vous êtes sous Windows 10 pour l'instant, mais Windows 11 rend la chose un peu plus facile. Windows 11 WSL dispose d'une nouvelle fonctionnalité qui nous permet de spécifier une commande (ou des commandes) à exécuter au démarrage de la distribution/instance WSL. Ceci, également, est configuré avec /etc/wsl.conf
:
sudo -e /etc/wsl/conf
Ajoutez ce qui suit :
[boot]
command = sleep 10 ; mount -a
C'est tout - 10 secondes après le début de l'instance, la WSL va mount -a
(en tant que racine), et les définitions que nous avons placées en /etc/fstab
doit être chargé.