Em ambiente dual-boot, manter duas distros WSL separadas gera duplicação de dados, bibliotecas divergentes e retrabalho de setup. Para eliminar essa fragmentação, implementei compartilhamento do mesmo disco ext4.vhdx entre dois Windows.
O objetivo foi simples: subir no Windows A ou no Windows B e ter exatamente o mesmo filesystem Linux, mesma /home, mesma árvore de projetos e mesmas dependências.
1) Arquitetura adotada
- Um único arquivo de disco:
ext4.vhdx - Disco armazenado em partição de dados compartilhada entre os dois Windows
- Cada Windows registra a distro localmente apontando para o mesmo VHDX com
--vhd - Protocolo rígido de desligamento para impedir escrita concorrente
Exemplo de layout físico usado:
D:\WSL\Ubuntu-Shared\ext4.vhdx
2) Pré-requisitos antes da importação
2.1 Garantir versão do WSL com suporte a --vhd
Em ambos os Windows:
wsl --version
wsl --status
wsl --update
Sem versão compatível, wsl --import ... --vhd não funciona corretamente.
2.2 Desligamento real do outro sistema (sem hibernação)
Nunca monte o mesmo VHDX com o outro Windows em Fast Startup/hibernação.
No Windows ativo, antes de reiniciar para o outro:
wsl --shutdown
E no sistema, desative Fast Startup:
- Painel de Controle -> Opções de Energia -> Escolher a função dos botões de energia
- Desmarcar:
Ligar inicialização rápida
Ou via linha de comando (desativa hibernação por completo):
powercfg /h off
2.3 Permissões e integridade da partição de dados
Valide a unidade onde o VHDX está armazenado:
chkdsk D: /scan
Em ambientes corporativos com BitLocker, confirme que a partição será destravada no boot dos dois sistemas.
3) Procedimento de importação no segundo Windows
No Windows B (PowerShell como administrador):
wsl --import Ubuntu-Shared D:\WSL\Ubuntu-Shared D:\WSL\Ubuntu-Shared\ext4.vhdx --vhd
Parâmetros:
Ubuntu-Shared: nome da distro registrada naquele WindowsD:\WSL\Ubuntu-Shared: diretório de registro local...\ext4.vhdx: VHDX já existente--vhd: instrução explícita para reutilizar disco existente
Validação:
wsl -l -v
wsl -d Ubuntu-Shared -- uname -a
Se a distro subir com kernel e filesystem corretos, o reaproveitamento do VHDX foi concluído.
4) O erro clássico e como tratei
Erro comum ao tentar importar no destino errado:
A distro with that name already exists
ou conflito por diretório ocupado.
Runbook de limpeza segura:
wsl --unregister Ubuntu-Shared
Depois repetir --import ... --vhd apontando para os caminhos corretos.
Importante: unregister remove apenas o registro da distro naquele Windows, não apaga automaticamente o VHDX compartilhado se você está apontando para caminho externo controlado. Ainda assim, valide sempre o caminho antes de executar.
5) UID/GID: evitando Permission denied entre boots
Mesmo com mesmo VHDX, diferenças de usuário entre as duas instalações podem causar comportamento inconsistente em arquivos da /home.
Dentro da distro, valide IDs:
id
getent passwd | head
ls -ln /home
Estratégia aplicada:
- manter mesmo usuário principal em ambos os fluxos
- garantir UID/GID consistentes (normalmente
1000)
Quando necessário, ajuste controlado:
sudo usermod -u 1000 meuusuario
sudo groupmod -g 1000 meuusuario
sudo find /home/meuusuario -uid OLD_UID -exec chown -h 1000 {} \;
sudo find /home/meuusuario -gid OLD_GID -exec chgrp -h 1000 {} \;
Esse passo foi essencial para estabilizar permissões em toolchains Node/Python e caches locais.
6) Paridade de kernel e runtime entre Windows A e B
Evitei drift operacional mantendo ambos os lados atualizados:
wsl --update
wsl --version
Checklist adicional dentro da distro:
uname -r
cat /etc/os-release
A meta foi impedir comportamento divergente por kernel antigo em um dos boots.
7) Protocolo operacional para não corromper ext4.vhdx
Padronizei procedimento de troca de sistema:
- fechar terminais/processos Linux
- executar
wsl --shutdown - desligar/reiniciar Windows com hibernação desativada
- iniciar outro Windows
- subir distro e validar rapidamente
Validação rápida pós-boot:
wsl -d Ubuntu-Shared -- bash -lc "pwd && df -h && ls /home"
Esse protocolo eliminou risco de lock residual no VHDX.
8) Backup e rollback
Mesmo estável, compartilhei um único ponto de dados entre dois sistemas. Portanto, backup periódico virou item obrigatório.
Export recorrente:
wsl --export Ubuntu-Shared D:\Backups\ubuntu-shared-$(Get-Date -Format yyyyMMdd).tar
Restauração (se necessário):
wsl --import Ubuntu-Restore D:\WSL\Ubuntu-Restore D:\Backups\ubuntu-shared-YYYYMMDD.tar
Com isso, consigo rollback rápido sem depender de snapshot manual do VHDX.
9) Resultado operacional
Com o modelo implantado:
- eliminei duplicação de ambiente entre dois Windows
- reduzi tempo de setup/reinstalação
- padronizei comportamento de dependências e dotfiles
- mantive governança de segurança com shutdown + backup
10) Conclusão técnica
Compartilhar o mesmo ext4.vhdx do WSL 2 em dual-boot é viável e estável quando tratado como operação de infraestrutura, não como “atalho”.
Os pontos críticos que garantiram confiabilidade foram:
- importação correta com
--vhd - Fast Startup/hibernação desativados
- UID/GID consistentes
- protocolo de desligamento antes de troca de OS
- backup recorrente com
wsl --export
Esse padrão transformou dois ambientes potencialmente divergentes em um único ambiente Linux consistente entre boots.
Este post está licenciado sob CC BY-NC.
Comentários
Participe da discussão abaixo.
Comentários ainda não configurados. Adicione as opções do Cusdis em /assets/json/config/blog-comments-config.json.