Comparaison entre WSL 1 et WSL 2

La principale différence et les raisons de la mise à jour du sous-système Windows pour Linux de WSL 1 vers WSL 2 visent à :

  • augmenter les performances du système de fichiers,
  • prendre en charge la compatibilité complète des appels système.

WSL 2 utilise la technologie de virtualisation la plus récente et efficace pour exécuter un noyau Linux au sein d’une machine virtuelle utilitaire légère. Toutefois, WSL 2 n’est pas une expérience de machine virtuelle standard.

Comparaison des fonctionnalités

Fonctionnalité WSL 1 WSL 2
Intégration entre Windows et Linux
Temps de démarrage courts
Faible empreinte des ressources comparé aux machines virtuelles traditionnelles
Exécutions avec les versions actuelles de VMware et VirtualBox
Machine virtuelle managée
Noyau Linux complet
Compatibilité complète des appels système
Performances dans les systèmes de fichiers du système d’exploitation

Comme vous pouvez le constater dans le tableau de comparaison ci-dessus, l’architecture WSL 2 surpasse WSL 1 de plusieurs façons, à l’exception des performances dans les systèmes de fichiers du système d’exploitation.

Performances dans les systèmes de fichiers du système d’exploitation

Nous vous recommandons d’utiliser vos fichiers dans des systèmes d’exploitation, sauf si une raison particulière vous amène à ne pas le faire. Pour des performances de vitesse optimales, stockez vos fichiers dans le système de fichiers WSL si vous utilisez une ligne de commande Linux (Ubuntu, OpenSUSE, etc.). Si vous utilisez une ligne de commande Windows (PowerShell, invite de commandes), stockez vos fichiers dans le système de fichiers Windows.

Par exemple, lors du stockage de vos fichiers de projet WSL :

  • Utilisez le répertoire racine du système de fichiers Linux : \\wsl$\Ubuntu-18.04\home\<user name>\Project
  • Et non pas le répertoire racine du système de fichiers Windows : C:\Users\<user name>\Project

Toutes les distributions en cours d’exécution (wsl -l) sont accessibles via la connexion réseau. Pour y accéder, exécutez une commande [WIN+R] (raccourci clavier) ou tapez dans la barre d’adresse de l’Explorateur de fichiers \\wsl$ pour rechercher les noms de distribution respectifs et accéder à leurs systèmes de fichiers racines.

Vous pouvez également utiliser des commandes Windows dans le terminal Linux de WSL. Essayez d’ouvrir une distribution Linux (ex. Ubuntu), assurez-vous d’être dans le répertoire racine de Linux en entrant la commande suivante : cd ~. Ouvrez ensuite votre système de fichiers Linux dans l’Explorateur de fichiers en entrant (n’oubliez pas le point final)  : powershell.exe /c start .

Important

Si vous rencontrez une erreur -bash: powershell.exe: commande introuvable, consultez la page de résolution des problèmes WSL pour la résoudre.

WSL 2 est disponible uniquement dans Windows 10, version 1903, build 18362 ou ultérieure. Vérifiez votre version de Windows en sélectionnant la touche Windows + R, tapez winver et sélectionnez OK. (Ou entrez la commande ver dans l’invite de commandes Windows). Vous devrez peut-être effectuer une mise à jour vers la dernière version de Windows. Pour les builds inférieures à 18362, WSL n’est pas pris en charge du tout.

Notes

WSL 2 fonctionne avec VMware 15.5.5+ et VirtualBox 6+. Apprenez-en davantage dans notre FAQ WSL 2.

Nouveautés de WSL 2

WSL 2 est une révision majeure de l’architecture sous-jacente qui utilise la technologie de virtualisation et un noyau Linux pour activer de nouvelles fonctionnalités. Les principaux objectifs de cette mise à jour consistent à augmenter les performances du système de fichiers et à ajouter la compatibilité complète des appels système.

Architecture WSL 2

Une expérience de machine virtuelle traditionnelle peut être lente à démarrer, est isolée, consomme beaucoup de ressources et vous prend du temps pour la gérer. WSL 2 n’a pas ces attributs,

WSL 2 offre les avantages de WSL 1, y compris une intégration transparente entre Windows et Linux, des temps de démarrage courts et un faible encombrement des ressources. De plus, il ne nécessite aucune configuration ni gestion de machine virtuelle. WSL 2 utilise une machine virtuelle. Celle-ci est gérée et exécutée en arrière-plan, ce qui vous permet de jouir de la même expérience utilisateur qu’avec WSL 1.

Noyau Linux complet

