Guía Práctica para Reducir el Espacio en Disco de WSL

La Guía Completa para Reducir el Espacio en Disco de WSL

Esta guía proporciona una explicación detallada de las últimas soluciones al problema en el que la eliminación de archivos grandes como caché de Docker, imágenes o modelos de difusión estable dentro de WSL (Subsistema de Windows para Linux) no parece reducir el espacio en disco desde la perspectiva del sistema anfitrión de Windows.

Índice

Por Qué Eliminar Archivos en WSL No Libera Espacio en Windows

En WSL, el sistema de archivos de Linux existe virtualmente sobre el sistema de archivos de Windows. Particularmente con WSL 2, que utiliza un kernel de Linux real, el sistema de archivos se almacena dentro de un archivo VHDX (Disco Duro Virtual).

Causas Principales

  1. Características de los VHDX de Expansión Dinámica: Los archivos VHDX de WSL 2 se expanden dinámicamente pero no se contraen automáticamente incluso después de eliminar archivos.
  2. Diferencias en el Sistema de Archivos: Los métodos de gestión difieren entre el sistema de archivos Linux de WSL 2 (ext4) y el NTFS de Windows.
  3. Manejo del Espacio de Archivos Eliminados: Cuando se elimina un archivo, su espacio se marca como “no utilizado”, but el tamaño del archivo VHDX en sí no cambia.

En WSL 2, por defecto, a cada archivo VHD se le asigna una capacidad máxima de disco de 1TB (era de 512GB antes de la versión 0.58.0 de WSL, y de 256GB antes de eso).

Últimas Soluciones para 2025

Método 1: Compactación Manual con diskpart (para Windows Home/Pro)

Este método está disponible en todas las ediciones de Windows 10/11.

Paso 1: Apagar Completamente WSL 2

Importante: Debe apagar completamente WSL antes de iniciar el proceso de compactación.

# Ejecutar en PowerShell o Símbolo del sistema
wsl --shutdown

Alternativamente, puede apagarlo directamente desde WSL:

# Ejecutar dentro de WSL (p. ej., Ubuntu)
sudo shutdown now

Verificación:

wsl --list --verbose

Asegúrese de que todas las distribuciones estén en el estado “Detenido”.

Paso 2: Localizar el Archivo VHDX

Necesita encontrar la ubicación exacta de su archivo VHDX. Utilice el siguiente script de PowerShell:

# Ejecutar en PowerShell (reemplace <distribution-name> con el nombre real de su distribución)
(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | 
    Where-Object { $_.GetValue("DistributionName") -eq 'Ubuntu' }).GetValue("BasePath") + "\ext4.vhdx"

Las ubicaciones comunes incluyen:

  • Ubuntu%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
  • Debian%USERPROFILE%\AppData\Local\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\ext4.vhdx
  • Docker Desktop%USERPROFILE%\AppData\Local\Docker\wsl\data\ext4.vhdx

Paso 3: Ejecutar la Compactación con diskpart

  1. Abrir el Símbolo del sistema o PowerShell como Administrador
    • Escriba “cmd” en el Menú de Inicio
    • Seleccione “Ejecutar como administrador”
  2. Iniciar diskpart
diskpart

Verá el indicador “DISKPART>”.

  1. Seleccionar el archivo VHDX
select vdisk file="C:\Users\YourUsername\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"

Notas:

  • Asegúrese de que la ruta se ingrese correctamente.
  • Si la ruta contiene espacios, enciérrela entre comillas dobles.
  • Si la ruta es larga, puede copiar el archivo VHDX a otra ubicación (p. ej., C:\temp\) antes de continuar.
  1. Ejecutar la compactación
compact vdisk

Un mensaje de éxito se verá así:

100 por ciento completado
DiskPart compactó correctamente el archivo de disco virtual.
  1. Salir de diskpart
exit

Método 2: Usando Optimize-VHD (Solo para Windows Pro/Enterprise)

Si está utilizando las ediciones Windows Pro o Enterprise, puede usar los cmdlets de Hyper-V.

Habilitar la Característica de Hyper-V

  1. Panel de Control → Programas y características → Activar o desactivar las características de Windows
  2. Marque Hyper-V
  3. Reinicie su PC

Ejecutar la Compactación

# Ejecutar PowerShell como Administrador
wsl --shutdown

# Navegar al directorio del archivo VHDX
cd "C:\Users\YourUsername\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState"

# Ejecutar la compactación
Optimize-VHD -Path .\ext4.vhdx -Mode Full

Método 3: Utilizando la Característica de VHD Disperso (WSL 2.0.0 y posterior)

Desde WSL 2.0.0, la función de VHD disperso está disponible, mejorando la gestión automática del espacio en disco.

Configurar VHD Disperso

# Habilitar el modo disperso
wsl --manage Ubuntu --set-sparse true

# Comprobar la configuración
wsl --manage Ubuntu --get-sparse

