Ringkas: WSL 2 dapat membuat file disk virtual distro Linux tetap besar di Windows meski file di dalam Linux sudah dihapus. Ruang itu bisa direklamasi dengan DiskPart atau skrip PowerShell WSL-VHDX-Optimizer.
WSL memungkinkan Anda beralih ke Linux tanpa kehilangan alur kerja Windows. Namun, salah satu masalah WSL adalah disk virtualnya tidak otomatis mengosongkan ruang yang sudah tidak dipakai, sehingga distro WSL kemungkinan memakai storage Windows jauh lebih besar dari yang Anda kira.
Kabar baiknya, ruang yang terbuang itu bisa diambil kembali dengan memadatkan hard disk virtual WSL secara manual menggunakan DiskPart, tool bawaan Windows. Jika tidak ingin melakukan proses manual setiap kali, skrip PowerShell juga bisa mengotomatiskan seluruh prosesnya.
Mengapa disk virtual WSL tidak mengecil sendiri
Setiap distro WSL 2 yang Anda instal memiliki hard disk virtual sendiri, yang disimpan di drive Windows sebagai file ext4.vhdx. Disk ini bersifat dynamically expanding: ukurannya bertambah saat Anda menambahkan file, tetapi pertumbuhan itu hanya berjalan satu arah.
Ketika Anda menghapus file di dalam distro Linux, WSL membebaskan ruang di dalam disk virtual. Namun, Windows tidak diberi tahu untuk mengecilkan file .vhdx agar sesuai. Blok yang sebelumnya ditempati file tersebut ditandai kosong dan dibiarkan begitu saja, tetapi tetap dihitung sebagai pemakaian di drive Windows.
Bagian yang membingungkan adalah semuanya tampak normal dari dalam WSL. Jika menjalankan df -h di distro, Anda akan melihat banyak ruang kosong, karena Linux menganggap file yang dihapus sudah hilang. Masalahnya baru terlihat dari sisi Windows, tempat ext4.vhdx tetap memakai ruang sebesar ukuran maksimum yang pernah dicapainya.
Jika Anda pengguna WSL berat yang sering menarik image Docker, memasang dan menghapus paket, atau meng-clone lalu menghapus repo, selisih antara “ruang yang dipakai di Linux” dan “ruang yang dicadangkan di Windows” bisa bertambah hingga banyak gigabyte seiring waktu.
Windows tidak memberi peringatan atau memberi tahu bahwa disk virtual milik distro tertentu sudah membengkak. Satu-satunya cara untuk mengetahuinya adalah mencari file tersebut sendiri.
Cara mengecek pemakaian storage WSL yang sebenarnya
Sebelum mereklamasi ruang, Anda membutuhkan dua hal: konfirmasi bahwa Anda menjalankan WSL 2, karena pemadatan hanya berlaku di sana, dan path file ke disk virtual distro Anda. Buka PowerShell atau Command Prompt sebagai Administrator, lalu jalankan:
wsl --statusPerintah ini menampilkan versi klien WSL dan apakah distro default Anda berjalan di WSL 2. Jika Anda memasang lebih dari satu distro, jalankan wsl.exe --list --verbose untuk melihat semua distro beserta versi WSL yang dipakai masing-masing. Distro apa pun yang menampilkan Version 2 menjadi kandidat untuk dipadatkan.
Berikutnya, cari lokasi Windows menyimpan disk virtual. File setiap distro berada di sebuah registry key, dan Anda bisa mengambil path-nya dengan potongan PowerShell ini:
(Get-ChildItem `
-Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss `
| Where-Object { $_.GetValue("DistributionName") -eq 'Ubuntu' } `
| Get-ItemProperty `
| Select-Object -First 1).BasePath + "\ext4.vhdx"Ganti Ubuntu dengan nama persis dari output --list --verbose. Perintah ini menyusun path lengkap ke file disk virtual, biasanya sesuatu seperti C:\Users\.
Cara mengambil kembali ruang storage dengan DiskPart
Setelah memiliki path ke file ext4.vhdx milik distro, prosesnya terdiri dari lima perintah. Pertama, matikan WSL sepenuhnya karena DiskPart tidak bisa menyentuh disk virtual saat sedang dipakai:
wsl.exe --shutdownLalu jalankan DiskPart dari jendela admin yang sama dan arahkan ke disk virtual Anda:
diskpart
select vdisk file="C:\Users\username\AppData\path\to\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exitAda beberapa hal yang perlu diperhatikan. Memasang disk dalam mode read-only penting karena proses pemadatan hanya perlu memindai blok mana yang kosong, bukan menulis apa pun ke filesystem Linux. Mode read-only memastikan DiskPart tidak dapat mengubah file distro saat bekerja.
Jangan melewati langkah detach vdisk, meskipun pemadatan sudah selesai pada titik itu. Jika dilewati, file akan tetap terkunci, sehingga WSL tidak dapat mengaksesnya lagi sampai Anda melakukan reboot.
Langkah compact vdisk bisa memakan waktu beberapa menit, tergantung seberapa membengkak file tersebut. Tunggu sampai pesan “DiskPart successfully compacted the virtual disk file” muncul sebelum melanjutkan. Setelah selesai, jalankan ulang distro dengan wsl -d YOURDISTRONAME dan gunakan df -h untuk memastikan semuanya masih berfungsi. Dari sisi Windows, file .vhdx seharusnya terlihat jauh lebih kecil.
Otomatisasi pemadatan WSL dengan skrip PowerShell
Membersihkan DiskPart secara manual setiap kali file .vhdx membengkak bisa merepotkan. WSL-VHDX-Optimizer adalah skrip PowerShell yang dibuat untuk masalah ini. Mulailah dengan meng-clone atau mengunduh repo, lalu jalankan pemeriksaan read-only terlebih dahulu untuk melihat berapa banyak ruang yang bisa direklamasi:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Optimize-WslDisk.ps1 -InventoryPerintah ini memberi laporan ukuran untuk distro yang terpasang tanpa menyentuh apa pun. Saat Anda siap mengambil kembali ruang, jalankan skrip dari prompt dengan hak administrator:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Optimize-WslDisk.ps1Di balik layar, skrip menemukan distro melalui registry, menjalankan fstrim di dalam masing-masing distro untuk menandai blok yang sudah dibebaskan, mematikan WSL, lalu memadatkan setiap disk virtual memakai Hyper-V atau DiskPart sebagai backend. Setelah itu, skrip melaporkan ruang nyata yang berhasil dipulihkan berdasarkan alokasi file aktual, bukan hanya ukuran logis yang dilaporkan Windows.
Beberapa parameter yang berguna antara lain -Distro.
Ada satu hal yang perlu dicatat: dokumentasi tool ini menyarankan untuk tidak menjalankannya secara terjadwal secara membabi buta. Rekomendasinya adalah memicunya setelah kejadian yang meninggalkan banyak ruang kosong, seperti memangkas container Docker atau melakukan pembersihan paket besar, bukan menjalankannya otomatis tanpa pengawasan. Alasannya, pemadatan kadang-kadang justru dapat meningkatkan ukuran disk, bukan mengecilkannya, sehingga menjalankannya tanpa pengawasan bukan tanpa risiko.
Dalam kasus penulis sumber, pemadatan menurunkan file .vhdx distro Ubuntu dari sekitar 100 GB menjadi kira-kira 15 GB. Itu jumlah ruang yang signifikan untuk hilang diam-diam di sebuah drive, terutama jika Anda memakai SSD yang lebih kecil dan setiap gigabyte terasa penting. Hasil Anda akan bergantung pada seberapa banyak sisa file yang menumpuk, tetapi jika Anda sudah memakai WSL cukup lama, perbedaannya kemungkinan lebih besar dari yang diperkirakan.
Disarankan untuk mencadangkan distro sebelum menjalankan pemadatan untuk pertama kalinya, demi keamanan. Namun, berdasarkan pengalaman penulis sumber, proses ini tidak menimbulkan masalah data. Jika Anda rutin membersihkan file dan folder Windows yang tidak perlu untuk mengosongkan ruang disk, menambahkan pemadatan WSL ke rutinitas tersebut layak dilakukan, terutama karena Windows tidak akan melakukannya untuk Anda.
Poin penting
- WSL 2 memakai ext4.vhdx
- Disk virtual tidak mengecil otomatis
- DiskPart bisa memadatkan VHDX
- WSL-VHDX-Optimizer untuk otomatisasi
- Backup distro sebelum pemadatan
FAQ
Mengapa file .vhdx WSL tetap besar?
WSL membebaskan ruang di dalam disk virtual saat file Linux dihapus, tetapi Windows tidak otomatis mengecilkan file .vhdx yang tersimpan di drive Windows.
Apakah pemadatan WSL berlaku untuk semua versi?
Pemadatan yang dibahas berlaku untuk distro WSL 2. Anda bisa mengecek versi dengan wsl --status atau wsl.exe --list --verbose.
Apakah skrip otomatis aman dijalankan terjadwal?
Dokumentasi tool menyarankan untuk tidak menjalankannya secara terjadwal tanpa pengawasan, karena pemadatan kadang bisa meningkatkan ukuran disk alih-alih mengecilkannya.
Sumber: https://www.makeuseof.com/wsl-distro-windows-storage-usage/