Cómo hacer una copia de WSL2 y mover Ubuntu a otro disco

Un entorno de Ubuntu en WSL2 puede acabar guardando mucho más que unos comandos. Dentro tendremos repositorios, dependencias, claves, configuraciones y quizá una base de datos de desarrollo. Cuando la unidad C: empieza a quedarse pequeña, o vamos a cambiar de ordenador, conviene saber qué estamos moviendo y cómo recuperarlo antes de borrar nada.

En esta guía vamos a separar dos operaciones. Una copia exportada nos permite restaurar el entorno. Mover la distribución cambia dónde está guardada, pero no sustituye esa copia. Empezaría por comprobar la recuperación y después decidiría si trasladar la instalación existente o mantener una importación nueva.

Logo oficial de Ubuntu

Ubuntu es la distribución del ejemplo. Su logo pertenece a Canonical y se utiliza para identificarla en esta guía independiente.

Identificar la distribución y qué archivos queremos conservar

Los comandos wsl de los siguientes apartados se ejecutan en PowerShell de Windows, no dentro de la terminal de Ubuntu. Primero consultamos:

wsl --list --verbose
wsl --version
wsl --help

Anotamos el nombre exacto de la distribución. Puede ser Ubuntu, Ubuntu-24.04 u otro nombre. No lo sustituimos por el que nos parezca más lógico. La lista también indica si utiliza WSL1 o WSL2. Aquí trabajamos con una distribución que ya aparece con versión 2.

Si todavía estamos preparando el entorno, tenemos la guía de instalación y uso de WSL2. No hace falta reinstalarlo para hacer una copia.

También revisamos dónde están los proyectos. Un repositorio guardado en /home/ana/proyectos pertenece al espacio Linux. Un archivo que abrimos desde /mnt/c/Users/... sigue en la unidad de Windows. Microsoft explica esa distinción en su guía de sistemas de archivos.

La exportación de la distribución no debe tratarse como una copia de todas las unidades que Ubuntu puede ver. Los documentos de Windows, los datos de unidades externas y la configuración global de WSL necesitan su propia copia. Si usamos Docker Desktop, tampoco asumimos que exportar Ubuntu guarde automáticamente todos sus volúmenes.

Preparar una copia con los servicios detenidos

Guardamos el trabajo y cerramos las aplicaciones que están escribiendo dentro de Ubuntu. Si hay una base de datos de desarrollo, preparamos además su copia lógica con la herramienta correspondiente. Tener los archivos de un servicio no siempre equivale a tener una restauración limpia de sus datos.

Después detenemos la distribución concreta. En este ejemplo su nombre es Ubuntu:

wsl --terminate Ubuntu

Este comando termina sus procesos. No lo ejecutamos con trabajo sin guardar. Tampoco hace falta utilizar wsl --shutdown por costumbre si sólo queremos detener Ubuntu, porque ese otro comando afecta a todas las distribuciones y a la máquina virtual de WSL2.

Comprobamos otra vez wsl --list --verbose. Si una aplicación externa vuelve a arrancar Ubuntu, revisamos qué la está utilizando antes de continuar. No queremos una exportación mientras seguimos modificando el mismo proyecto.

Exportar Ubuntu a un archivo TAR

Elegimos un destino con espacio suficiente. El archivo puede contener claves SSH, tokens y otros datos del entorno, así que no lo ponemos en una carpeta compartida públicamente. Este ejemplo utiliza D:\Copias\WSL, que debemos sustituir por nuestro destino real:

$eslBackupFolder = "D:\Copias\WSL"
$eslBackupFile = Join-Path $eslBackupFolder "Ubuntu-copia.tar"
New-Item -ItemType Directory -Path $eslBackupFolder -Force | Out-Null
if (Test-Path $eslBackupFile) {
    throw "Ya existe esa copia. Elige otro nombre antes de exportar."
}
wsl --export Ubuntu $eslBackupFile
if ($LASTEXITCODE -ne 0) {
    throw "La exportación falló. No continúes con el traslado."
}
Get-Item $eslBackupFile

La protección del nombre evita sobrescribir una copia anterior sin darnos cuenta. El formato TAR es la opción de exportación habitual que describe Microsoft. No es un archivo cifrado sólo por ser una copia de Linux.

Que el archivo exista y tenga un tamaño razonable es una primera comprobación, no la prueba definitiva. Podemos calcular su hash para verificar que una transferencia a otro disco conserva exactamente el mismo archivo:

Get-FileHash $eslBackupFile -Algorithm SHA256