Le noyau Linux dans WSL 2 est élaboré par Microsoft à partir de la dernière branche stable, en fonction de la source disponible sur kernel.org. Ce noyau a été spécialement réglé pour WSL 2, afin d’optimiser la taille et les performances pour offrir une expérience Linux exceptionnelle sur Windows. Le noyau sera géré par le biais des mises à jour Windows, ce qui signifie que vous obtiendrez les derniers correctifs de sécurité et les dernières améliorations du noyau sans avoir à gérer cela vous-même.

Le noyau Linux WSL 2 est disponible en open source. Si vous souhaitez en savoir plus, consultez le billet de blog Shipping a Linux Kernel with Windows rédigé par l’équipe qui l’a créé.

Amélioration des performances d’E/S de fichier

Les opérations gourmandes en fichiers, comme par exemple git clone, npm install, apt update, apt upgrade, sont nettement plus rapides avec WSL 2.

L’augmentation de la vitesse réelle dépend de l’application que vous exécutez et de la manière dont elle interagit avec le système de fichiers. Les versions initiales de WSL 2 s’exécutent jusqu’à 20 fois plus vite que WSL 1 lors de la décompression d’un tarball compressé, et environ 2 à 5 fois plus vite lors de l’utilisation de git clone, npm install et cmake sur divers projets.

Compatibilité complète des appels système

Les binaires Linux utilisent des appels système pour exécuter des fonctions, telles que l’accès aux fichiers, la demande de mémoire, la création de processus et bien plus encore. Alors que WSL 1 utilisait une couche de traduction créée par l’équipe WSL, WSL 2 inclut son propre noyau Linux avec compatibilité complète des appels système. Les avantages sont les suivants :

  • Un tout nouvel ensemble d’applications que vous pouvez exécuter au sein de WSL, telles que Docker et plus encore.

  • Les mises à jour du noyau Linux sont toutes immédiatement prêtes à l’emploi. (Vous n’avez pas besoin d’attendre que l’équipe WSL implémente les mises à jour et ajoute les modifications).

Exceptions pour l’utilisation de WSL 1 à la place de WSL 2

Nous vous recommandons d’utiliser WSL 2 parce qu’il offre de meilleures performances et une compatibilité à 100 % des appels système. Toutefois, il existe quelques scénarios spécifiques où vous préférerez peut-être utiliser WSL 1. Envisagez d’utiliser WSL 1 dans les cas suivants :

  • Vos fichiers de projet doivent être stockés dans le système de fichiers Windows. WSL 1 offre un accès plus rapide aux fichiers montés à partir de Windows.
    • Si vous souhaitez utiliser votre distribution WSL Linux pour accéder aux fichiers de projet dans le système de fichiers Windows et que ces fichiers ne peuvent pas être stockés dans le système de fichiers Linux, vous obtiendrez de meilleures performances dans les systèmes de fichiers du système d’exploitation en utilisant WSL 1.
  • Un projet qui requiert une compilation croisée avec des outils Windows et Linux sur les mêmes fichiers.
    • Les performances des fichiers sur les systèmes d’exploitation Windows et Linux sont plus rapides dans WSL 1 que WSL 2. Par conséquent, si vous utilisez des applications Windows pour accéder à des fichiers Linux, vous obtiendrez actuellement de meilleures performances en termes de rapidité avec WSL 1.
  • Votre projet doit accéder à un port série ou à un périphérique USB.
  • Vous avez des exigences strictes en mémoire
    • L’utilisation de la mémoire de WSL 2 augmente et diminue à mesure que vous l’utilisez. Lorsqu’un processus libère de la mémoire, celle-ci est automatiquement renvoyée à Windows. Toutefois, actuellement, WSL 2 ne libère pas encore les pages mises en cache dans la mémoire pour renvoi à Windows tant que l’instance WSL est fermée. Si vous avez des sessions WSL de longue durée ou accédez à une très grande quantité de fichiers, ce cache peut prendre de la mémoire sur Windows. Nous continuons notre travail afin d’améliorer cette expérience sur le dépôt GitHub WSL, problème 4166.

Notes

Envisagez de tester l’extension Remote WSL de VS Code pour pouvoir stocker vos fichiers de projet dans le système de fichiers Linux en utilisant les outils en ligne de commande Linux, mais également VS Code sur Windows pour créer, modifier, déboguer et exécuter votre projet dans un navigateur Internet sans les ralentissements de performances associés à l’utilisation des systèmes de fichiers Linux et Windows. En savoir plus

Accès aux applications réseau

Accès aux applications réseau Linux à partir de Windows (localhost)

Si vous créez une application réseau (par exemple, une application qui s’exécute sur un serveur SQL ou NodeJS) dans votre distribution Linux, vous pouvez y accéder à partir d’une application Windows (comme votre navigateur Internet Edge ou Chrome) à l’aide de localhost (comme vous le feriez normalement).

