2026-09-049 dk okuma

WSL2 ve Docker Diski Neden Şişiyor? ext4.vhdx Küçültme Rehberi

Sanal Disk Büyür, Ama Asla Kendiliğinden Küçülmez

Kısa cevap: WSL2 dosya sistemini `ext4.vhdx` adlı bir sanal diskte tutar. Bu dosya ihtiyaç duydukça büyür ama içindeki dosyaları sildiğinizde KÜÇÜLMEZ. Alanı geri almak için önce dağıtımın içindeki gereksiz veriyi temizleyin, sonra `wsl --shutdown` çalıştırıp `diskpart` ile `compact vdisk` komutunu uygulayın.

Bu, "C sürücüm doldu ama neyin doldurduğunu bulamıyorum" şikâyetinin geliştiricilerdeki en yaygın sebebidir. Disk analiz araçları size 80 GB'lık tek bir dosya gösterir, siz de ona dokunmaya çekinirsiniz — çünkü sildiğinizde tüm Linux ortamınız gider. Bu rehberde o dosyanın ne olduğunu, güvenle nasıl küçültüleceğini ve bir daha şişmemesi için ne yapılacağını anlatıyoruz.

Özetle

  • WSL2 tüm Linux dosya sisteminizi tek bir `ext4.vhdx` sanal disk dosyasında tutar; bu dosya büyür ama otomatik küçülmez.
  • Dosya genellikle `%LOCALAPPDATA%\Packages\<dağıtım>\LocalState\ext4.vhdx` yolundadır; Docker Desktop ise kendi `docker_data.vhdx` dosyasını kullanır.
  • Sıra önemlidir: önce dağıtımın İÇİNDEKİ veriyi silin, sonra sanal diski sıkıştırın. Sıkıştırma yalnızca içeride boşalmış alanı geri verir.
  • Docker için `docker system prune -a --volumes` komutu çoğu zaman tek başına onlarca gigabayt boşaltır.
  • Sıkıştırma öncesi `wsl --shutdown` şarttır; dosya kullanımdayken sıkıştırılamaz.
  • WSL 2.0 ve sonrasında `.wslconfig` içine `sparseVhd=true` yazarak diskin kendiliğinden küçülmesini açabilirsiniz.

Neden Büyüyor da Küçülmüyor?

WSL2 gerçek bir sanal makinedir ve Linux dosya sisteminin tamamını Windows tarafında tek bir dosyada saklar: `ext4.vhdx`. Bu, "dinamik olarak genişleyen" bir sanal disktir. İçeride 5 GB veri varsa dosya yaklaşık 5 GB yer kaplar; 60 GB veri yazarsanız dosya 60 GB'a çıkar.

Sorun ters yönde başlar. İçeride 50 GB'lık Docker imajını sildiğinizde Linux tarafında alan boşalır, ama Windows tarafındaki VHDX dosyası aynı boyutta kalır. Sanal disk formatı boşalan blokları "artık kullanılmıyor" diye işaretler ama dosyayı fiziksel olarak kısaltmaz. Sonuç: `df -h` içeride bol boş alan gösterirken Windows'ta C sürücüsü dolu görünür.

Docker Desktop'ın WSL2 arka ucu kullanması durumu ikiye katlar. Docker kendi dağıtımını kurar ve imajları, katmanları, birimleri ayrı bir `docker_data.vhdx` dosyasında tutar. Yıllardır kullanılan bir geliştirme makinesinde bu iki dosyanın toplamı 100 GB'ı rahatlıkla geçer.

Önce İçerisi: Sıkıştırmadan Önce Ne Silinmeli?

Sıkıştırma sihir yapmaz; yalnızca içeride gerçekten boşalmış blokları geri verir. Bu yüzden ilk adım her zaman dağıtımın içini temizlemektir. Debian/Ubuntu tabanlı dağıtımlarda `sudo apt clean` indirilen paket önbelleğini, `sudo apt autoremove --purge` ise artık hiçbir paketin ihtiyaç duymadığı bağımlılıkları siler.

Docker kullanıyorsanız asıl kazanç oradadır. `docker system df` komutu imajların, konteynerlerin, birimlerin ve derleme önbelleğinin ne kadar yer kapladığını ayrı ayrı gösterir. `docker system prune -a --volumes` komutu çalışmayan her şeyi siler — dikkat edin, bu komut kullanılmayan birimleri de siler, içinde saklamak istediğiniz veritabanı varsa önce onu dışa aktarın.

Derleme önbelleği çoğu zaman en büyük kalemdir ve gözden kaçar. `docker builder prune -a` yalnızca önbelleği hedefler ve imajlarınıza dokunmaz. Node.js projelerinde ayrıca WSL içindeki `node_modules` klasörleri ve `~/.npm`, `~/.cache` dizinleri de onlarca gigabayt tutabilir.

Sıkıştırma: Alanı Windows Tarafına Geri Vermek

İçeriyi temizledikten sonra sıra sanal diski fiziksel olarak kısaltmaya gelir. Bunun ön koşulu WSL'in tamamen kapalı olmasıdır: PowerShell'de `wsl --shutdown` yazın, Docker Desktop açıksa onu da kapatın. Dosya bir süreç tarafından tutuluyorsa sıkıştırma "erişim reddedildi" hatası verir.

