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\y luego\AppData\Local\Packages\...\ext4.vhdx 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.
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\. 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.
- Abre tu distribución de WSL2 y ejecuta fstrim
Inicia tu terminal de WSL2. Ejecuta el comandosudo 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. - Apaga todas las distribuciones de WSL2
Abre un símbolo del sistema o PowerShell de Windows como administrador. Ejecutawsl --shutdown. Esto detiene todas las instancias de WSL2 en ejecución y desbloquea el archivo vhdx para que diskpart pueda acceder a él. - Abre diskpart
En el mismo símbolo del sistema o PowerShell de administrador, escribediskparty presiona Enter. La herramienta diskpart se inicia con un nuevo promptDISKPART>. - Selecciona el archivo vhdx
En el prompt de DISKPART, escribeselect vdisk file="C:\Users\. 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\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu..._ \LocalState\ext4.vhdx" DiskPart successfully selected the virtual disk file. - Compacta el archivo vhdx
Escribecompact vdisky 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 muestraDiskPart successfully compacted the virtual disk file. - Sal de diskpart
Escribeexity presiona Enter para cerrar diskpart. Ahora puedes reiniciar tu distribución de WSL2. Ejecutawslen 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.
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.