# WSL2 磁碟空間清理 ## 問題發現 工作上很常使用 Docker Image 去建立相關的 container,因為會一直做測試,導致 cache 檔案愈來愈大。後來執行 `docker system prune -a` 指令後,發現C 槽空間仍然被大量佔用,特別是在 WSL2 環境下。 發現一個驚人的事情 drivers 的空間被占用到很誇張,所以這篇筆記就是要去解決磁碟空間的問題。 :::success drivers 454G 425G 29G 94% /usr/lib/wsl/drivers ::: ![圖片](https://hackmd.io/_uploads/ryt9LxcUyx.png) > Q: 為什麼 `docker system prune -a` 無法完全釋放空間? A: 因為 WSL2 的虛擬硬碟檔案 (vhdx) 不會自動縮小,**需要手動壓縮**。 ## 解決方法 ### 步驟 1: 關閉 Docker Desktop 1. 完全關閉 Docker Desktop 2. 在命令提示字元(CMD)中執行: ```bash wsl --shutdown ``` ![圖片](https://hackmd.io/_uploads/rJOPveqUyl.png) ### 步驟 2: 清理虛擬硬碟空間 1. 透過 Powershell 找尋 ext4.vhdx ,會在`C:\Users\{使用者名稱}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_{版本}\LocalState` 資料夾底下,並查看大小 ``` (Get-ChildItem -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB ``` ![圖片](https://hackmd.io/_uploads/BJ1tYe58Jx.png) 2. 開啟命令提示字元(CMD) 3. 在命令提示字元(CMD)中執行,會跳出一個視窗 ```bash diskpart ``` ![圖片](https://hackmd.io/_uploads/BJ-kdl98Jl.png) 接著開始解壓縮檔案。 ``` select vdisk file="C:\Users\[你的使用者名稱]\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu[你的版本]\LocalState\ext4.vhdx" compact vdisk detach vdisk exit ``` ![圖片](https://hackmd.io/_uploads/ByYuce9Uyg.png) 依序做完後就可以回去檢查是否已經清掉大部分的空間。 ![圖片](https://hackmd.io/_uploads/BJfBoecL1g.png)