Mover WSL a otra unidad en Windows

Subsistema de Windows para Linux (WSL2) es ampliamente utilizado por desarrolladores, administradores y usuarios comunes para ejecutar diferentes distribuciones de Linux (Ubuntu, Debian, OpenSUSE, Kali Linux, Alpine), herramientas y aplicaciones en Windows sin utilizar la virtualización y el arranque dual. En este artículo, le mostraremos cómo mover los archivos de una instalación de WSL existente a una unidad o computadora diferente.

Cuando instala WSL en Windows, todos los archivos de entorno se guardan en la unidad del sistema C:. Si la unidad de su sistema no es lo suficientemente grande (por ejemplo, SSD), el tamaño del sistema de archivos WSL puede crecer significativamente y es posible que deba mover WSL a otra unidad o computadora. Puede mover su instalación de WSL de varias maneras.

Primero, obtenga el tamaño actual del sistema de archivos WSL en su disco actual. Enumere las distribuciones WSL instaladas en su computadora:

wsl --list --verbose

lista de imágenes wsl instaladas en windows

En este ejemplo, solo está instalado Ubuntu-20.04. Ejecute el siguiente comando de PowerShell para obtener el nombre de la aplicación UWP con sus distribuciones de Linux:

Get-AppxPackage -Name "*Ubuntu20*" | Select PackageFamilyName

En mi ejemplo, el nombre del paquete UWP es CanonicalGroupLimited.Ubuntu20.04 en Windows_79rhkp1fndgsc. El sistema de archivos WSL de la imagen de Linux se encuentra en el ext4.vhdx archivo VHD en %USERPROFILE%AppDataLocalPackagesCanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgscLocalStateext4.vhdx.

Para obtener un tamaño de archivo con PowerShell, ejecute el siguiente comando:

$path= $env:USERPROFILE+ "AppDataLocalPackages" + (Get-AppxPackage -Name "*Ubuntu20*").PackageFamilyName + "LocalStateext4.vhdx"
Get-ChildItem -Path $path | fl @{Label="SizeGb"; Expression={$_.Length / 1Gb}}

obtener la imagen del sistema de archivos wsl - ext4.vhdx

La ruta al archivo VHD de la distribución WSL se almacena en el BasePath parámetro de registro bajo la clave de registro HKCUSoftwareMicrosoftWindowsCurrentVersionLxss{UUID}.

Puede detener WSL, mover ext4.vhdx a otra unidad y cambiar la ruta al directorio en el registro. Pero este escenario es no recomendado!

En las compilaciones actuales de Windows 10 y 11, puede migrar su entorno WSL correctamente mediante el procedimiento integrado de exportación e importación.

Ejecute el entorno WSL y verifique el nombre de usuario:

wsl
whoami

En nuestro ejemplo, es operadores del sistema.

wsl: obtener el nombre de usuario whoami

Cierre todas las aplicaciones que se ejecutan en su entorno Linux y consola WSL:

wsl --shutdown

Para hacer una copia de seguridad (exportar) de su entorno WSL y guardarlo en una unidad E:, ejecute los comandos:

mkdir e:backup
wsl --export Ubuntu-20.04 e:backupubuntu.tar

Espere hasta que finalice la exportación de WSL (puede llevar mucho tiempo). Aparecerá un archivo TAR con su sistema de archivos WSL ext4 en el directorio de destino.

mover el sistema de archivos wsl a otra unidad

Luego, puede eliminar los archivos WSL en el disco de origen:

wsl --unregister Ubuntu-20.04

Cree un directorio para su imagen de Linux en una nueva unidad e importe el archivo TAR a WSL con este comando:
mkdir E:WSL
wsl --import Ubuntu-20.04 E:WSL E:backupubuntu.tar

El inicio de sesión predeterminado en Ubuntu es root. Para cambiarlo a otro nombre de usuario (lo obtuvimos antes), ejecute:

cd $env:USERPROFILEAppDataLocalMicrosoftWindowsApps
.ubuntu2004.exe config --default-user sysops

Inicie el entorno WSL:

wsl -d Ubuntu-20.04

iniciar wsl

Consejo. Puede iniciar su distribución WSL desde la pestaña Terminal de Windows. ejecutar wsl desde la terminal de Windows

Puede usar el mismo escenario para mover una imagen WSL configurada a otras computadoras.

Puede utilizar una utilidad de terceros LxRunFuera de línea (disponible en GitHub — https://github.com/DDoSolitary/LxRunOffline) para mover WSL en Windows. Puedes instalarlo usando Chocolatey:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
choco install lxrunoffline

Lista de imágenes WSL disponibles:

lxrunoffline list

Finalice todos los procesos de WSL:

wsl --shutdown

Para obtener el directorio actual, la imagen de WSL se encuentra en:

lxrunoffline get-dir -n Ubuntu-20.04

usando lxrunoffline para mover wsl

Para mover una imagen WSL a otro disco:

lxrunoffline move -n Ubuntu-20.04 -d d:wsl2Ubuntu-20.04

Una vez completada la migración, inicie WSL con este comando:

wsl -d Ubuntu-20.04

o

lxrunoffline run -n Ubuntu-20.04 -w

Artículos Interesantes