
Quando comecei a desenvolver, WSL
não sei por que, mas instalei Ubuntu-20.04
o aplicativo da loja da Microsoft em vez de apenas o Ubuntu
. Eu sei que a única diferença é que Ubuntu-20.04
não será atualizado automaticamente quando uma nova Ubuntu
versão for lançada. Tudo que eu quero fazer é fazer Ubuntu
igual Ubuntu-20.04
sem reconfigurá-lo. Pensei em mover todos os arquivos de Ubuntu-20.04
para Ubuntu
, mas não sei se é seguro fazer isso. Alguém sabe como fazer o que estou tentando fazer? Também devo fazer isso?
editar: ambas as versões do Ubuntu estão rodando. WSL-2
Eu verifiquei usando wsl -l -v
como @NotTheDr01ds disse.
edição 2: quero toda a minha configuração Ubuntu-20.04
incluindo Ubuntu
todos os arquivos e pacotes instalados
Responder1
Por que você pode não precisar fazer isso
Ok, as primeiras coisas primeiro. Isso provavelmente é bastante desnecessário.
O fato de o "Ubuntu" (sem número de versão) na Loja ser atualizado automaticamente é ... verdade, mas um pouco enganador na realidade.
Isso é um pouco difícil de explicar, mas quando você instala o "Ubuntu" (sem versão) da Loja, você acaba comdoiscoisas:
Um pacote rootfs (
install.tar.gz
) emC:\Program Files\WindowsApps\CanonicalGroup...
. Você pode ver isso iniciando um PowerShell administrativo e executando oGet-ChildItem -Recurse 'C:\Program Files\WindowsApps\Canonical*' | Where-Object {$_.Name -eq 'install.tar.gz' } | % { $_.DirectoryName }
.Quando executado pela primeira vez (via
ubuntu.exe
), o instalador cria sua instância WSL real em seu arquivo%UserProfile%\AppData\Local\Packages\CanonicalGroup...
.
Quando há uma nova versão na Loja, a única coisa que é atualizada é o pacote rootfs. Isso acontecenãomude seu instaladoinstância. (Crédito e agradecimento a u/zoredache no Reddit que mantémme lembrando disso.)
Isso é bastante inútil para a maioria dos usuários, a menos que você:
- Cancele o registro da instância (que exclui toda a configuração) e reconfigure-a executando novamente o
ubuntu.exe
comando. - Deseja usar isso
install.tar.gz
para criar uma segunda instância WSL/Ubuntu (usandowsl --import
). A instância recém-criada usaria então os rootfs atualizados pela Store.
Nenhum desses cenários é muito comum. Mesmo quando a Loja não versionada Ubuntu
for atualizada para (presumivelmente) 22.04, isso não mudará seuinstaladoinstância de 20.04, apenas o rootfspacote.
Você ainda precisará executar um sudo do-release-upgrade -d
quando quiser atualizar para 22.04 (ou uma versão provisória).
Então, dado isso... Como você já Ubuntu-20.04
configurou o seu da maneira que deseja, não há grande vantagem para você alterá-lo, a não ser obter um Ubuntu
nome mais curto e limpo para a instância WSL.
Como fazer de qualquer maneira
Dito isto, da maneira como o WSL2 armazena seus dados, não é tão difícil mover as configurações. Todo o sistema de arquivos de uma instância WSL2 é armazenado em um HDD virtual denominado ext4.vhdx
.
Como você tem duas instalações do Ubuntu ( Ubuntu
e Ubuntu-20.04
), você encontrará dois desses ext4.vhdx
arquivos em %userprofile%\AppData\Local\Packages\
. Para obter os locais exatos, execute o seguinte no PowerShell:
Get-ChildItem "$env:USERPROFILE\AppData\Local\Packages\CanonicalGroupLimited*\LocalState\*"
Para minha instalação, isso é:
...\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
...\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
A solução pode ser bastante óbvia neste ponto, mas tenha cuidado, é claro:
Saia de todas as suas instâncias WSL em execução.
Então,
wsl --shutdown
para ter certeza de que nada está em execução.Um backup de sua configuração existente não seria uma má ideia
wsl --export Ubuntu-20.04 2021-09-26_Ubuntu-20.04_backup.tar
(ou como você quiser chamar o arquivo de backup). Isso basicamente cria um tarball dos rootfs atuais, incluindo todos os arquivos, propriedade e permissões.Nesse ponto, basta copiar o desejado (Ubuntu-20.04)
ext4.vhdx
sobre o recém-instalado (Ubuntu). O verdadeiro truque é simplesmente certificar-se de copiar o correto. Você pode querer executar suaUbuntu-20.04
distribuição e fazer uma alteração rápida para poder ver facilmente o último carimbo de data/hora na cópia "correta".
O único requisito real é que o usuário padrão para ambas as instâncias seja o mesmo.
Outra possibilidade - já que você fez backup da configuração desejada wsl --export
, você sempre pode apenas wsl --import
fazer isso em uma nova instância chamada Ubuntu
.
- Primeiro, você precisa desinstalar a Loja
Ubuntu
. - Em seguida, escolha um diretório para sua nova instância. Ele pode estar em qualquer lugar e não precisa mais ficar no seu
AppData
diretório. wsl --import Ubuntu <directory> path\to\2021-09-26_Ubuntu-20.04_backup.tar --version 2
Eu mantenho o meu %userprofile%\Documents\WSL\instances
e meus tar
backups no formato %userprofile%\Documents\WSL\images
. Isso me permite criar rapidamente novas instâncias via wsl --import
. É bom poder testar algo sem impactar meu ambiente diário.
Nota para qualquer usuário WSL1 que esteja lendo isto. Os rootfs para WSL1 não são armazenados em um arquivo HDD virtual, mas como arquivos e diretórios reais em ...\LocalState\rootfs\
. Por favor, não acesse esses arquivos diretamente, pois isso pode facilmente causar corrupção no sistema de arquivos WSL (consulteDevblog da Microsoft).
Se você precisar simplesmente acessar os arquivos do Windows, use o \\wsl$\<distro>
caminho no Windows conforme indicado no blog da Microsoft. Mas se você precisar copiar tudo, como nesta questão, a melhor aposta seria primeiro converter a instância para WSL2, via wsl --set-version <distro> 2
(faça um wsl --export
backup primeiro). Após a conversão, o sistema de arquivos estará no ext4.vhdx
formato WSL2.