Confronto tra WSL 1 e WSL 2Comparing WSL 1 and WSL 2

I motivi principali per cui è opportuno eseguire l'aggiornamento del sottosistema Windows per Linux da WSL 1 a WSL 2 sono:The primary difference and reasons for updating the Windows Subsystem for Linux from WSL 1 to WSL 2 are to:

  • Aumentare le prestazioni del file systemincrease file system performance,
  • Supportare la compatibilità completa con le chiamate di sistema.support full system call compatibility.

WSL 2 usa la migliore tecnologia di virtualizzazione più recente per eseguire un kernel Linux all'interno di una macchina virtuale di utilità leggera.WSL 2 uses the latest and greatest in virtualization technology to run a Linux kernel inside of a lightweight utility virtual machine (VM). WSL 2 non offre tuttavia un'esperienza di macchina virtuale tradizionale.However, WSL 2 is not a traditional VM experience.

Funzionalità a confrontoComparing features

FunzionalitàFeature WSL 1WSL 1 WSL 2WSL 2
Integrazione tra Windows e LinuxIntegration between Windows and Linux
Tempi di avvio rapidiFast boot times
Footprint di risorse ridottoSmall resource foot print
Esecuzione con le versioni correnti di VMware e VirtualBoxRuns with current versions of VMware and VirtualBox
Macchina virtuale gestitaManaged VM
Kernel Linux completoFull Linux Kernel
Compatibilità completa con le chiamate di sistemaFull system call compatibility
Prestazioni tra i file system dei sistemi operativiPerformance across OS file systems

Come è possibile dedurre dalla tabella di confronto precedente, l'architettura di WSL 2 offre prestazioni migliori rispetto a quella di WSL 1 sotto diversi punti di vista, ad eccezione del caso in cui si usino i file system di più sistemi operativi.As you can tell from the comparison table above, the WSL 2 architecture outperforms WSL 1 in several ways, with the exception of performance across OS file systems.

Prestazioni tra i file system dei sistemi operativiPerformance across OS file systems

È consigliabile evitare di usare i propri file con più sistemi operativi, a meno che non lo si faccia per un motivo specifico.We recommend against working across operating systems with your files, unless you have a specific reason for doing so. Per la massima velocità delle prestazioni, quindi, se usi una riga di comando di Linux (Ubuntu, OpenSUSE e così via) dovresti archiviare i file nel file system di WSL,For the fastest performance speed, store your files in the WSL file system if you are working in a Linux command line (Ubuntu, OpenSUSE, etc). mentre se usi una riga di comando di Windows (PowerShell, prompt dei comandi), dovresti archiviare i file nel file system di Windows.If you're working in a Windows command line (PowerShell, Command Prompt), store your files in the Windows file system.

Ad esempio, quando archivi i file di progetto WSL:For example, when storing your WSL project files:

  • Usa la directory radice del file system Linux: \\wsl$\Ubuntu-18.04\home\<user name>\ProjectUse the Linux file system root directory: \\wsl$\Ubuntu-18.04\home\<user name>\Project
  • Non la directory radice del file system Windows: C:\Users\<user name>\ProjectNot the Windows file system root directory: C:\Users\<user name>\Project

