cómo mover ubuntu en WSL

cómo mover ubuntu en WSL

Cuando comencé a desarrollar, WSLno sé por qué, pero instalé Ubuntu-20.04una aplicación de la tienda de Microsoft en lugar de solo Ubuntu. Sé que la única diferencia es que Ubuntu-20.04no se actualizará automáticamente cuando Ubuntuse lance la nueva versión. Todo lo que quiero hacer es hacer Ubuntulo mismo Ubuntu-20.04sin reconfigurarlo. Pensé en mover todos los archivos de Ubuntu-20.04a 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-2Lo he comprobado usando wsl -l -vcomo dijo @ NotTheDr01ds.

Ubuntu-20.04edición 2: quiero que toda mi configuración Ubuntuincluya 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) en C:\Program Files\WindowsApps\CanonicalGroup.... Puede ver esto iniciando un PowerShell administrativo y ejecutando Get-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:

  1. Anule el registro de la instancia (lo que elimina toda la configuración) y vuelva a configurarla ejecutando nuevamente el ubuntu.execomando.
  2. Quiere usar eso install.tar.gzpara crear una segunda instancia de WSL/Ubuntu (usando wsl --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 Ubuntuse actualice a (presumiblemente) 22.04, no cambiará suinstaladoinstancia de 20.04, solo los rootfspaquete.

Aún necesitarás ejecutar una sudo do-release-upgrade -dcuando finalmente quieras actualizar a 22.04 (o una versión provisional).

Entonces, dado que... Dado que ya tiene su Ubuntu-20.04configuración configurada de la manera que desea, no tiene ninguna gran ventaja cambiarla, aparte de obtener un Ubuntunombre 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 ( Ubuntuy Ubuntu-20.04), encontrará dos de estos ext4.vhdxarchivos 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 --shutdownpara 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.vhdxsobre el recién instalado (Ubuntu). El verdadero truco es simplemente asegurarse de copiar el correcto. Es posible que desee ejecutar su Ubuntu-20.04distribució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 --importen 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 AppDatadirectorio.
  • wsl --import Ubuntu <directory> path\to\2021-09-26_Ubuntu-20.04_backup.tar --version 2

Mantengo el mío %userprofile%\Documents\WSL\instancesy mis tarcopias 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 --exportcopia de seguridad primero). Después de la conversión, el sistema de archivos estará en ext4.vhdxformato WSL2.

información relacionada