Cómo corregir el archivo vhdx de WSL2 que crece más de 50 GB y reducirlo en Windows 11
🔍 WiseChecker

Cómo corregir el archivo vhdx de WSL2 que crece más de 50 GB y reducirlo en Windows 11

El archivo de disco duro virtual de WSL2, el vhdx, puede crecer más de 50 GB incluso si eliminas archivos dentro de la distribución de Linux. El archivo vhdx no se reduce automáticamente cuando eliminas datos. Este artículo explica por qué el archivo vhdx sigue creciendo y cómo recuperar espacio en disco reduciéndolo.

Puntos clave: Reducir un archivo vhdx de WSL2 demasiado grande

  • Comando diskpart select vdisk file=C:\Users\\AppData\Local\Packages\...\ext4.vhdx y luego compact vdisk: Reduce el archivo vhdx después de poner a cero el espacio libre dentro de la distribución de Linux.
  • Comando WSL2 wsl --shutdown: Apaga todas las distribuciones de WSL2 para que el vhdx no esté bloqueado y pueda compactarse.
  • Comando de Linux sudo fstrim /: Marca todos los bloques no utilizados como libres dentro del sistema de archivos ext4, lo que diskpart necesita antes de poder reducir el vhdx.

ADVERTISEMENT

Por qué el archivo vhdx de WSL2 crece más de 50 GB

WSL2 utiliza un disco duro virtual de expansión dinámica en formato vhdx. El archivo comienza pequeño y crece a medida que agregas datos dentro de la distribución de Linux. Cuando eliminas archivos, el sistema de archivos ext4 marca esos bloques como libres, pero no le dice al archivo vhdx subyacente que libere el espacio. El archivo vhdx se mantiene en su tamaño máximo hasta que lo compactas manualmente.

El archivo vhdx se encuentra en C:\Users\\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu..._\LocalState\ext4.vhdx. Si ejecutas varias distribuciones de WSL2, cada una tiene su propio archivo vhdx. El tamaño máximo predeterminado de un vhdx de WSL2 es de 256 GB, pero puede crecer a cualquier tamaño que permita tu disco. Muchos usuarios informan que el vhdx alcanza 50 GB, 100 GB o más incluso después de limpiar archivos dentro de WSL2.

La causa raíz es que el formato vhdx no reclama espacio automáticamente cuando el sistema de archivos interno libera bloques. Debes ejecutar explícitamente un proceso de dos pasos: primero poner a cero el espacio libre dentro de la distribución de Linux y luego compactar el archivo vhdx usando la herramienta diskpart de Windows.

Pasos para reducir el archivo vhdx de WSL2 en Windows 11

Sigue estos pasos en orden. Necesitas acceso de administrador para ejecutar diskpart. El proceso toma unos minutos dependiendo del tamaño de tu archivo vhdx.

  1. Abre tu distribución de WSL2 y ejecuta fstrim
    Inicia tu terminal de WSL2. Ejecuta el comando sudo fstrim /. Esto le dice al sistema de archivos ext4 que marque todos los bloques no utilizados como libres. Es posible que debas ingresar tu contraseña de Linux. El comando se completa rápidamente si no lo has ejecutado recientemente.
  2. Apaga todas las distribuciones de WSL2
    Abre un símbolo del sistema o PowerShell de Windows como administrador. Ejecuta wsl --shutdown. Esto detiene todas las instancias de WSL2 en ejecución y desbloquea el archivo vhdx para que diskpart pueda acceder a él.
  3. Abre diskpart
    En el mismo símbolo del sistema o PowerShell de administrador, escribe diskpart y presiona Enter. La herramienta diskpart se inicia con un nuevo prompt DISKPART>.
  4. Selecciona el archivo vhdx
    En el prompt de DISKPART, escribe select vdisk file="C:\Users\\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu..._\LocalState\ext4.vhdx". Reemplaza la ruta con la ubicación exacta de tu archivo vhdx de WSL2. Si tienes varias distribuciones, repite este paso para cada una. Presiona Enter. diskpart confirma con DiskPart successfully selected the virtual disk file.
  5. Compacta el archivo vhdx
    Escribe compact vdisk y presiona Enter. diskpart comienza a compactar el archivo vhdx. Esto puede tomar varios minutos para archivos grandes. No cierres la ventana durante este proceso. Cuando termine, diskpart muestra DiskPart successfully compacted the virtual disk file.
  6. Sal de diskpart
    Escribe exit y presiona Enter para cerrar diskpart. Ahora puedes reiniciar tu distribución de WSL2. Ejecuta wsl en un símbolo del sistema normal para iniciarla.

Después de compactar, verifica el nuevo tamaño del archivo vhdx en el Explorador de archivos. El archivo debería ser significativamente más pequeño. Repite este proceso cada pocos meses o cada vez que elimines grandes cantidades de datos dentro de WSL2.

ADVERTISEMENT

Problemas comunes al reducir el archivo vhdx de WSL2

diskpart dice que el vdisk no está seleccionado o está en uso

Este error ocurre si una distribución de WSL2 todavía está en ejecución. Ejecuta wsl --shutdown nuevamente y verifica con wsl --list --running que no haya distribuciones listadas. También cierra cualquier ventana del Explorador de archivos que muestre el archivo vhdx o su carpeta principal.

El comando fstrim devuelve un error o no está disponible

Algunas distribuciones antiguas de WSL2 pueden no admitir fstrim. Actualiza tu distribución con sudo apt update && sudo apt upgrade en Ubuntu o el equivalente para tu distribución. Si fstrim aún falla, puedes ejecutar sudo dd if=/dev/zero of=/tmp/zero bs=1M para llenar el espacio libre con ceros y luego eliminar el archivo con sudo rm /tmp/zero. Esto logra el mismo efecto que fstrim pero tarda más.

El archivo vhdx no se reduce después de compactar

Si no ejecutaste fstrim antes de compactar, el vhdx puede no reducirse en absoluto. El comando compact vdisk solo reclama espacio que el sistema de archivos ha marcado como libre. Ejecuta fstrim nuevamente y luego repite los pasos de apagado y diskpart. También asegúrate de estar compactando el archivo vhdx correcto. Cada distribución de WSL2 tiene su propio archivo en una carpeta separada bajo LocalState.

WSL2 no se inicia después de compactar

Esto es raro. Si WSL2 no se inicia, ejecuta wsl --shutdown y luego wsl nuevamente. Si el problema persiste, reinicia Windows. La operación compact vdisk no modifica el sistema de archivos dentro del vhdx, solo el archivo contenedor en sí, por lo que la corrupción de datos es poco probable.

Elemento Antes de compactar Después de compactar
Tamaño del archivo vhdx 50 GB o más Reducido al tamaño real de los datos
Datos dentro de WSL2 Sin cambios Sin cambios
Espacio libre dentro de WSL2 No recuperable por vhdx Recuperable por vhdx después de fstrim
Comandos requeridos Ninguno fstrim, wsl –shutdown, diskpart compact vdisk

Conclusión

Ahora puedes reducir un archivo vhdx de WSL2 demasiado grande en Windows 11 ejecutando fstrim dentro de la distribución de Linux, apagando WSL2 y usando diskpart para compactar el vhdx. Este proceso recupera espacio en disco sin afectar tus datos. Para mantenimiento continuo, programa fstrim para que se ejecute automáticamente usando un trabajo cron o un temporizador systemd dentro de WSL2. Ejecuta la operación de compactación cada tres meses para mantener el tamaño del archivo vhdx bajo control.

ADVERTISEMENT