Puoi accedere al file system radice Linux con le app e gli strumenti di Windows, come Esplora file.You can access your Linux root file system with Windows apps and tools like File Explorer. Prova ad aprire una distribuzione Linux, ad esempio Ubuntu, e assicurati di trovarti nella home directory di Linux immettendo il comando seguente: cd ~.Try opening a Linux distribution (like Ubuntu), be sure that you are in the Linux home directory by entering this command: cd ~. Apri quindi il file system Linux in Esplora file immettendo (non dimenticare il punto finale) : explorer.exe .Then open your Linux file system in File Explorer by entering (don't forget the period at the end): explorer.exe .

WSL 2 è disponibile solo in Windows 10 versione 1903, build 18362 o successive.WSL 2 is only available in Windows 10, Version 1903, Build 18362 or higher. Controlla la versione di Windows selezionando il tasto WINDOWS + R, digita winver e seleziona OK.Check your Windows version by selecting the Windows logo key + R, type winver, select OK. In alternativa, immetti il comando ver nel prompt dei comandi di Windows.(Or enter the ver command in Windows Command Prompt). Potresti dover aggiornare alla versione più recente di Windows.You may need to update to the latest Windows version. WSL non è supportato nelle build inferiori alla 18362.For builds lower than 18362, WSL is not supported at all.

Nota

WSL 2 funzionerà con VMware 15.5.5 e versioni successive e VirtualBox 6 e versioni successive.WSL 2 will work with VMware 15.5.5+ and VirtualBox 6+. Per altre informazioni, fai riferimento alle domande frequenti su WSL 2.Learn more in our WSL 2 FAQs.

Novità in WSL 2What's new in WSL 2

WSL 2 è un'importante revisione dell'architettura sottostante e usa la tecnologia di virtualizzazione e un kernel Linux per abilitare nuove funzionalità.WSL 2 is a major overhaul of the underlying architecture and uses virtualization technology and a Linux kernel to enable new features. Questo aggiornamento ha due obiettivi principali: ottimizzare le prestazioni dei file system e aggiungere la compatibilità completa con le chiamate di sistema.The primary goals of this update are to increase file system performance and add full system call compatibility.

Architettura di WSL 2WSL 2 architecture

Un'esperienza di macchina virtuale tradizionale può risultare lenta all'avvio, è isolata, usa molte risorse e richiede tempo per la gestione.A traditional VM experience can be slow to boot up, is isolated, consumes a lot of resources, and requires your time to manage it. WSL 2 non ha queste caratteristiche.WSL 2 does not have these attributes.

WSL 2 offre i vantaggi di WSL 1, inclusa la perfetta integrazione tra Windows e Linux, tempi di avvio rapidi, un footprint di risorse ridotto e nessuna configurazione o gestione della macchina virtuale.WSL 2 provides the benefits of WSL 1, including seamless integration between Windows and Linux, fast boot times, a small resource footprint, and requires no VM configuration or management. Anche se WSL 2 usa una macchina virtuale, questa viene gestita ed eseguita dietro le quinte offrendo la stessa esperienza utente di WSL 1.While WSL 2 does use a VM, it is managed and run behind the scenes, leaving you with the same user experience as WSL 1.

Kernel Linux completoFull Linux kernel

Il kernel Linux in WSL 2 è stato creato da Microsoft a partire dall'ultimo ramo stabile, sulla base del codice sorgente disponibile in kernel.org. Questo kernel è stato adattato in modo specifico per WSL 2, ottimizzando le dimensioni e le prestazioni per offrire un'esperienza straordinaria di Linux in Windows.The Linux kernel in WSL 2 is built by Microsoft from the latest stable branch, based on the source available at kernel.org. This kernel has been specially tuned for WSL 2, optimizing for size and performance to provide an amazing Linux experience on Windows. Il kernel verrà gestito tramite gli aggiornamenti di Windows. Riceverai pertanto le correzioni per la sicurezza e i miglioramenti del kernel più recenti senza doverli gestire autonomamente.The kernel will be serviced by Windows updates, which means you will get the latest security fixes and kernel improvements without needing to manage it yourself.

Il kernel Linux in WSL 2 è open source.The WSL 2 Linux kernel is open source. Per saperne di più, consulta il post di blog Shipping a Linux Kernel with Windows (Distribuzione di un kernel Linux con Windows) scritto dal team che lo ha creato.If you'd like to learn more, check out the blog post Shipping a Linux Kernel with Windows written by the team that built it.

Miglioramento delle prestazioni di I/O dei fileIncreased file IO performance

Le operazioni a elevato utilizzo di file, ad esempio git clone, npm install, apt update, apt upgrade e altre ancora, sono tutte molto più veloci con WSL 2.File intensive operations like git clone, npm install, apt update, apt upgrade, and more are all noticeably faster with WSL 2.

L'aumento effettivo della velocità dipende dall'app in esecuzione e dal modo in cui interagisce con il file system.The actual speed increase will depend on which app you're running and how it is interacting with the file system. Le versioni iniziali di WSL 2 vengono eseguite con una velocità 20 volte superiore rispetto a WSL 1 quando viene decompresso un tarball e circa 2-5 volte superiore quando vengono usate operazioni git clone, npm install e cmake in diversi progetti.Initial versions of WSL 2 run up to 20x faster compared to WSL 1 when unpacking a zipped tarball, and around 2-5x faster when using git clone, npm install and cmake on various projects.

Compatibilità completa con le chiamate di sistemaFull system call compatibility

I file binari Linux usano chiamate di sistema per eseguire funzioni quali l'accesso ai file, la richiesta di memoria, la creazione di processi e altro ancora.Linux binaries use system calls to perform functions such as accessing files, requesting memory, creating processes, and more. Mentre WSL 1 usa un livello di conversione creato dal team WSL, WSL 2 include il proprio kernel Linux con compatibilità completa con le chiamate di sistema.Whereas WSL 1 used a translation layer that was built by the WSL team, WSL 2 includes its own Linux kernel with full system call compatibility. Questa caratteristica offre i vantaggi seguenti:Benefits include:

  • Un nuovo set completo di app che è possibile eseguire in WSL, ad esempio Docker e altre ancora.A whole new set of apps that you can run inside of WSL, such as Docker and more.

  • Tutti gli aggiornamenti del kernel Linux immediatamente pronti per l'uso.Any updates to the Linux kernel are immediately ready for use. Non è necessario attendere che il team di WSL implementi gli aggiornamenti e aggiunga le modifiche.(You don't have to wait for the WSL team to implement updates and add the changes).

