Reducir Tamaño De Un Disco Virtual WSL
Mientras organizaba algunos archivos en mi equipo, noté que me estaba quedando sin espacio en mi unidad primaria. Hice un barrido con windirstat para identificar los archivos de mayor tamaño y encontré que los dos de mayor tamaño eran imágenes de WSDL.
Para cualquiera de las dos opciones vas a necesitar conocer la ruta al archivo .vhdx que deseamos reducir. Este es el tipo de archivo de imagen de WSL (desconozco si se usa para otro fin).
En mi caso el mismo se ubica en C:\Users\<mi-usuario>\AppData\Local\Docker\wsl\data\ext4.vhdx
pero podría variar en tu instalación, así que te recomiendo que lo ubiques antes de continuar.
Opción 1: usar optimize-vhd
Primero, verifiquemos si contamos con esta utilidad en nuestra instalación de Windows ejecutando: optimize-vhd
Si es el caso, continuemos. Primero vamos a detener WSL y acto seguido ejecutar la optimización.
wsl --shutdown
optimize-vhd -Path C:\Users\<mi-usuario>\AppData\Local\Docker\wsl\data\ext4.vhdx -Mode full
Durante el proceso se va a mostrar un mensaje similar al siguiente:
Compactar disco virtual
10 %
[oooooooooo ]
Opción 2: usar diskpart
Primero, necesitamos detener WSL si se está ejecutando. Para esto listamos las distribuciones instaladas ejecutando wsl.exe --list --verbose
NAME STATE VERSION
* Ubuntu-20.04 Running 2
docker-desktop-data Running 2
docker-desktop Running 2
En mi caso las máquinas están asociadas a docker desktop, por lo que para detenerlas simplemente accedo al menú contextual de Docker Desktop desde el ícono del área de notificación y elijo la opción “Quitar docker desktop”. Y, por si acaso, verifico nuevamente que estén las máquinas detenidas.
NAME STATE VERSION
* Ubuntu-20.04 Stopped 2
docker-desktop-data Stopped 2
docker-desktop Stopped 2
Si el anterior no es tu caso, ó si no se detienen todas las instancias, ejecuta wsl.exe --terminate nombre-maquina
.
Ahora vamos a usar diskpart para reducir el tamaño de la imagen WSL. Recomiendo hacer una copia de seguridad de este archivo antes de proceder.
> diskpart
Copyright (C) Microsoft Corporation.
En el equipo: DESKTOP-KUR0NGU
DISKPART>
En la consola de diskpart ejecutamos:
> select vdisk file="C:\Users\<mi-usuario>\AppData\Local\Docker\wsl\data\ext4.vhdx"
DiskPart seleccionó correctamente el archivo de disco virtual.
…y compactamos la imagen:
> compact vdisk
100 por ciento completado
DiskPart compactó correctamente el archivo de disco virtual.
Va a tardar unos cuantos minutos, dependiendo del disco que tengas y del tamaño de la imagen en cuestión. Una vez terminado, podemos cerrar la consola de diskpart.
En mi caso, la imagen se redujo de 83GB a 73GB. Algo es algo. En cuanto al rendimiento, por lo que he visto no hay diferencia entre las dos opciones presentadas.
Nota para mi yo del futuro: montar las imágenes de WSL en otra unidad física :)