Seri · The Quiet Machine · Bölüm 2
Eski Bir Dev Machine'den 27.6 GB Geri Kazanmak
Android Studio, Flutter, Unity, JetBrains, tüm JVM hayvanat bahçesi: hepsi aylar önce silindi. Yine de D:\, kimsenin kullanmadığı 27.6 GB’ın altında hâlâ tıkanıp kalmıştı.
Bir aracı kaldırmak, cache’ini kaldırmaz. Cache’ler, onları oluşturan uygulama gittikten çok sonra bile AppData’da ve gizli .gradle klasörlerinde köşeye çöreklenip kalıyor.
2021 model bu kule, headless bir local-AI sunucusuna dönüşmeden önce temizlenmesi gerekiyordu. Rakamdan çok önemsediğim şeyse silmediğim alan: iki kez, “kesin çöptür” dediğim şey hiç de öyle çıkmadı.
Tek bir byte’a bile dokunmadan önceki kural
Daha önce rm -rf yüzünden fena pişman olmuşluğum var, o yüzden bu sefer kural dardı: her silme, adını koyup gerekçesini söyleyebildiğim bir path’le sınırlı; hiçbir şey wildcard’la değil; belirsiz olan neyse, dokunmadan önce açılıp bakıldı.
Part 1’deki BIOS ayarıyla aynı kendini tutma: karşılığını vermiyorsa agresif hamleyi yapma. Önünde ancak nadiren oturacağım bir sunucuda, yanlışlıkla silinmiş tek bir save dosyası, kazanılan 2 GB’tan çok daha pahalıya patlar.
Katman 1 — arşivdeki build’ler (2.64 GB)
Makinede eski proje snapshot’larıyla dolu bir arşiv dizini vardı; içine gömülü 105 tane de build klasörü: build/, .gradle/, bin/, obj/, node_modules/, .dart_tool/. Hepsi yeniden üretilebilir, hiçbiri saklamaya değmez.
Ama “her build klasörünü sil”, tam da yememesi gereken şeyi yiyen türden bir komuttur; o yüzden silmeyi üç yandan çitledim: yalnız arşiv dizininin içindeki path’ler, asla bir .git klasörü, asla bir source dosyası. Build klasörü tek kullanımlıktır, çünkü onu üreten source hâlâ yerinde duruyor; source’u yanlışlıkla silersen, build klasörü zaten derdin en küçüğü olur. 2.64 GB gitti, vicdan rahat.
Katman 2 — sahipsiz cache’ler (21.7 GB)
Asıl ağırlık burada. Bir SDK’yı kaldırmak, indirdiği şeyleri neredeyse hiçbir zaman kaldırmaz.
- Android emulator system image’ları: 14.7 GB, üstelik makinede tanımlı tek bir AVD bile yoktu. Bir tane bile. Hiç var olmamış cihazlar için gigabaytlarca OS image, boşu boşuna orada duruyordu.
- Unity: 1.87 GB, 2021’den beri dokunulmamış.
- NDK kalıntıları, bir Dart analiz cache’i, JxBrowser, 2022 tarihli bir Yarn cache’i, Azure Functions tooling’i: daha küçük miktarlar, aynı hikâye.
Emulator image’ları tek başına her şeyi anlatıyor: hiç kullanmadığım bir özellik, diskteki en büyük tek kalemdi.
Katman 3 — güvenli çöp (3.07 GB)
Tartışmasız katman: Windows Update cache’i (1.54 GB), eski NVIDIA installer paketleri (1.21 GB), crash dump’ları (0.32 GB). Karar verecek bir şey yok: bunlar ya yeniden üretiliyor ya da öylece bayatlamış, yarı uykuluyken bile yapabileceğin türden bir temizlik.
PATH’i düzeltmek
Disk alanını geri kazanmak, işin küçük kısmı çıktı. Asıl düzeltilmesi gereken, ölü araçların mezarlığına dönmüş PATH‘ti:
jdk-16, jdk-17, IntelliJ, PyCharm, Flutter 2.8.1,
heroku, Azure Data Studio ... and two stray ";;"
Dokuz giriş artık var olmayan dizinleri gösteriyordu; bir de büyük/küçük harf farkıyla çoğaltılmış beş System girişi vardı, her biri çalıştırmak istediğin aracın önüne geçebilecek durumda.
Önce değişkenin tamamını olduğu gibi bir dosyaya döktüm, çünkü bozuk bir PATH seni, onu düzeltmek için gereken araçları bile çalıştıramaz hale getirebilir; sonra 20 temiz girişe indirdim.
Paranoyayı haklı çıkaran tuzaklar
Tuzak 1: birinin save dosyası olan “çöp”
İki klasör (diyelim ki TL ve Discovery), tek kullanımlık döküntüyle dolu bir dizinin tam ortasında duruyordu; isimleri anlamsız, belli bir sahibi yok. İlk içgüdüm, onları da her şeyle birlikte silme yığınına süpürmekti. Onun yerine önce açtım.
İçeride SaveGames dizinleriyle birlikte Unreal Engine oyunları vardı. Cache değil. Birinin saatler süren ilerlemesi, sırf isimleri kötü diye göze çöp görünen klasörlerde duruyordu. İçgüdüyle süpürseydim, hiçbir yeniden kurulumun geri getiremeyeceği save verisini çöpe atmış olurdum.
Tuzak 2: gerçek olmayan 38 GB
İki Application Data klasörü 7.5 GB ve 38 GB gösteriyordu. İki rakam da gerçek değildi. İkisi de recursive junction point’ti: kendi üzerine kapanan Windows reparse point’leri; yani bir dizin-boyutu taraması aynı byte’ları döne döne sayıyordu. 38 GB, disk alanı değil, çifte sayımın çıkardığı bir artefakttı.
Junction’ı silmenin hiçbir faydası olmayacaktı; üstelik link üzerinden gerçek veriye sıçrama riski taşıyordu, o yüzden ikisine de dokunmadım.
Bir klasörün hem boyutu hem adı yalan söyleyebiliyor. Discovery, içinde save game tuttuğunu söylemiyordu; 38 GB de diskteki hiçbir gerçek byte’a denk düşmüyordu. Doğruyu söyleyen tek şey, klasörü açıp içine bakmaktı — kör bir rm -rf‘in tam da atladığı adım.
Bilanço
Arşiv proje build'leri .......... 2.64 GB (korumalı, sadece arşiv içinde)
Sahipsiz dev cache'leri ......... 21.70 GB (14.7 GB'ı: emulator image'ları, sıfır AVD)
Güvenli sistem çöpü ............. 3.07 GB (WU cache, NVIDIA installer'lar, dump'lar)
--------
Toplam geri kazanılan ........... ~27.6 GB (yuvarlanmış; yukarıdaki üç katman toplamı 27.41 GB)
PATH: 20 temiz giriş (bir mezarlıktan), önce yedeklendi.
Yanlışlıkla silinen .................. 0 B
27.6 GB’ın tek bir byte’ı bile bir save dosyası, bir junction hayaleti ya da canlı bir bağımlılık değildi. Bedeli şu: her belirsiz klasörü açacak kadar yavaşlamak, kör bir rm -rf için harcamayacağım belki yirmi fazladan dakikaya mal oldu. O klasörlerin ikisi, açmamış olsaydım gerçek bir kayıptı.
Disk yeniden nefes almaya başlayınca sıradaki sorun, box’a girebilmekti: monitörsüz bir makinede OpenSSH’ı ayağa kaldırmak ve bir key authenticate olana kadar koca bir akşamı yiyen iki sessiz-hata tuzağı.