WSL 2 usa una quantità inferiore di memoria all'avvioWSL 2 uses a smaller amount of memory on startup

WSL 2 usa una macchina virtuale di utilità leggera in un kernel Linux reale con un footprint di memoria ridotto.WSL 2 uses a lightweight utility VM on a real Linux kernel with a small memory footprint. La macchina virtuale di utilità allocherà la memoria supportata per l'indirizzo virtuale all'avvio.The utility will allocate Virtual Address backed memory on startup. È configurata in modo da essere avviata con una percentuale ridotta della memoria totale richiesta per WSL 1.It is configured to start with a smaller proportion of your total memory that what was required for WSL 1.

Eccezioni per l'uso di WSL 1 in alternativa a WSL 2Exceptions for using WSL 1 rather than WSL 2

È in genere consigliabile usare WSL 2 perché offre prestazioni più veloci e massima compatibilità con le chiamate di sistema.We recommend that you use WSL 2 as it offers faster performance and 100% system call compatibility. Esistono tuttavia alcuni scenari specifici in cui è preferibile usare WSL 1.However, there are a few specific scenarios where you might prefer using WSL 1. Valuta l'opportunità di usare WSL 1 se:Consider using WSL 1 if:

  • I tuoi file di progetto devono essere archiviati nel file system Windows.Your project files must be stored in the Windows file system. WSL 1 offre un accesso più rapido ai file montati da Windows.WSL 1 offers faster access to files mounted from Windows.
    • Se usi la distribuzione Linux di WSL per accedere ai file di progetto nel file system Windows e questi file non possono essere archiviati nel file system Linux, otterrai prestazioni più veloci nel passaggio tra i file system dei sistemi operativi usando WSL 1.If you will be using your WSL Linux distribution to access project files on the Windows file system, and these files cannot be stored on the Linux file system, you will achieve faster performance across the OS files systems by using WSL 1.
  • Il tuo progetto richiede una compilazione incrociata con l'esecuzione di strumenti di Windows e Linux sugli stessi file.A project which requires cross-compilation using both Windows and Linux tools on the same files.
    • Le prestazioni dei file nel passaggio tra i sistemi operativi Windows e Linux sono più veloci in WSL 1 rispetto a WSL 2. Se pertanto usi applicazioni Windows per accedere a file di Linux, otterrai migliori prestazioni con WSL 1.File performance across the Windows and Linux operating systems is faster in WSL 1 than WSL 2, so if you are using Windows applications to access Linux files, you will currently achieve faster performance with WSL 1.