Yönetici yetkisiyle açılmış bir PowerShell'de `diskpart` aracını başlatın ve şu adımları sırayla uygulayın: `select vdisk file="C:\Users\ad\AppData\Local\Packages\...\ext4.vhdx"`, ardından `attach vdisk readonly`, sonra `compact vdisk`, en son `detach vdisk`. Salt okunur bağlama önemlidir; diski değiştirilebilir biçimde bağlarsanız sıkıştırma çalışmaz.

Hyper-V bileşenleri kurulu bir sistemde tek satırlık alternatif de vardır: `Optimize-VHD -Path "yol\ext4.vhdx" -Mode Full`. Bu komut Windows Home sürümlerinde bulunmaz, o yüzden `diskpart` yolu daha güvenli bir varsayılandır. İşlem bittiğinde dosya boyutunun içerideki gerçek kullanıma yaklaştığını göreceksiniz.

Bir Daha Şişmemesi İçin

WSL 2.0 sürümüyle birlikte Microsoft "seyrek" (sparse) sanal disk desteği ekledi. `%USERPROFILE%\.wslconfig` dosyasına `[experimental]` başlığı altında `sparseVhd=true` satırını yazıp `wsl --shutdown` çalıştırdığınızda, yeni oluşturulan diskler içeride alan boşaldıkça kendiliğinden küçülmeye başlar. Var olan bir dağıtımı seyrek biçime çevirmek için `wsl --manage <dağıtım> --set-sparse true` komutunu kullanabilirsiniz.

Alışkanlık tarafında iki şey işe yarar. Birincisi, Docker derleme önbelleğini düzenli aralıklarla temizlemek — `docker builder prune -a` komutunu ayda bir çalıştırmak çoğu makinede yeterlidir. İkincisi, büyük veri kümelerini WSL dosya sistemine değil, Windows tarafına koyup `/mnt/c` üzerinden erişmek; böylece veri sanal diski şişirmez.

Bu dosyaları ilk etapta fark etmek de bir sorundur, çünkü tek bir dosya olarak görünürler ve klasör boyutu hesaplayan araçlar onları öne çıkarmaz. Disk Mop'un Büyük Dosyalar (Large Files) modülü sürücüdeki en büyük dosyaları boyut sırasına dizer; `ext4.vhdx` böyle bir listede genellikle ilk üçe girer. Disk Haritası (Disk Treemap) görünümü de aynı dosyayı ekranın büyük bir bölümünü kaplayan tek bir dikdörtgen olarak gösterir.

Sık Sorulan Sorular

ext4.vhdx dosyasını doğrudan silebilir miyim?

Hayır. Bu dosya WSL dağıtımınızın tamamıdır: kurduğunuz paketler, projeleriniz, veritabanlarınız hepsi içindedir. Sildiğinizde o dağıtım tamamen gider. Alanı geri almanın doğru yolu içeriği temizleyip diski sıkıştırmaktır.

Sıkıştırma verilerime zarar verir mi?

Hayır. `compact vdisk` yalnızca sanal disk dosyasının kullanılmayan bloklarını atar; dosya sistemindeki verilere dokunmaz. Yine de işlem öncesi WSL'i düzgün kapatmak (`wsl --shutdown`) ve kritik projelerinizin yedeğinin olması iyi bir alışkanlıktır.

Docker Desktop dosyasını nerede bulurum?

Güncel Docker Desktop sürümlerinde `%LOCALAPPDATA%\Docker\wsl\disk\docker_data.vhdx` yolundadır. Eski sürümlerde `docker-desktop-data` adlı ayrı bir WSL dağıtımı olarak `%LOCALAPPDATA%\Docker\wsl\data\ext4.vhdx` yolunda bulunur.

sparseVhd açıksa artık hiç sıkıştırmam gerekmez mi?

Çoğu zaman gerekmez, ama seyrek disk anlık değil kademeli çalışır. Tek seferde çok büyük bir silme yaptıysanız elle sıkıştırma hâlâ daha hızlı sonuç verir. Ayrıca `sparseVhd` yalnızca ayar açıldıktan sonra oluşturulan disklerde otomatik geçerlidir.

Sonuç

WSL2 ve Docker'ın diski şişirmesi bir hata değil, sanal disklerin doğası. Kural basit: içeriyi temizle, WSL'i kapat, diski sıkıştır. Bu üç adım çoğu geliştirme makinesinde tek seferde 20-60 GB geri kazandırır.

Kalıcı çözüm için `sparseVhd=true` ayarını açın ve derleme önbelleğini düzenli temizleyin. Diskinizde başka nelerin biriktiğini görmek isterseniz Disk Mop'un Büyük Dosyalar ve Disk Haritası modülleri bu tür tek-büyük-dosya durumlarını saniyeler içinde ortaya çıkarır.

Diskinizde başka hangi dev dosyaların saklandığını görün

Tek seferlik ödeme ile ömür boyu tüm özelliklere erişin. Abonelik yok, gizli ücret yok.

Disk Mop'u Hemen İndir

İlgili Makaleler