Toutefois, si vous exécutez une version antérieure de Windows (build 18945 ou inférieure), vous devez récupérer l’adresse IP de la machine virtuelle hôte Linux (ou effectuer une mise à jour vers la dernière version de Windows).

Pour trouver l’adresse IP de la machine virtuelle qui alimente votre distribution Linux :

  • À partir de votre distribution WSL (p. ex. Ubuntu), exécutez la commande : ip addr
  • Recherchez et copiez l’adresse sous la valeur inet de l’interface eth0.
  • Si vous avez installé l’outil grep, trouvez-la plus facilement en filtrant la sortie à l’aide de la commande : ip addr | grep eth0
  • Connectez-vous à votre serveur Linux à l’aide de cette adresse IP.

L’image ci-dessous illustre un exemple de cela avec la connexion à un serveur Node.js à l’aide du navigateur Edge.

Se connecter au serveur NodeJS avec Edge

Accès aux applications réseau Windows à partir de Linux (adresse IP de l’hôte)

Si vous souhaitez accéder à une application réseau qui s’exécute sur Windows (par exemple, une application s’exécutant sur un serveur SQL ou NodeJS) à partir de votre distribution Linux (p. ex. Ubuntu), vous devez utiliser l’adresse IP de votre ordinateur hôte. Il ne s’agit pas d’un scénario courant, mais vous pouvez suivre ces étapes pour le faire fonctionner.

  1. Obtenez l’adresse IP de votre ordinateur hôte en exécutant cette commande à partir de votre distribution Linux : cat /etc/resolv.conf
  2. Copiez l’adresse IP qui suit le terme : nameserver.
  3. Connectez-vous à n’importe quel serveur Windows à l’aide de l’adresse IP copiée.

L’image ci-dessous présente un exemple de cela avec la connexion à un serveur Node.js en cours d’exécution dans Windows via curl.

Se connecter au serveur NodeJS dans Windows via Curl

Autres considérations relatives aux réseaux

Connexion via des adresses IP distantes

Lorsque vous utilisez des adresses IP distantes pour vous connecter à vos applications, celles-ci sont traitées comme des connexions à partir du réseau local (LAN). Cela signifie que vous devez vous assurer que votre application peut accepter les connexions LAN.

Par exemple, vous devrez peut-être lier votre application à 0.0.0.0 au lieu de 127.0.0.1. Dans l’exemple d’une application Python utilisant Flask, vous pouvez procéder à l’aide de la commande : app.run(host='0.0.0.0'). Gardez à l’esprit la sécurité lorsque vous apportez ces changements, car cela permettra d’établir des connexions à partir de votre réseau local.

Accès à une distribution WSL 2 à partir de votre réseau local (LAN)

Lorsque vous utilisez une distribution WSL 1, si votre ordinateur était configuré pour être accessible via votre réseau local, les applications qui s’exécutent dans WSL sont également accessibles sur votre réseau local.

Ce n’est pas le cas par défaut dans WSL 2. WSL 2 a une carte Ethernet virtualisée avec sa propre adresse IP unique. Actuellement, pour activer ce flux de travail, vous devez suivre les mêmes étapes que pour une machine virtuelle standard. (Nous recherchons des moyens d’améliorer cette expérience.)

Voici un exemple de commande PowerShell pour ajouter un proxy de port qui écoute sur le port 4000 sur l’hôte et le connecte au port 4000 à la machine virtuelle WSL 2 avec l’adresse IP 192.168.101.100.

netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100

Accès IPv6

Les distributions WSL 2 ne peuvent actuellement pas atteindre les adresses IPv6 uniquement. Nous travaillons à l’ajout de cette fonctionnalité.

Augmentation de la taille de votre disque dur virtuel WSL 2

WSL 2 utilise un disque dur virtuel (VHD) pour stocker vos fichiers Linux. Dans WSL 2, un disque dur virtuel se présente sous la forme d’un fichier .vhdx sur votre disque dur Windows.

Le disque dur virtuel WSL 2 utilise le système de fichiers ext4. Ce disque dur virtuel est redimensionné automatiquement en fonction de vos besoins de stockage et a une taille maximale initiale de 256 Go. Si l’espace de stockage exigé par vos fichiers Linux dépasse cette taille, vous devrez peut-être l’étendre. Si la taille de votre distribution vient à dépasser 256 Go, vous verrez des erreurs indiquant que l’espace disque est insuffisant. Vous pouvez corriger cette erreur en augmentant la taille du disque dur virtuel.