Nota

Valuta l'opportunità di provare l'estensione Remote - WSL di VS Code per consentire l'archiviazione dei file di progetto nel file system Linux tramite gli strumenti da riga di comando di Linux. Può anche essere utile usare VS Code in Windows per creare, modificare, sottoporre a debug o eseguire il progetto in un browser Internet, senza alcun rallentamento delle prestazioni associato al passaggio tra file system Linux e Windows.Consider trying the VS Code Remote WSL Extension to enable you to store your project files on the Linux file system, using Linux command line tools, but also using VS Code on Windows to author, edit, debug, or run your project in an internet browser without any of the performance slow-downs associated with working across the Linux and Windows file systems. Altre informazioni.Learn more.

Accesso alle applicazioni di reteAccessing network applications

Accesso alle app di rete Linux da Windows (localhost)Accessing Linux networking apps from Windows (localhost)

Se stai creando un'app di rete (ad esempio un'app in esecuzione su un server NodeJS o su SQL Server) nella distribuzione Linux, puoi accedervi da un'app di Windows (come il browser Internet Microsoft Edge o Chrome) usando localhost, proprio come faresti normalmente.If you are building a networking app (for example an app running on a NodeJS or SQL server) in your Linux distribution, you can access it from a Windows app (like your Edge or Chrome internet browser) using localhost (just like you normally would).

Se tuttavia stai usando una versione precedente di Windows (Build 18945 o precedente), dovrai ottenere l'indirizzo IP della macchina virtuale host Linux (o l'aggiornamento alla versione più recente di Windows).However, if you are running an older version of Windows (Build 18945 or less), you will need to get the IP address of the Linux host VM (or update to the latest Windows version).

Per trovare l'indirizzo IP della macchina virtuale che supporta la distribuzione Linux:To find the IP address of the virtual machine powering your Linux distribution:

  • Dalla distribuzione di WSL (ovvero Ubuntu), esegui questo comando: ip addrFrom your WSL distribution (ie Ubuntu), run the command: ip addr
  • Trova e copia l'indirizzo sotto il valore inet dell'interfaccia eth0.Find and copy the address under the inet value of the eth0 interface.
  • Se hai installato lo strumento grep, puoi trovarlo più facilmente filtrando l'output con questo comando: ip addr | grep eth0If you have the grep tool installed, find this more easily by filtering the output with the command: ip addr | grep eth0
  • Connettiti al server Linux usando questo indirizzo IP.Connect to your Linux server using this IP address.

Nell'immagine seguente viene illustrato un esempio di questa procedura con la connessione a un server Node.js tramite il browser Edge.The picture below shows an example of this by connecting to a Node.js server using the Edge browser.

Connettiti al server NodeJS con Edge

Accesso alle app di rete Windows da Linux (IP host)Accessing Windows networking apps from Linux (host IP)

Se vuoi accedere a un'app di rete in esecuzione in Windows (ad esempio su un server NodeJS o su SQL Server) dalla distribuzione Linux (ovvero Ubuntu), devi usare l'indirizzo IP del computer host.If you want to access a networking app running on Windows (for example an app running on a NodeJS or SQL server) from your Linux distribution (ie Ubuntu), then you need to use the IP address of your host machine. Anche se non si tratta di uno scenario comune, puoi seguire questa procedura per ottenere il risultato desiderato.While this is not a common scenario, you can follow these steps to make it work. - Ottieni l'indirizzo IP del computer host eseguendo questo comando dalla distribuzione Linux: cat /etc/resolv.confObtain the IP address of your host machine by running this command from your Linux distribution: cat /etc/resolv.conf - Copia l'indirizzo IP riportato dopo nameserver.Copy the IP address following the term: nameserver. - Connettiti a un server Windows usando l'indirizzo IP copiato.Connect to any Windows server using the copied IP address.

Nell'immagine seguente viene illustrato un esempio di questa procedura con la connessione a un server Node.js in esecuzione in Windows tramite curl.The picture below shows an example of this by connecting to a Node.js server running in Windows via curl.

Connettiti al server NodeJS in Windows tramite Curl

