1 votes

Comment utiliser un lecteur Windows sans le répertoire /mnt/ dans WSL

J'utilise Ubuntu 22.04 LTS sur WSL2 via Windows 10 Pro.

Actuellement, si je veux passer au système Windows D: ou un autre lecteur Windows, je dois utiliser un chemin d'accès tel que /mnt/d/ . Exemple :

cd /mnt/d/test_folder

Je veux pouvoir utiliser comme /d à la place :

cd /d/test_folder

Comment puis-je le faire ?

0voto

NotTheDr01ds Points 5135

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é.

0voto

phanaz Points 13

Créer un lien symbolique

Vous pourriez modifier le montage, mais je ne suis pas sûr que cela entraîne des conséquences négatives ou des problèmes, je préférerais donc créer un lien symbolique :

ln -s /mnt/d /d

Cela crée un lien symbolique /d auquel vous pouvez accéder comme n'importe quel répertoire (par exemple, en listant le contenu ls -l /d ), mais il s'agit uniquement d'un lien vers le site de l /mnt/d répertoire. Ainsi, le montage du D: la partition reste sous /mnt/d .

Si vous avez un dossier auquel vous devez accéder fréquemment, il peut également être judicieux de créer un lien symbolique supplémentaire pour ce dossier :

ln -s /mnt/d/my_data/work /work

Voici le lien /work est créé directement dans la racine, et est un lien vers le répertoire /mnt/d/my_data/work comme décrit ci-dessus. Ainsi, lorsque vous accédez à /work vous pouvez accéder au dossier nommé, y compris tous ses sous-éléments.

Supprimer Symlink

Si vous n'avez plus besoin d'un lien symbolique, vous pouvez simplement le supprimer :

par exemple rm /work

Cela ne supprimera que le lien symbolique, pas votre dossier actuel. work ou son contenu.

Si vous exécutez par exemple rm /work/sound.mp3 vous supprimez le fichier sound.mp3 de la travail il n'existera plus dans l'explorateur Windows dans le dossier correspondant.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X