Por que isso aconteceu?
Como os sistemas de arquivos Unix convencionais funcionam de maneira diferente dos sistemas de arquivos do Windows, a WSL armazena informações extras sobre propriedades de arquivos específicas do Linux nos atributos estendidos dos arquivos do Windows usados para representá-los. Os programas comuns do Windows não conhecem esses atributos e não os preservam quando você edita o arquivo. Informações importantes sobre o arquivo são perdidas quando isso acontece.
Quando o WSL tenta ler um arquivo e não consegue encontrar os atributos que espera, um erro é relatado, exatamente como o que aconteceria se um sistema de arquivos nativo fosse corrompido. Se ele nunca vir os atributos em um arquivo, esse arquivo será tratado como inexistente e não será exibido nas listagens de arquivos.
O conselho oficial da WSL é
NÃO, em nenhuma circunstância , crie e / ou modifique arquivos Linux usando aplicativos, ferramentas, scripts, consoles, etc.
Criar / alterar arquivos Linux do Windows provavelmente resultará em corrupção de dados e / ou danificará o ambiente Linux, exigindo que você desinstale e reinstale sua distribuição!
por esse motivo (mas maior, mais vermelho e com mais sublinhados). "Arquivos Linux" significa qualquer coisa dentro do seu lxss
diretório. Você pode modificar arquivos regulares do Windows a partir do Linux através do /mnt/c/...
sistema de arquivos DrvFS , mas não o contrário.
No entanto, a versão 1903 do Windows 10 introduz um novo mecanismo que permite que os arquivos sejam editados com segurança no Windows , desde que você faça o procedimento da maneira correta. Isso não ajuda a corrigir o problema de arquivos já corrompidos, mas pode evitá-lo no futuro.
O que posso fazer para corrigi-lo?
Se você já editou um arquivo e agora não pode acessá-lo, ainda é possível ler o conteúdo do próprio Windows e restaurar o arquivo dessa maneira.
Para fazer isso, você precisará:
- Navegue de volta para o local dentro do
AppData\Local\lxss
diretório em que o arquivo está usando o File Explorer e mova o arquivo para outro local da unidade, como a área de trabalho.
- Reinicie o WSL depois disso para limpar seu cache interno, o que você pode fazer fechando todos os seus terminais e abrindo um novo. Se você tiver processos de servidor em segundo plano em execução, também precisará interrompê-los.
- No Linux novamente, vá para o local original do arquivo corrompido. Agora não será exibido se você tiver movido o arquivo com êxito. Corra
ls
para verificar.
Verifique o arquivo que você mudou: execute
cat /mnt/c/Users/.../Desktop/abc
para ver o conteúdo original do arquivo.
Se tudo funcionou até agora, você pode copiar esse arquivo de volta para o local que esperava:
cp /mnt/c/Users/.../Desktop/abc ~/alphabet/abc
O cp
comando fará com que o WSL restaure os atributos ocultos necessários no arquivo.
Essas instruções funcionarão para arquivos de dados regulares, mas se for um arquivo importante do sistema operacional, talvez seja necessário reinstalar completamente . Para muitos programas não críticos, excluir o arquivo corrompido do Windows e reinstalar o programa usando o gerenciador de pacotes será suficiente. Você não poderá excluir o arquivo de dentro do Linux depois que ele estiver corrompido.
Como posso evitar isso no futuro?
Nunca manipule nenhum arquivo dentro do lxss
diretório do Windows. Em vez de:
Se você tiver um arquivo que deseja acessar no Windows e Linux, armazene-o fora do lxss
diretório, em qualquer outro lugar do sistema Windows. Você pode abrir arquivos do Windows no Linux usando a interoperabilidade automática do DrvFS : o /mnt/c
diretório contém todos os arquivos da sua unidade C: e eles podem ser lidos e gravados no Linux.
A partir da versão 1903 do Windows (março de 2019), o WSL inclui um servidor de arquivos especial que disponibiliza seus arquivos para todos os aplicativos Windows. Se você correr
explorer.exe .
o File Explorer será aberto mostrando o diretório atual do Linux - você pode copiar arquivos dentro ou fora dessa janela ou editá-los com qualquer aplicativo. O caminho do diretório será algo como \\wsl$\Ubuntu\var\www
: a \\wsl$\
parte envia acesso ao arquivo através de um caminho alternativo e seguro.
Se você puder, esse será o melhor caminho a seguir (ou, às vezes, o ponto acima). Para versões mais antigas, continue lendo.
Se houver um arquivo em um local específico, como um arquivo de configuração, e você quiser editá-lo no Windows, é possível criar um link simbólico do Linux para o local real do arquivo ou diretório:
ln -s /mnt/c/.../abc ~/.config/xyz/abc
Isso funcionará desde que o arquivo não precise ter permissões ou atributos específicos no Linux (como um executável ou uma chave SSH).
Como alternativa, e talvez melhor, edite seus arquivos Linux usando um editor Linux dentro do terminal. nano
, vim
E emacs
estão prontamente disponíveis e trabalhar bem sob WSL, embora todos eles têm suas peculiaridades.
Se você precisar editar um arquivo com um programa do Windows, não possui uma versão recente do Windows e não pode torná-lo um link simbólico, faça uma cópia em outro lugar para editar e copiá-lo /mnt/c
posteriormente, assim como o corrija acima ou use o controle de versão para sincronizar suas edições em vários locais.
De alguma experimentação, o Bloco de Notas comum parece preservar os atributos necessários, mas ele não entende as terminações de linha do Unix, portanto você provavelmente corromperá o conteúdo, e eu não confiaria nesse comportamento em nenhum caso. Como essa é uma operação explicitamente não suportada e não documentada, é improvável que qualquer editor baseado no Windows seja confiável.