Altre considerazioni sulle funzionalità di reteAdditional networking considerations

Connessione tramite indirizzi IP remotiConnecting via remote IP addresses

Quando vengono usati indirizzi IP remoti per la connessione alle applicazioni, verranno considerati come connessioni dalla rete locale (LAN).When using remote IP addresses to connect to your applications, they will be treated as connections from the Local Area Network (LAN). Devi pertanto verificare che l'applicazione possa accettare connessioni LAN.This means that you will need to make sure your application can accept LAN connections.

Potresti ad esempio dover associare l'applicazione a 0.0.0.0 anziché a 127.0.0.1.For example, you may need to bind your application to 0.0.0.0 instead of 127.0.0.1. Ad esempio, in un'app Python con Flask questa operazione può essere eseguita con il comando app.run(host='0.0.0.0').In the example of a Python app using Flask, this can be done with the command: app.run(host='0.0.0.0'). Tieni conto della sicurezza quando apporti queste modifiche, poiché in questo modo verranno consentite connessioni dalla LAN.Please keep security in mind when making these changes as this will allow connections from your LAN.

Accesso a una distribuzione di WSL 2 dalla rete locale (LAN)Accessing a WSL 2 distribution from your local area network (LAN)

Quando viene usata una distribuzione di WSL 1, se il computer è stato configurato per l'accesso dalla rete LAN, anche le applicazioni eseguite in WSL saranno accessibili dalla LAN.When using a WSL 1 distribution, if your computer was set up to be accessed by your LAN, then applications run in WSL could be accessed on your LAN as well.

Questo non è il caso predefinito in WSL 2.This isn't the default case in WSL 2. WSL 2 dispone di una scheda Ethernet virtualizzata con un indirizzo IP univoco.WSL 2 has a virtualized ethernet adapter with its own unique IP address. Attualmente, per abilitare questo flusso di lavoro, devi eseguire gli stessi passaggi previsti per una normale macchina virtuale.Currently, to enable this workflow you will need to go through the same steps as you would for a regular virtual machine. È in corso uno studio per migliorare questa esperienza.(We are looking into ways to improve this experience.)

Ecco un esempio di comando di PowerShell per aggiungere un proxy della porta che si trova in ascolto sulla porta 4000 dell'host e che lo connette alla porta 4000 della macchina virtuale WSL 2 con l'indirizzo IP 192.168.101.100.Here's an example PowerShell command to add a port proxy that listens on port 4000 on the host and connects it to port 4000 to the WSL 2 VM with IP address 192.168.101.100.

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

Accesso IPv6IPv6 access

Attualmente le distribuzioni di WSL 2 non possono raggiungere indirizzi solo IPv6.WSL 2 distributions currently cannot reach IPv6-only addresses. Si sta lavorando per aggiungere questa funzionalità.We are working on adding this feature.

Espansione delle dimensioni del disco rigido virtuale di WSL 2Expanding the size of your WSL 2 Virtual Hard Disk

WSL 2 usa un disco rigido virtuale (VHD) per archiviare i file di Linux.WSL 2 uses a Virtual Hard Disk (VHD) to store your Linux files. In WSL 2, un disco rigido virtuale è rappresentato nel disco rigido di Windows come file .vhdx.In WSL 2, a VHD is represented on your Windows hard drive as a .vhdx file.

Il disco rigido virtuale di WSL 2 usa il file system ext4.The WSL 2 VHD uses the ext4 file system. Questo disco viene ridimensionato automaticamente per soddisfare le tue esigenze di archiviazione e ha una dimensione massima iniziale di 256 GB.This VHD automatically resizes to meet your storage needs and has an initial maximum size of 256GB. Se lo spazio di archiviazione richiesto dai file Linux supera questa dimensione, può essere necessario espanderlo.If the storage space required by your Linux files exceeds this size you may need to expand it. Se le dimensioni della distribuzione superano i 256 GB, vengono visualizzati errori per segnalare che lo spazio su disco è esaurito.If your distribution grows in size to be greater than 256GB, you will see errors stating that you've run out of disk space. Puoi risolvere il problema espandendo le dimensioni del disco rigido virtuale.You can fix this error by expanding the VHD size.

