Quando comecei a desenvolver WSL
não sei por que, mas instalei Ubuntu-20.04
o aplicativo da Microsoft Store 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 o que eu quero fazer é fazer Ubuntu
exatamente como Ubuntu-20.04
sem reconfigurá-lo. Pensei em mover todos os arquivos de Ubuntu-20.04
para Ubuntu
, mas não sei se isso é seguro. Alguém sabe como fazer o que estou tentando fazer? Também devo fazer?
edit: ambas as versões do Ubuntu estão sendo executadas WSL-2
, verifiquei usando wsl -l -v
como @NotTheDr01ds disse.
edit 2: quero que toda a minha configuração Ubuntu-20.04
inclua Ubuntu
todos os arquivos e pacotes instalados
Por que você pode não precisar fazer isso
Ok, as primeiras coisas primeiro. Isso provavelmente é bastante desnecessário.
O fato de que o "Ubuntu" (sem um número de versão) na Loja atualiza 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 com duas coisas:
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. Ele não altera sua instância instalada . (Créditos e agradecimentos a u/zoredache no Reddit, que continua me lembrando disso .)
Isso é bastante inútil para a maioria dos usuários, a menos que você:
ubuntu.exe
comando.install.tar.gz
para criar uma segunda instância do WSL/Ubuntu (usandowsl --import
). A instância recém-criada usaria então o rootfs atualizado pela Store.Nenhum desses cenários é muito comum. Mesmo quando a loja
Ubuntu
sem versão for atualizada para (presumivelmente) 22.04, ela não alterará sua instância instalada de 20.04, apenas o pacote rootfs .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 que... Como você já o
Ubuntu-20.04
configurou da maneira que deseja, não há grande vantagem em alterá-lo, além de obter umUbuntu
nome mais curto e mais limpo para a instância do WSL.Como fazer isso de qualquer maneira
Dito isso, da maneira como o WSL2 armazena seus dados, não é tão difícil mover as configurações. Todo o sistema de arquivos para uma instância WSL2 é armazenado em um HDD virtual chamado
ext4.vhdx
.Como você tem duas instalações do Ubuntu (
Ubuntu
eUbuntu-20.04
), você encontrará dois dessesext4.vhdx
arquivos em%userprofile%\AppData\Local\Packages\
. Para obter os locais exatos, execute o seguinte no PowerShell:Para minha instalação, isso é:
A solução pode ser bastante óbvia neste momento, mas tenha cuidado, é claro:
Saia de todas as instâncias WSL em execução.
Em seguida,
wsl --shutdown
para garantir que nada esteja em execução no momento.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 que você copie o caminho certo. Você pode querer executar suaUbuntu-20.04
distribuição e fazer uma mudança rápida para que você possa ver facilmente o último carimbo de data/hora na cópia "certa".O único requisito real é que o usuário padrão para ambas as instâncias seja o mesmo.
Outra possibilidade - Como você fez backup da configuração desejada com
wsl --export
, você sempre pode fazerwsl --import
isso em uma nova instância chamadaUbuntu
.Ubuntu
.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 meustar
backups em%userprofile%\Documents\WSL\images
. Isso me permite ativar rapidamente novas instâncias viawsl --import
. É bom poder testar algo sem afetar meu ambiente diário.Observação para qualquer usuário do WSL1 que estiver lendo isso. O rootfs para WSL1 não é armazenado em um arquivo HDD virtual, mas como arquivos e diretórios reais em
...\LocalState\rootfs\
. Por favor, não acesse esses arquivos diretamente, pois pode facilmente causar corrupção do sistema de arquivos WSL (consulte Microsoft devblog ).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 converter a instância para WSL2 primeiro, viawsl --set-version <distro> 2
(faça umwsl --export
backup primeiro). Após a conversão, o sistema de arquivos estará noext4.vhdx
formato WSL2.