Guardamos ese valor junto al registro de la copia. Un hash sirve para comparar archivos, no demuestra por sí solo que podamos arrancar la distribución restaurada.

Restaurar con otro nombre sin borrar la instalación original

Para comprobar la copia, importamos una distribución nueva. Elegimos un nombre que no exista y una carpeta de destino vacía o todavía inexistente:

wsl --import Ubuntu-Recuperada "D:\WSL\Ubuntu-Recuperada" $eslBackupFile --version 2
if ($LASTEXITCODE -ne 0) {
    throw "La importación falló. Conserva el entorno original y la copia."
}
wsl --list --verbose

La guía de importación de distribuciones explica este procedimiento. Usar otro nombre es importante: permite probar la recuperación manteniendo la instalación anterior disponible.

Abrimos la importada con el usuario Linux que ya teníamos. Si se llamaba ana, por ejemplo:

wsl --distribution Ubuntu-Recuperada --user ana

Dentro de Ubuntu comprobamos:

whoami
pwd
ls -la ~/proyectos

La carpeta de proyectos es un ejemplo. Revisamos nuestras rutas reales, abrimos un archivo y ejecutamos una prueba del proyecto. Para una base de datos, comprobamos que se puede iniciar y consultar. Ver sólo una terminal de Ubuntu no valida todos los datos que queríamos conservar.

Si la copia importada entra como root

Una distribución importada puede no conservar la misma configuración de usuario predeterminado que el lanzador de la instalación original. No significa necesariamente que haya perdido el usuario o su carpeta. Primero probamos a entrar indicando --user, como en el apartado anterior.

En versiones actuales que ofrezcan esta opción en wsl --help, podemos seleccionar el usuario predeterminado:

wsl --manage Ubuntu-Recuperada --set-default-user ana

Sustituimos ana por un usuario que exista dentro de la distribución. No ponemos root como solución general a errores de permisos del proyecto.

Otra vía es la configuración [user] de /etc/wsl.conf, documentada por Microsoft. Si usamos ese archivo, conservamos las secciones que ya tenga y añadimos o corregimos sólo el usuario. No lo sustituimos por un ejemplo completo que cambie la red, el arranque o los montajes.

Mover WSL2 a otro disco con la opción actual

Si lo que queremos es conservar el nombre de la instalación y trasladarla, las versiones actuales incluyen --manage con --move. Comprobamos que aparezca en nuestra ayuda local. Las opciones de gestión se pueden contrastar también en la ayuda publicada con el código de WSL.

Con la copia verificada, los servicios detenidos y un destino vacío en un disco disponible:

wsl --terminate Ubuntu
wsl --manage Ubuntu --move "D:\WSL\Ubuntu"
if ($LASTEXITCODE -ne 0) {
    throw "El traslado falló. Revisa el error antes de hacer más cambios."
}
wsl --distribution Ubuntu

No creamos el traslado copiando a mano ext4.vhdx desde una carpeta de AppData. La documentación del disco de WSL2 advierte de los problemas de manipular sus archivos internos desde Windows.

Mover el disco virtual tampoco reduce automáticamente su tamaño ni convierte la unidad de destino en una copia independiente. Son operaciones diferentes. Si el disco contiene demasiados datos, revisamos qué ocupa espacio dentro de Linux antes de plantearnos redimensionados o compactaciones.

Qué hacer después del traslado

Volvemos a abrir los proyectos y comprobamos usuario, archivos y herramientas. Si entramos desde VS Code u otro programa, revisamos que siga conectando con la distribución correcta. No confundimos Ubuntu con Ubuntu-Recuperada sólo porque ambas muestren el mismo contenido inicial.

Si elegimos quedarnos con la distribución importada en vez de mover la original, mantenemos ambas hasta comprobar el trabajo real. No incluimos wsl --unregister en el primer bloque del procedimiento: elimina los datos asociados a la distribución elegida y no debe utilizarse como un simple paso de limpieza.

Una vez que decidamos retirar una instalación, anotamos el nombre exacto, comprobamos una última vez la copia y seguimos la eliminación documentada para esa distribución. No borramos carpetas de WSL a mano ni retiramos la única copia que hemos conseguido abrir.

Con esto tendremos algo más útil que un TAR guardado: una copia comprobada y una forma de trasladar el entorno sin empezar borrando lo que todavía necesitamos. ¡Un saludo!

Sergio Almela

Senior Software Engineer con más de diez años de experiencia. Escribo sobre Linux, software libre, backend, arquitectura, rendimiento, testing e IA aplicada al desarrollo.

Ver todas las entradas de Sergio Almela →