Per espandere le dimensioni massime del disco rigido virtuale oltre i 256 GB:To expand your maximum VHD size beyond 256GB:

  1. Termina tutte le istanze di WSL usando questo comando: wsl --shutdownTerminate all WSL instances using the command: wsl --shutdown

  2. Trova il nome del pacchetto di installazione della distribuzione ("PackageFamilyName")Find your distribution installation package name ('PackageFamilyName')

    • Usando PowerShell digita il comando seguente (dove "distro" è il nome della distribuzione):Using PowerShell (where 'distro' is your distribution name) enter the command:
    • Get-AppxPackage -Name "*<distro>*" | Select PackageFamilyName
  3. Individua il fullpath del file del disco rigido virtuale usato dall'installazione di WSL 2, che sarà pathToVHD:Locate the VHD file fullpath used by your WSL 2 installation, this will be your pathToVHD:

    • %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx
  4. Ridimensiona il disco rigido virtuale di WSL 2 completando i comandi seguenti:Resize your WSL 2 VHD by completing the following commands:

    • Apri il prompt dei comandi di Windows con privilegi di amministratore e immetti quanto segue:Open Windows Command Prompt with admin privileges and enter:

      diskpart
      DISKPART> Select vdisk file="<pathToVHD>"
      DISKPART> detail vdisk
      
    • Esaminare l'output del comando detail.Examine the output of the detail command. L'output includerà un valore per Dimensioni virtuali.The output will include a value for Virtual size. Si tratta del valore massimo corrente.This is the current maximum. Convertire questo valore in megabyte.Convert this value to megabytes. Il nuovo valore dopo il ridimensionamento deve essere maggiore di questo valore.The new value after resizing must be greater than this value. Se, ad esempio, l'output di detail mostra Dimensioni virtuali: 256 GB, è necessario specificare un valore maggiore di 256000.For example, if the detail output shows Virtual size: 256 GB, then you must specify a value greater than 256000. Quando sono disponibili le nuove dimensioni in megabyte, immettere il comando seguente in diskpart:Once you have your new size in megabytes, enter the following command in diskpart:

      DISKPART> expand vdisk maximum=<sizeInMegaBytes>
      
    • Uscire da diskpart.Exit diskpart

      DISKPART> exit
      
  5. Avvia la distribuzione di WSL, ad esempio Ubuntu.Launch your WSL distribution (Ubuntu, for example).

  6. Indicare a WSL che può espandere le dimensioni del file system eseguendo questi comandi dalla riga di comando per la distribuzione Linux.Make WSL aware that it can expand its file system's size by running these commands from your Linux distribution command line.

    Nota

    Questo messaggio può essere visualizzato in risposta al primo comando mount: /dev: nessuno già montato in /dev.You may see this message in response to the first mount command: /dev: none already mounted on /dev. È possibile ignorare questo messaggio.This message can safely be ignored.

       sudo mount -t devtmpfs none /dev
       mount | grep ext4
    

    Copiare il nome di questa voce, che sarà simile a /dev/sdX (la X rappresenta qualsiasi altro carattere).Copy the name of this entry, which will look like: /dev/sdX (with the X representing any other character). Nell'esempio seguente il valore di X è b:In the following example the value of X is b:

       sudo resize2fs /dev/sdb <sizeInMegabytes>M
    

    Nota

    Può essere utile installare resize2fs.You may need to install resize2fs. In tal caso, è possibile usare questo comando per installarlo: sudo apt install resize2fs.If so, you can use this command to install it: sudo apt install resize2fs.

    Il risultato sarà simile al seguente:The output will look similar to the following:

       resize2fs 1.44.1 (24-Mar-2018)
       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.
    

Nota

in generale, non modificare, spostare o accedere ai file correlati a WSL che si trovano nella cartella AppData usando strumenti o editor di Windows,In general do not modify, move, or access the WSL related files located inside of your AppData folder using Windows tools or editors. altrimenti rischi di danneggiare la distribuzione Linux.Doing so could cause your Linux distribution to become corrupted.