Pour augmenter la taille maximale du disque dur virtuel au-delà de 256 Go :

  1. Arrêtez toutes les instances WSL à l’aide de la commande : wsl --shutdown

  2. Pour rechercher le nom du package d’installation de votre distribution ('PackageFamilyName') :

    • Dans PowerShell ('distro' étant le nom de votre distribution), entrez la commande :
    • Get-AppxPackage -Name "*<distro>*" | Select PackageFamilyName
    • Par exemple : Get-AppxPackage -Name "*Ubuntu*" | Select PackageFamilyName

    Capture d’écran de la ligne de commande Get-AppxPackage

  3. Utilisez le PackageFamilyName qui en résulte pour localiser le fichier VHD fullpath utilisé par votre installation WSL 2. Ce sera votre pathToVHD. Pour trouver le chemin complet :

    • Dans votre menu Démarrer, entrez : "%LOCALAPPDATA%" et sélectionnez pour ouvrir le dossier du fichier %LOCALAPPDATA%.
    • Ensuite, ouvrez le dossier « Packages » et recherchez le PackageFamilyName de votre distribution. Ouvrez ce dossier (par ex. CanonicalGroupLimited.Ubuntu20.04onWindows_79xxxxx).
    • Dans le dossier PackageFamilyName, ouvrez le dossier « LocalState » et recherchez le fichier <disk>.vhdx.
    • Copiez le chemin dans ce fichier, ce qui devrait ressembler à ceci : %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx
    • Par exemple, le <pathToVHD> pour Ubuntu 20.04 devrait ressembler à ceci : %LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79xxxx\LocalState\ext4.vhdx.
  4. Redimensionnez votre disque dur virtuel WSL 2 en exécutant les commandes suivantes :

    • Ouvrez l’invite de commandes Windows avec des privilèges d’administrateur et entrez :

      diskpart
      
      DISKPART> Select vdisk file="<pathToVHD>"
      
      DISKPART> detail vdisk
      
    • Examinez la sortie de la commande detail. La sortie inclut une valeur pour la taille virtuelle. Il s’agit de la valeur maximale actuelle. Convertissez cette valeur en mégaoctets. Par exemple, si la sortie detail indique Taille virtuelle : 256 Go, convertissez-la en 256000.

    • La nouvelle valeur que vous entrez doit être supérieure à cette valeur d’origine. Par exemple, pour doubler la taille virtuelle indiquée ci-dessus, vous pouvez entrer la valeur : 512000. Une fois que vous avez déterminé le nombre que vous souhaitez définir pour votre nouvelle taille (en mégaoctets), entrez la commande suivante dans votre invite de commandes Windows diskpart :

      DISKPART> expand vdisk maximum=<sizeInMegaBytes>
      
    • Quittez diskpart.

      DISKPART> exit
      
  5. Lancez votre distribution WSL (Ubuntu, par exemple).

  6. Indiquez à WSL qu’il peut augmenter la taille de son système de fichiers en exécutant les commandes suivantes à partir de votre ligne de commande de distribution WSL.

       sudo mount -t devtmpfs none /dev
       mount | grep ext4
    
    • Vous pouvez voir ce message en réponse à la première commande mount : "/dev: none already mounted on /dev." Vous pouvez ignorer ce message.
    • Copiez le nom de cette entrée, qui ressemble à ceci : /dev/sdX (X représentant tout autre caractère). Dans l’exemple suivant, la valeur de X est b :
       sudo resize2fs /dev/sdb <sizeInMegabytes>M
    
    • En utilisant l’exemple ci-dessus, nous avons remplacé la taille du disque dur virtuel par 512000, donc la commande serait : sudo resize2fs /dev/sbd 512000M.

    Notes

    Vous devrez peut-être installer resize2fs. Dans ce cas, vous pouvez utiliser cette commande pour l’installer : sudo apt install resize2fs.

    La sortie ressemble à l'exemple suivant :

       resize2fs 1.44.1 (24-Mar-2021)
       Filesystem at /dev/sdb is mounted on /; on-line resizing required
       old_desc_blocks = 32, new_desc_blocks = 38
       The filesystem on /dev/sdb is now 78643200 (4k) blocks long.
    

Important

Nous vous recommandons de ne pas modifier, déplacer ni accéder aux fichiers associés à WSL, situés dans votre dossier AppData, à l’aide d’outils ou d’éditeurs Windows. Cela pourrait entraîner la corruption de votre distribution Linux. Si vous souhaitez accéder à vos fichiers Linux à partir de Windows, vous pouvez le faire via le chemin \\wsl$\<distroName>\. Ouvrez votre distribution WSL et entrez explorer.exe . pour afficher ce dossier. Pour en savoir plus, consultez le billet de blog : Accessing Linux files from Windows.