Compartilhar via


Guia de solução de problemas do Subsistema do Windows para Linux

Este guia explica como solucionar problemas no WSL e determinar de onde eles estão vindo.

Uma observação rápida sobre arquitetura

Para ajudar a determinar o que está causando um problema, temos que descobrir onde ele está na pilha.

Quando um binário do Linux é chamado no WSL, ele (aproximadamente) passa por essas camadas, cada um pode ser de onde o erro está vindo:

graph TD;
    id1["Linux binary in userspace"]-->id2["Linux distro"];
    id2["Linux distro"]-->id3["WSL's stack"];
    id4["WSL's stack"]-->id5["Physical hardware"];

Vamos analisar este conjunto em ordem e orientar você sobre como determinar se a origem do erro está nessa seção.

Binário do Linux no espaço do usuário

Primeiro, precisamos verificar se esse é um erro causado pelo próprio binário do Linux. A maneira mais fácil de fazer isso é apenas ver se esse erro se reproduz em um computador Linux real (ou bare-metal que é preferencial ou executar o Ubuntu completo em Hyper-V para uma boa comparação). Se ocorrer um erro da mesma maneira em um computador Linux real, sabemos que é o binário do Linux ou a distribuição.

Como alternativa, você pode executar o strace comando para determinar o que está acontecendo. Este comando mostra as chamadas do sistema Linux que o binário do Linux está fazendo e você pode determinar o que ele está tentando acessar e onde ele pode estar falhando. Este manual não fornecerá um guia completo sobre como depurar strace pilhas (ou então seria muito longo), por isso vamos examinar um exemplo.

Um usuário descobre que o comando xeyes WSL fica travando no WSL, mas não trava em uma máquina Linux. A execução de strace xeyes mostra que o comando está travado na chamada de sistema openat. Isso significa que o kernel do Linux está preso tentando executar a openat chamada e indica que o problema não está no próprio binário.

O que fazer se o problema estiver no binário do Linux

Os binários do Linux presentes no WSL são fornecidos por seus respectivos proprietários e não pertencem diretamente à Microsoft. Se você vir um problema no binário do Linux, denuncie-o diretamente ao proprietário desse binário.

Distribuição do Linux

Alguns erros também podem vir da própria distribuição do Linux. As distribuições do Linux no WSL são, na verdade, apenas uma coleção de binários do Linux, portanto, as mesmas etapas de solução de problemas que se aplicam acima. No entanto, a distribuição do Linux é responsável por experiências importantes como o gerenciador de pacotes, o que pode afetar muito a forma como os binários interagem entre si.

Para solucionar esse problema, você usaria as mesmas técnicas que acima, vendo se isso se reproduz no Linux e usando strace para determinar o que está causando a falha (ou quaisquer outros códigos de erro) e tentando determinar se ela vem de um binário específico do Linux. Se esse binário em si pertence à distribuição, então é um problema de distribuição do Linux.

O que fazer se o problema estiver na distribuição do Linux

Semelhante à história binária do Linux, as distribuições WSL são fornecidas por seus respectivos mantenedores. Registre o problema diretamente com a distribuição do Linux afetada.

Pilha do WSL

Em seguida, o erro pode estar vindo da própria lógica do WSL. Se o problema não se reproduzir no Linux bare metal ou se algo no nível da máquina estiver falhando, isso indica que a origem é de dentro do WSL. Abaixo estão as rotas de falha comuns e como identificá-los e coletar logs:

Falhas de inicialização do WSL ou erros de wsl.exe.

O erro mais óbvio aqui é um erro vindo diretamente, como esse problema do wsl.exeGitHub, por exemplo. Nesse caso, colete logs WSL que reproduzam o problema e registre o problema no repositório GitHub do WSL.

Travamentos do WSL

Outro erro comum é onde o WSL trava e não responde a nenhum comando. Nesse caso, relate uma falha de processo do WSL seguindo este procedimento. Você pode forçar uma falha e coletar um despejo abrindo o Gerenciador de Tarefas –> Processos –> Clicando com o VmmemWSL botão direito do mouse –> Criar arquivo de Despejo de Memória. Inclua este crash dump e registre um problema no repositório do GitHub do WSL.

Erros de rede

Novamente, verifique se esse não é um problema binário do Linux. Além disso, se possível, verifique se esse não é um problema genérico de virtualização ou VPN ao tentar um Hyper-V VM nesse computador para ver se ele tem recursos de rede restritos. Se esse problema persistir apenas no WSL, registre um problema no repositório do GitHub do WSL.

Problemas Diversos

Se você estiver recebendo outro tipo de erro WSL que você acha que está relacionado ao WSL especificamente, inclua logs e registre-o no repositório GitHub do WSL.

Mergulhando em logs do WSL

Você pode abrir logs WSL para ver qual é o erro exato. Para fazer isso, instale o Analisador de Desempenho do Windows primeiro.

Em seguida, quando você tiver logs WSL (coletados dessas instruções), pegue o arquivo .zip criado e descompacte. Abra a pasta resultante e procure um arquivo chamado: logs.etl e clique duas vezes neste arquivo para abri-lo no Analisador de Desempenho do Windows.

Depois que o aplicativo for aberto, execute estas etapas:

  1. Clique em Atividade do Sistema para expandir o modo de exibição
  2. Arraste a caixa "Eventos Genéricos" na parte superior para a janela principal
  3. Localize a série "Microsoft.Windows.Lxss.Manager" e clique na seta para selecioná-la

WinPerfAnalyzer

A partir daí, você pode exibir todos os eventos de diagnóstico emitidos do WSL. Aquele de maior interesse será o chamado "VerboseLog" e fornecerá mais detalhes sobre o local exato do erro e suas informações.

Recursos adicionais

Problemas comuns e soluções estão disponíveis na página de documentos de solução de problemas do WSL, portanto, verifique se há problemas que você possa ver. Além disso, vá para o repositório GitHub do WSL ou qualquer mecanismo de pesquisa e pesquise o problema ou quaisquer códigos de erro para ver se outras pessoas estão atingindo o mesmo problema.