
Cuando comencé a desarrollar, WSL
no sé por qué, pero instalé Ubuntu-20.04
una aplicación de la tienda de Microsoft en lugar de solo Ubuntu
. Sé que la única diferencia es que Ubuntu-20.04
no se actualizará automáticamente cuando Ubuntu
se lance la nueva versión. Todo lo que quiero hacer es hacer Ubuntu
lo mismo Ubuntu-20.04
sin reconfigurarlo. Pensé en mover todos los archivos de Ubuntu-20.04
a Ubuntu
, pero no sé si hacerlo es seguro. ¿Alguien sabe cómo hacer lo que estoy intentando hacer? ¿También debería hacerlo?
editar: ambas versiones de ubuntu se están ejecutando. WSL-2
Lo he comprobado usando wsl -l -v
como dijo @ NotTheDr01ds.
Ubuntu-20.04
edición 2: quiero que toda mi configuración Ubuntu
incluya todos los archivos y paquetes instalados
Respuesta1
Por qué es posible que no necesites hacer esto en absoluto
Bueno, lo primero es lo primero. Probablemente esto sea bastante innecesario.
El hecho de que el "Ubuntu" (sin número de versión) en la Tienda se actualice automáticamente es... cierto, pero en realidad un poco engañoso.
Esto es un poco difícil de explicar, pero cuando instalas "Ubuntu" (sin versión) desde la Tienda, en realidad terminas condoscosas:
Un paquete rootfs (
install.tar.gz
) enC:\Program Files\WindowsApps\CanonicalGroup...
. Puede ver esto iniciando un PowerShell administrativo y ejecutandoGet-ChildItem -Recurse 'C:\Program Files\WindowsApps\Canonical*' | Where-Object {$_.Name -eq 'install.tar.gz' } | % { $_.DirectoryName }
.Cuando se ejecuta por primera vez (a través de
ubuntu.exe
), el instalador crea su instancia WSL real en su archivo%UserProfile%\AppData\Local\Packages\CanonicalGroup...
.
Cuando hay una nueva versión en la Tienda, lo único que se actualiza es el paquete rootfs. Lo hacenocambia tu instaladoinstancia. (Crédito y gracias a u/zoredache en Reddit que mantienerecordándome esto.)
Esto es bastante inútil para la mayoría de los usuarios a menos que usted:
- Anule el registro de la instancia (lo que elimina toda la configuración) y vuelva a configurarla ejecutando nuevamente el
ubuntu.exe
comando. - Quiere usar eso
install.tar.gz
para crear una segunda instancia de WSL/Ubuntu (usandowsl --import
). La instancia recién creada usaría rootfs actualizados en la tienda.
Ninguno de estos escenarios es muy común. Incluso cuando la Tienda sin versión Ubuntu
se actualice a (presumiblemente) 22.04, no cambiará suinstaladoinstancia de 20.04, solo los rootfspaquete.
Aún necesitarás ejecutar una sudo do-release-upgrade -d
cuando finalmente quieras actualizar a 22.04 (o una versión provisional).
Entonces, dado que... Dado que ya tiene su Ubuntu-20.04
configuración configurada de la manera que desea, no tiene ninguna gran ventaja cambiarla, aparte de obtener un Ubuntu
nombre más corto y más limpio para la instancia WSL.
¿Cómo hacerlo de todos modos?
Dicho esto, por la forma en que WSL2 almacena sus datos, no es tan difícil mover las configuraciones. Todo el sistema de archivos de una instancia WSL2 se almacena en un disco duro virtual llamado ext4.vhdx
.
Dado que tiene dos instalaciones de Ubuntu ( Ubuntu
y Ubuntu-20.04
), encontrará dos de estos ext4.vhdx
archivos en %userprofile%\AppData\Local\Packages\
. Para obtener las ubicaciones exactas, ejecute lo siguiente desde PowerShell:
Get-ChildItem "$env:USERPROFILE\AppData\Local\Packages\CanonicalGroupLimited*\LocalState\*"
Para mi instalación, eso es:
...\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
...\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
La solución puede ser bastante obvia en este punto, pero tenga cuidado, por supuesto:
Salga de todas sus instancias WSL en ejecución.
Luego,
wsl --shutdown
para asegurarse de que no se esté ejecutando nada actualmente.Una copia de seguridad de su configuración existente no sería una mala idea
wsl --export Ubuntu-20.04 2021-09-26_Ubuntu-20.04_backup.tar
(o como quiera llamar al archivo de copia de seguridad). Básicamente, esto crea un tarball de los rootfs actuales, incluidos todos los archivos, propiedad y permisos.En ese punto, simplemente copie el que desee (Ubuntu-20.04)
ext4.vhdx
sobre el recién instalado (Ubuntu). El verdadero truco es simplemente asegurarse de copiar el correcto. Es posible que desee ejecutar suUbuntu-20.04
distribución y realizar un cambio rápido para poder ver fácilmente la última marca de tiempo en la copia "correcta".
El único requisito real es que el usuario predeterminado para ambas instancias sea el mismo.
Otra posibilidad: dado que realizó una copia de seguridad de la configuración deseada con wsl --export
, siempre puede hacerlo wsl --import
en una nueva instancia llamada Ubuntu
.
- Primero, necesitarás desinstalar la Tienda
Ubuntu
. - Luego elija un directorio para su nueva instancia. Puede estar en cualquier lugar y ya no tiene que estar en su
AppData
directorio. wsl --import Ubuntu <directory> path\to\2021-09-26_Ubuntu-20.04_backup.tar --version 2
Mantengo el mío %userprofile%\Documents\WSL\instances
y mis tar
copias de seguridad en %userprofile%\Documents\WSL\images
. Eso me permite activar rápidamente nuevas instancias a través de wsl --import
. Es bueno poder probar algo sin afectar mi entorno diario.
Nota para cualquier usuario de WSL1 que lea esto. El rootfs para WSL1 no se almacena en un archivo HDD virtual, sino como archivos y directorios reales en formato ...\LocalState\rootfs\
. No acceda a estos archivos directamente, ya que puede dañar fácilmente el sistema de archivos WSL (consulteblog de desarrollo de Microsoft).
Si simplemente necesita acceder a los archivos desde Windows, use la \\wsl$\<distro>
ruta en Windows como se indica en ese blog de Microsoft. Pero si necesita copiar todo, como en esta pregunta, la mejor opción sería convertir la instancia a WSL2 primero, a través de wsl --set-version <distro> 2
(hacer una wsl --export
copia de seguridad primero). Después de la conversión, el sistema de archivos estará en ext4.vhdx
formato WSL2.