Prestazioni del file system in WSL: perché l'accesso tra sistemi operativi rallenta il tuo codice
By Mirko Peters ·
Scopri perché l'accesso ai file tra sistemi operativi rallenta WSL. Best practice per lo storage Linux nativo e per velocizzare i flussi di sviluppo.
Automatically translated with AI from the original post. Read the English original

Scopri perché combinare file system Windows e Linux in Windows Subsystem for Linux (WSL) crea gravi colli di bottiglia nelle prestazioni. Impara le regole fondamentali per tenere le directory di progetto dal lato giusto del confine tra sistemi operativi, così da accelerare in modo deciso le attività di build con uso intensivo del disco, le installazioni di pacchetti e le operazioni con git.
Punti chiave
- Archiviare i file di progetto Linux su unità Windows (tramite /mnt/c/) causa un forte calo delle prestazioni a causa dei costi di traduzione tra sistemi operativi.
- Gli alberi di file molto grandi, come le directory node_modules, risentono maggiormente del passaggio tra sistemi operativi durante build e aggiornamenti.
- La raccomandazione ufficiale di Microsoft è mantenere i file nello stesso sistema operativo degli strumenti usati per modificarli e compilarli.
- VS Code offre l'estensione Remote WSL, che consente di modificare senza problemi i file ospitati in Linux usando un'interfaccia Windows, senza penalizzazioni nelle prestazioni.
- Le regole sulla distinzione tra maiuscole e minuscole differiscono notevolmente tra i file system Windows e Linux, per cui una corretta collocazione delle directory è essenziale per evitare bug imprevisti.
Capire la divisione tra file system Windows e Linux
Uno degli errori più comuni in cui incappano gli sviluppatori quando adottano Windows Subsystem for Linux è la collocazione errata dei file. Windows e Linux gestiscono lo storage sottostante seguendo paradigmi architetturali completamente diversi. Quando usi WSL 2, sfrutti un vero kernel Linux in esecuzione all'interno di una macchina virtuale leggera. Questo significa che la tua distribuzione Linux mantiene un proprio file system Linux nativo e isolato, che opera secondo gli standard POSIX.
Al contrario, il tuo ambiente Windows standard si basa su NTFS e utilizza lettere di unità come l'unità C:. Per colmare il divario, WSL monta automaticamente le unità Windows all'interno dell'ambiente Linux nella directory /mnt/ — ad esempio, l'unità C appare come /mnt/c. Anche se questo rende ogni file della macchina host leggibile e scrivibile dal terminale Linux, introduce un costo prestazionale nascosto e molto elevato, noto come percorso di traduzione tra sistemi operativi.
Perché l'accesso ai file tra sistemi operativi è così lento
Ogni volta che uno strumento Linux legge o scrive un file situato sul lato Windows del sistema, la richiesta deve attraversare il confine tra la macchina virtuale leggera e l'host Windows. Per un singolo file di testo o un piccolo script, questo sovraccarico di traduzione è impercettibile. Tuttavia, i moderni flussi di lavoro di sviluppo raramente coinvolgono un solo file.
Considera cosa succede quando esegui un comando come npm install o git clone su una directory di progetto situata in /mnt/c/my-project. Queste operazioni generano in rapida successione migliaia di piccole richieste di creazione e modifica di file. Ognuno di quei file minuscoli paga il costo dell'attraversamento. L'effetto complessivo è che operazioni che dovrebbero richiedere secondi possono trascinarsi per minuti, portando molti sviluppatori a credere erroneamente che WSL sia intrinsecamente lento, quando il vero colpevole è semplicemente una cattiva collocazione delle directory.
Sensibilità alle maiuscole e autorizzazioni in conflitto
Le prestazioni non sono l'unico problema quando si attraversa il confine tra sistemi operativi. Anche le regole del file system sottostante entrano in conflitto in modi che possono far fallire le applicazioni. La radice del file system nativo di Linux è rigorosamente sensibile alle maiuscole e alle minuscole: due file chiamati Script.js e script.js sono considerati entità completamente distinte. Windows NTFS, per impostazione predefinita, non distingue tra maiuscole e minuscole.
Inoltre, le utilità da riga di comando di Linux si basano pesantemente sui flag di proprietà e autorizzazioni gestiti da strumenti come chmod e chown. I file system di Windows non mappano nativamente queste autorizzazioni nel modo previsto dagli strumenti Linux. Quando esegui codice attraversando il confine, i link simbolici potrebbero non essere risolti correttamente e gli script di build possono generare errori poco chiari, perché non riescono ad applicare le autorizzazioni dei file richieste dall'ambiente di runtime.
Best practice per flussi di lavoro WSL veloci
Per evitare queste trappole di prestazioni e mantenere un'esperienza di sviluppo fluida, ti consiglio di seguire due abitudini fondamentali. Primo: tieni sempre i progetti Linux all'interno del file system nativo di Linux (da qualche parte nella tua home directory, ad esempio ~/projects/), e lascia i progetti esclusivamente Windows sul lato Windows.
Secondo: sfrutta gli strumenti moderni per collegare l'interfaccia utente senza sacrificare la velocità di esecuzione. Non devi abbandonare i tuoi editor Windows preferiti. Usando l'estensione Remote - WSL per Visual Studio Code, puoi aprire un progetto archiviato interamente nel file system nativo di Linux, continuando a usare un'interfaccia grafica Windows reattiva e familiare. L'editor gira su Windows, ma l'esecuzione del codice, i test e la gestione dei pacchetti girano alla massima velocità all'interno dell'ambiente Linux.
Conclusioni e prossimi passi
Padroneggiare i confini del file system è il passaggio più importante per trasformare WSL da un esperimento frustrante a lo strumento di tutti i giorni. Tenendo strumenti e file allineati dal lato corretto della divisione tra sistemi operativi, elimini la latenza ed eviti criptici errori di autorizzazione.
Per una visione più ampia di come questa funzionalità si integra nei flussi di lavoro di sviluppo moderni e cloud, ascolta l'episodio completo del podcast M365 FM. Approfondisci la conversazione completa per scoprire le scorciatoie di installazione, i confronti tra versioni e come WSL collega le macchine locali all'infrastruttura cloud di Azure!
Domande frequenti
Dove devo archiviare i file dei progetti quando uso WSL?
Devi archiviare i file dei progetti all'interno del file system nativo di Linux (ad esempio nella home directory, come ~/my-project), anziché nelle unità Windows montate (come /mnt/c/), per ottenere la massima velocità di lettura e scrittura.
Perché npm install è lento sull'unità Windows in WSL?
Gestori di pacchetti come npm o pip generano migliaia di file di piccole dimensioni durante l'installazione. Quando questi file vengono scritti attraverso il confine tra sistemi operativi su un'unità Windows NTFS, ogni singolo file comporta un overhead di traduzione, che causa notevoli colli di bottiglia nelle prestazioni.
Posso usare Visual Studio Code per modificare file archiviati nel file system Linux?
Sì. Installando l'estensione Remote - WSL per Visual Studio Code, puoi aprire, modificare e sottoporre a debug direttamente i file presenti nella tua distribuzione Linux di WSL, usando l'interfaccia dell'editor standard di Windows.
Qual è la differenza tra il modo in cui Windows e Linux gestiscono i nomi dei file?
I file system Linux sono rigorosamente sensibili alle maiuscole e alle minuscole (trattano File.txt e file.txt come file diversi), mentre Windows NTFS, per impostazione predefinita, non le distingue. Eseguire strumenti Linux su directory ospitate in Windows causa spesso errori di build a causa di queste differenze di comportamento.