Desempenho do sistema de arquivos do WSL: por que o acesso entre sistemas operacionais deixa seu código mais lento
By Mirko Peters ·
Entenda por que o acesso a arquivos entre sistemas operacionais deixa o WSL mais lento. Conheça as melhores práticas para armazenamento nativo no Linux e para acelerar seus fluxos de desenvolvimento.
Automatically translated with AI from the original post. Read the English original

Descubra por que misturar sistemas de arquivos do Windows e do Linux no Subsistema Windows para Linux (WSL) cria gargalos de desempenho significativos. Conheça as regras essenciais para manter seus diretórios de projeto do lado correto da fronteira entre sistemas operacionais e acelerar drasticamente tarefas de build com uso intensivo de disco, instalações de pacotes e operações com git.
Principais conclusões
- Armazenar arquivos de projeto Linux em unidades do Windows (via /mnt/c/) causa uma degradação severa de desempenho devido aos custos de tradução na fronteira entre sistemas.
- Árvores de arquivos muito grandes, como os diretórios node_modules, sofrem mais ao cruzar a fronteira entre sistemas operacionais durante builds e atualizações.
- A recomendação oficial da Microsoft é manter seus arquivos no mesmo sistema operacional das ferramentas que você usa para editá-los e compilá-los.
- O VS Code oferece a extensão Remote WSL, que permite editar arquivos hospedados no Linux usando a interface do Windows, sem penalidades de desempenho.
- As regras de diferenciação de maiúsculas e minúsculas são muito diferentes entre os sistemas de arquivos do Windows e do Linux, tornando a colocação correta dos diretórios essencial para evitar bugs inesperados.
Entendendo a divisão entre os sistemas de arquivos do Windows e do Linux
Um dos erros mais comuns que os desenvolvedores cometem ao adotar o Subsistema Windows para Linux é a colocação inadequada dos arquivos. Windows e Linux gerenciam seu armazenamento subjacente por meio de paradigmas arquiteturais completamente diferentes. Ao executar o WSL 2, você está utilizando um kernel Linux genuíno executando dentro de uma máquina virtual leve. Isso significa que sua distribuição Linux mantém um sistema de arquivos nativo próprio e isolado, que opera de acordo com os padrões POSIX.
Por outro lado, seu ambiente Windows padrão depende do NTFS, utilizando letras de unidade como a unidade C:. Para fazer a ponte entre os dois, o WSL monta automaticamente as unidades do Windows dentro do ambiente Linux no diretório /mnt/ — por exemplo, sua unidade C aparece como /mnt/c. Embora isso torne cada arquivo da sua máquina hospedeira legível e gravável a partir do terminal Linux, introduz um custo oculto e bastante alto de desempenho conhecido como caminho de tradução entre fronteiras.
Por que o acesso a arquivos entre fronteiras fica tão lento
Sempre que uma ferramenta Linux lê ou grava um arquivo localizado do lado do Windows, a requisição precisa atravessar a fronteira entre a máquina virtual leve e o host Windows. Para um único arquivo de texto ou um pequeno script, essa sobrecarga de tradução é imperceptível. No entanto, os fluxos de desenvolvimento de software modernos raramente envolvem apenas um arquivo.
Considere o que acontece quando você executa um comando como npm install ou git clone em um diretório de projeto localizado em /mnt/c/meu-projeto. Essas operações geram milhares de requisições de criação e modificação de arquivos minúsculos em rápida sucessão. Cada um desses arquivos pequenos paga o custo da travessia. O efeito cumulativo é que operações que deveriam levar segundos podem se arrastar por minutos, levando muitos desenvolvedores a acreditar, de forma equivocada, que o próprio WSL é inerentemente lento, quando o verdadeiro culpado é simplesmente a má colocação dos diretórios.
Diferenças de maiúsculas e minúsculas e conflitos de permissões
O desempenho não é a única baixa ao cruzar a fronteira entre sistemas operacionais. As regras do sistema de arquivos subjacente também entram em conflito de maneiras que quebram aplicações. A raiz nativa do sistema de arquivos Linux é estritamente sensível a maiúsculas e minúsculas. Dois arquivos chamados Script.js e script.js são tratados como entidades completamente distintas. Já o NTFS do Windows, por padrão, não diferencia maiúsculas de minúsculas.
Além disso, as ferramentas de linha de comando do Linux dependem fortemente de flags de propriedade e permissão gerenciadas por utilitários como chmod e chown. Os sistemas de arquivos do Windows não mapeiam essas permissões nativamente da forma que as ferramentas do Linux esperam. Ao executar código através da fronteira, links simbólicos podem deixar de ser resolvidos corretamente, e scripts de build podem gerar erros obscuros porque não conseguem aplicar as permissões de arquivo exigidas pelo ambiente de execução.
Melhores práticas para fluxos de trabalho rápidos no WSL
Para evitar essas armadilhas de desempenho e manter uma experiência de desenvolvimento extremamente fluida, você deve adotar dois hábitos fundamentais. Primeiro, mantenha sempre os seus projetos Linux dentro do sistema de arquivos nativo do Linux (em algum lugar do seu diretório pessoal, como ~/projects/), e mantenha os projetos puramente baseados no Windows do lado do Windows.
Segundo, aproveite o poder das ferramentas modernas para integrar a sua interface sem sacrificar a velocidade de execução. Você não precisa abandonar os seus editores favoritos do Windows. Usando a extensão Remote - WSL para o Visual Studio Code, você pode abrir um projeto armazenado inteiramente no sistema de arquivos nativo do Linux, enquanto desfruta de uma interface gráfica do Windows responsiva e familiar. O seu editor roda no Windows, mas a execução do código, os testes e o gerenciamento de pacotes rodam em velocidade máxima dentro do ambiente Linux.
Conclusão e próximos passos
Dominar as fronteiras do sistema de arquivos é o passo mais importante para transformar o WSL de um experimento frustrante no seu ambiente de trabalho diário. Ao manter suas ferramentas e arquivos alinhados do lado correto da divisão do sistema operacional, você elimina a latência e evita erros de permissão enigmáticos.
Para uma visão mais ampla de como este recurso se integra aos fluxos de trabalho modernos de desenvolvimento e nuvem, ouça o episódio completo do M365 FM Podcast. Mergulhe na conversa completa para conhecer atalhos de instalação, comparações entre versões e como o WSL faz a ponte entre máquinas locais e a infraestrutura de nuvem do Azure!
Perguntas frequentes
Onde devo armazenar os arquivos do meu projeto ao usar o WSL?
Você deve armazená-los dentro do sistema de arquivos nativo do Linux (como no seu diretório pessoal, por exemplo, ~/my-project), e não nas unidades do Windows montadas (como /mnt/c/), para garantir a máxima velocidade de leitura e gravação.
Por que o npm install é lento em uma unidade do Windows dentro do WSL?
Gerenciadores de pacotes como npm ou pip geram milhares de arquivos pequenos durante a instalação. Quando esses arquivos são gravados através da fronteira entre sistemas operacionais em uma unidade NTFS do Windows, cada arquivo individual gera uma sobrecarga de tradução, causando gargalos de desempenho expressivos.
Posso usar o Visual Studio Code para editar arquivos armazenados dentro do sistema de arquivos Linux?
Sim. Ao instalar a extensão Remote - WSL para o Visual Studio Code, você pode abrir, editar e depurar nativamente arquivos localizados na sua distribuição Linux do WSL, usando a interface do editor padrão do Windows.
Qual é a diferença entre a forma como o Windows e o Linux tratam nomes de arquivos?
Os sistemas de arquivos Linux são estritamente sensíveis a maiúsculas e minúsculas (tratando File.txt e file.txt como arquivos diferentes), enquanto o NTFS do Windows não diferencia maiúsculas de minúsculas por padrão. Executar ferramentas Linux em diretórios hospedados no Windows frequentemente causa falhas de build por causa dessas diferenças de comportamento.