Nota: Si habilita el modo disperso, el comando Optimize-VHD ya no funcionará. En su lugar, utilice los siguientes pasos para compactar:

# Deshabilitar temporalmente el modo disperso
wsl --manage Ubuntu --set-sparse false

# Compactar con diskpart u Optimize-VHD

# Rehabilitar el modo disperso
wsl --manage Ubuntu --set-sparse true

Pasos Previos a la Compactación para Maximizar la Efectividad

Rellenar con Ceros el Espacio Libre en el Lado de Linux

Para maximizar el efecto de la compactación, llene el espacio de los archivos eliminados con ceros:

# Ejecutar dentro de WSL (Ubuntu/Debian, etc.)
# Nota: Este proceso puede llevar mucho tiempo

# Método 1: Usando el comando dd
sudo dd if=/dev/zero of=/zero.fill bs=1M
sync
sudo rm -f /zero.fill

# Método 2: Usando fstrim (Recomendado)
sudo fstrim -v /

El comando fstrim descarta los bloques no utilizados en un sistema de archivos montado, mejorando significativamente los resultados de la compactación.

Salida de Ejemplo:

/: 24.5 GiB (26309640192 bytes) trimmed

Limpieza Adicional para Docker

Si está utilizando Docker Desktop:

# Eliminar contenedores, imágenes y volúmenes no utilizados
docker system prune -a --volumes

# Además, ejecute "Purge Data" desde la configuración de Docker Desktop → Solución de problemas

Cómo Compactar Archivos VDI de VirtualBox

Un problema similar ocurre si está utilizando VirtualBox. Puede resolverlo con los siguientes pasos:

Paso 1: Rellenar con Ceros dentro del SO Invitado

# Ejecutar en el SO invitado de Linux
sudo dd if=/dev/zero of=/zero.fill bs=1M
sync
sudo rm -f /zero.fill

Paso 2: Compactar con VBoxManage

# Ejecutar en el Símbolo del sistema
cd "C:\Program Files\Oracle\VirtualBox"
VBoxManage modifymedium --compact "C:\path\to\your\virtualdisk.vdi"

Nota: Si la ruta contiene espacios, mueva temporalmente el archivo VDI a otra ubicación.

Solución de Problemas

“Optimize-VHD” no se reconoce

Esto sucede en las ediciones de Windows Home o si Hyper-V no está habilitado. Use diskpart en su lugar.

El espacio no se reduce después de la compactación

  1. Pruebe el método de Exportar/Importar:
# Exportar
wsl --export Ubuntu ubuntu-backup.tar
   
# Desinstalar
wsl --unregister Ubuntu
   
# Re-importar
wsl --import Ubuntu C:\WSL\Ubuntu ubuntu-backup.tar
  1. Use la herramienta wslcompact: También puede usar la herramienta wslcompact disponible en GitHub.

El archivo VHDX se vuelve de solo lectura

Un apagado repentino o un corte de energía pueden hacer que el VHD de la distribución de Linux cambie al modo de solo lectura.

Pasos de reparación:

# Ejecutar en PowerShell
wsl --shutdown
wsl --mount "C:\path\to\ext4.vhdx" --vhd --bare
sudo e2fsck -f /dev/sdc  # El nombre del dispositivo puede variar
wsl --unmount

Cambios desde la Fuente Abierta de WSL (desde mayo de 2025)

El 19 de mayo de 2025, Microsoft abrió una gran parte de WSL. Esto trae:

Cambios Clave

  1. Mayor Transparencia: El código fuente ahora está disponible en GitHub, lo que permite la inspección de su funcionamiento interno.
  2. Contribuciones de la Comunidad: Ahora es posible contribuir con correcciones de errores y proponer nuevas características.
  3. Actualizaciones Más Rápidas: Las actualizaciones son independientes de Windows, lo que permite adiciones de características más rápidas.

Componentes de Código Abierto

  • wsl.exe, wslconfig.exe, wslg.exe (herramientas de línea de comandos)
  • wslservice.exe (servicio WSL)
  • Procesos de demonio de Linux (redes, reenvío de puertos, etc.)

Componentes No Abiertos

  • Lxcore.sys (controlador del kernel para WSL 1)
  • P9rdr.sys, p9np.dll (redirección del sistema de archivos \wsl.localhost)

Resumen y Resultados

En mi entorno, pude reducir un archivo VHDX de 300GB a 5GB utilizando los métodos anteriores. El efecto de reducción varía según el entorno, pero es posible un ahorro de espacio significativo con los pasos adecuados.

Puntos Clave

  1. Siempre haga una copia de seguridad (especialmente si tiene datos importantes).
  2. Apague completamente WSL antes de comenzar.
  3. Ejecute un llenado de ceros o fstrim antes de compactar.
  4. Realice un mantenimiento regular (se recomienda una o dos veces al año).

Enlaces de Referencia

If you like this article, please
Follow !

¡Comparte esta publicación!
Índice