Her sürüm, en yenisi önce. Aynı metin uygulamaların içinde de var: burada okuduğunuz şey, güncellemeden sonra uygulamanın size söyleyeceği şey.
geliştirme kilometre taşıGeliştirme kilometre taşı olarak işaretlenen sürümler hiç etiketlenmedi ve indirilebilir dosyaları yok. Kurabileceğiniz için değil, o iş yapıldığı için listeleniyorlar.
Harita artık kabartmalı da çizilebiliyor; SequoiaView ve WinDirStat'tan tanıdık görünüm: her dikdörtgen bir tümsek, her klasör de içindekilerin altında daha büyük bir tümsek gibi ışıklandırılıyor, böylece birbirine ait olanlar çizgi takip etmeden tek bir şekil olarak okunuyor. Renkler eskisi gibi tür ya da yaş anlamına geliyor; bir dikdörtgen boyunca değişen yalnızca ışık. Harita ve Halka'nın yanından Düz ya da Kabartma seçin. Seçim hatırlanıyor ve siz seçene kadar harita düz kalıyor.
Değişti
Linux'ta btrfs ve XFS taramaları, dosyalar arasında paylaşılan blokları artık diskin tuttuğu gibi bir kez sayıyor: reflink kopyalar (cp --reflink, coreutils 9'da varsayılan) ve btrfs snapshot'ları artık her ad için ayrı sayılmıyor. 100 MB'lık bir dosyanın üç reflink kopyası önceden diskte 300 MB gösteriyordu, şimdi df'in söylediği gibi 100 MB gösteriyor. Bu dosya sistemlerindeki toplamlar bu yüzden düşüyor ve önceki bir sürümün aldığı snapshot ile karşılaştırma, diskte hiç yaşanmamış bir azalma gösteriyor. Sıkıştırılmış btrfs dosyaları sıkıştırılmamış boyutlarında kalıyor, çünkü gerçekte tuttuklarını ölçmek root gerektiriyor.
Performans
macOS'ta taramalar %15-33 daha hızlı ve üçte bir daha az bellek tutuyor. Kopyala-yaz klonları eskiden yürüyüşten sonra kendi adımında bulunuyordu, her aday dosya tek tek açılıyordu - taramanın sonundaki "klon adayı denetlendi" sayacı. APFS klon ailesini yürüyüşün zaten okuduğu dizin listesinin içinde bildiriyor, bu yüzden o adım kalktı. Ölçüldü: 415.503 girdi 485'ten 412 ms'ye, 1.064.452 girdi 2133'ten 1431 ms'ye, büyüğünde tepe bellek 299 MiB'den 200 MiB'ye. 64 KiB'den küçük klonlar da artık bir kez sayılıyor; çok sayıda küçük klon içeren bir klasör diskte biraz daha az gösteriyor, diskin gerçekte tuttuğuna daha yakın. Taramalar 8 yerine 6 thread kullanıyor; yürüyüş ucuzladıktan sonra yeniden ölçüldüğünde bu daha hızlı çıktı.
Bir taramayı geçmişe kaydetmek yaklaşık %17 daha kısa sürüyor: sağlama özeti ikinci bir geçişte değil, satırlar yazılırken hesaplanıyor.
Linux'ta taramalar %6 ile %14 arası daha hızlı: klasörler büyük gruplar halinde okunuyor ve her girdi kendi klasörüne göre sorgulanıyor. Reflink'li dosyalar barındıran XFS'te daha fazla thread artık taramayı yavaşlatmıyor: bu türden 100.000 dosya 855 ms yerine 200 ms sürdü.
Linux'ta dönen diskler algılanıyor ve tek thread'le, her klasörün girdileri diskteki sıralarıyla taranıyor: simüle edilmiş bir dönen diskin soğuk taraması 11,5 s yerine 0,9 s sürdü.
Windows'ta uygulama yönetici olarak çalışırken tüm bir NTFS biriminin taraması, her dosyayı açmak yerine birimin ana dosya tablosunu (MFT) okuyor; sonuç aynı. Diğer bütün taramalar eskisi gibi.
Düzeltildi
macOS'ta bir APFS klon ailesinin kapladığı yer artık her taramada aynı dosyaya yazılıyor: en sığdakine, eşitlikte yolu önce gelene. Şimdiye kadar bir tarama thread'inin ilk ulaştığı kopyaya gidiyordu; toplam doğruydu, ama klonlar farklı klasörlerdeyken diskte hiçbir şey değişmeden baytlar bir taramadan ötekine aralarında yer değiştiriyordu ve değişmemiş bir diskin iki snapshot'ını karşılaştırmak bir klasörü büyüyor, ötekini küçülüyor gösteriyordu. Daha eski bir snapshot ile karşılaştırma böyle bir kaymayı son bir kez gösterebilir.
Haritayı Yaş'a göre renklendirmek, veritabanından ya da bir agent'tan açılan bir snapshot için hiç yaş göstermiyordu ve yaş profili her bantta 0 B okuyordu; bunlar yalnızca yeni bir taramada vardı. Artık bir snapshot, kaydedildiği taramayla aynı biçimde renkleniyor ve aynı profili veriyor.
Haritada bir klasörün etiketi ile ilk alt klasörünün etiketi üst üste çiziliyordu: ikisi de aynı köşeye, bir piksel arayla yerleşiyordu; bu yüzden içinde büyük bir cache/ olan bir dist/ "dist/ache/" diye okunuyordu. Artık başka bir etiketi örtecek bir etiket, kendi karosunun içinde onun altına iniyor; orada yer kalmadıysa hiç çizilmiyor. İki etiket artık üst üste binmiyor.
Süren tarama artık dolarken gösteriliyor: bitmiş bir taramanınkiyle aynı klasör listesi, aynı harita ve aynı inceleme paneli, her saniye büyüyen bir ağaç üzerinde. Şimdiye kadar tarama bitene dek ekranda bir yüzdeden başka bir şey yoktu. İçindeki her rakam şu ana kadar okunanı gösterdiği için görünüm kısmi olarak işaretleniyor ve tarama sürerken ne silmeye ne de kaydetmeye izin veriliyor; açtığınız, seçtiğiniz ya da yakınlaştırdığınız şey hem tazelemelerden hem de taramanın bittiği andan sağ çıkıyor.
Taramalar artık sekmelerde açılıyor. Ana sayfa solda kalıyor ve hiç kapanmıyor; böylece yeni bir tarama başlatmak, okumakta olduğunuzu kaybetmek anlamına gelmiyor. Her tarama kendi sekmesini alıyor ve sekmeler arasında serbestçe geçilebiliyor. Bir sekmeyi kapatmak belleği geri veriyor — bir milyon girdilik tarama, açık kaldığı sürece yaklaşık yüz megabayt.
Açılış ekranı artık diskleri listeliyor. Bütün bir dosya sistemini taramak zaten mümkündü ama hiçbir yerde butonu yoktu: klasör seçicinin bir sürücünün kökünü kabul ettiğini bilmeniz gerekiyordu. Her disk boş alanıyla birlikte gösteriliyor, harici sürücüler dahil.
Değişti
Üst çubukta on dört düğme vardı ve pencerenin gerçekte açıldığı genişlikte üç satıra taşarak haritayı aşağı itiyordu. Artık her denetim, değiştirdiği şeyin yanında: çubukta yalnızca uygulama ve ağacın nereden geldiği var, açık taramaya ait işlemler yolunun yanındaki ⋯ altında, haritanın şekli ve rengi ise haritanın üzerinde. Rakamların hangi ölçüde olduğunu, istediğiniz toplama tıklayarak seçiyorsunuz: ikisi de zaten yazılı, seçili olan parlak ve altı çizili. "Yakınlaştırmayı sıfırla" kaldırıldı; haritanın üstündeki yolun ilk adımı zaten aynı işi yapıyordu.
Klasör listesi daha dar açılıyor. Genişliğinin yarısından fazlasını rakam sütunu alıyordu; o sütun 16px daraltıldı — yalnızca boşluklar ve çubuğun uzunluğu, hiçbir rakam eskisinden az şey söylemiyor — ve başlangıç genişliği de onunla birlikte düştü. Kendi ayarladığınız genişlik yine hatırlanıyor, ayıracı çift tıklayınca sıfırlanıyor.
Pencere artık içinde çalışılamayacak kadar küçültülemiyor. En küçük boyut 900 × 600 yerine 1080 × 700: eskisinde harita, yanındaki klasör listesinden daha küçük kalıyordu.
Yeniden tara, Anlık görüntü kaydet ve Geçmiş artık etiketsiz tek bir butonun arkasında gizli değil. Açık olanı gösteren satırda adlarıyla birer buton olarak duruyorlar, sağ tık menüsünün altında da varlar; Geçmiş — önce bir tarama açık olmasını gerektirmeyen tek komut — ayrıca açılış ekranında.
Düzeltildi
İlk taramanın çizdiği önizleme tarama boyunca boş kalıyordu: çizim alanı yükseklik alamadığı için hiçbir şey istemiyor, ekranda "Üst seviye okunuyor" başlığından başka bir şey kalmıyordu.
Klasör listesi yeterince genişletildiğinde — ya da pencere yeterince daraltıldığında — haritaya kendi göstergesinin genişliğinden az yer kalıyor ve harita sağdaki ayrıntı sütununun üzerine taşıyordu. Artık iki yan panel geri çekiliyor, harita en az bir genişliği koruyor ve üçü birbirinin üzerine binmiyor.
Haritanın üstünde bir hata bildirildiği anda harita çöküyordu: hata şeridi, haritaya ait olan yeri alıyordu. Yani pencere tam da neyin ters gittiğini anlatmaya çalışırken harita kayboluyordu.
Harita, hiçbir ayrıntı kaybetmeden belirgin biçimde hızlandı. İşaretçiyi üzerinde gezdirmek pencerenin tamamını takılmaya sokuyordu: her hareket, ince bir çerçeveyi oynatmak için yaklaşık 112.000 dikdörtgenin hepsini yeniden çiziyordu — hareket başına 39,4 ms, şimdi 0,13 ms. Resmin kendisi de karo başına bir çağrı yerine birkaç düzine yol olarak çiziliyor (40,6 ms'den 21,4 ms'ye) ve koordinatlar sınırı daha kısa biçimde geçiyor; bu da bir haritanın yanıtını 10,4 MB'tan 5,2 MB'a indiriyor.
Hakkında panelindeki Web sitesi ve Kaynak kodu bağlantıları ile güncelleme şeridindeki değişiklik günlüğü bağlantısı hiçbir şey yapmıyordu. Uygulamanın tarayıcıya adres iletmesini sağlayan izin, kendisine bir liste verilmedikçe hiçbir adrese geçit vermiyor ve liste boştu; hata da her çağrı yerinde yutuluyordu, dolayısıyla hiçbir zaman çalışmayacak bir buton çalışan bir butondan ayırt edilemiyordu.
Uygulamanın kendi menüsünün olmadığı her yerde sağ tık, web görünümünün menüsünü açıyor ve Yeniden Yükle sunuyordu — bu da açık bütün taramaları siliyor, istenmiş bir şeyden çok çökme gibi görünüyordu. O menü artık metin alanları dışında her yerde bastırılıyor; metin alanlarında kopyala-yapıştırın tek yolu olduğu için duruyor.
Yaklaşık 210 seviyeden daha derin iç içe geçmiş bir dizin ağacı artık uygulamayı kapatmıyor. Yürüyüş her seviye için bir kez kendini çağırıyor ve thread'leri sıradan varsayılan yığına sahipti, dolayısıyla yeterince derin bir ağaç onu taşırıyordu — tarama uygulamanın kendi içinde çalıştığı için de geriye hiçbir mesaj bırakmadan pencerenin tamamı gidiyordu. Thread'ler artık 16 MiB yığın alıyor ve 1024 seviyede duruyor: dizin, okunamayan öğeler arasında listeleniyor ve tarama devam ediyor.
İlk tarama artık boş bir panel ve bir sayaç yerine ne bulduğunu koşarken gösteriyor. Üst seviye klasörler harita olarak beliriyor ve içleri okundukça büyüyor; büyük olan genellikle tarama bitmeden çok önce kendini belli ediyor. Rakamlar şu ana kadar bulunanlar ve görünüm bunu söylüyor — büyümesi duran bir klasör, bitmiş bir klasörle birebir aynı görünür. Bunu ve bitmiş haritayı aynı yerleşim rutini çiziyor, yani tarama indiğinde hiçbir şey yeniden dizilmiyor. Yeniden tarama, okumakta olduğunuz haritaya eskisi gibi dokunmuyor.
Aynı klasör artık dikdörtgenler yerine halkalar olarak da çizilebiliyor. Seviye başına bir halka, ve bir girdinin açısı içinde bulunduğu klasördeki payı — yani bir şeyin ne kadar derine indiği ve neyin neyin içinde olduğu, iç içelikten çıkarılacak bir şey değil resmin kendisi. Treemap varsayılan kalıyor ve bu ikinci görüş; sebebi bilmeye değer: ortadan uzaktaki bir yay aynı boyut için ekranın daha fazlasını kaplıyor, o yüzden alanları değil açıları karşılaştırın. Tıklamak seçiyor, bir klasöre çift tıklamak içine giriyor, ve renk anahtarı burada da çalışıyor.
Yaş ısı haritasının anahtarı her bandı "Bir haftadan yeni", "1–3 ay" gibi adlandırmak yerine "undefined" diyordu. Renkler ve yanlarındaki bayt rakamları doğruydu; yalnızca kelimeler eksikti, ve bu da görünümün renkleri açıklayan tek parçasını okunamaz hâle getiriyordu.
Harita türe göre değil yaşa göre renklendirilebiliyor. Mavi bu hafta, kırmızı iki yıldan eski; bir klasör ortadaki baytının yaşını alıyor — yani içindekilerin yarısı renginin söylediğinden daha eski. Yanındaki anahtar, ekrandaki klasör için her banttaki baytı veriyor; böylece "kırmızı eski demek" yerine "burada iki yıldır dokunulmamış 48 GB var" yazıyor. Klasörün kendi tarihi bilerek yok sayılıyor: yanına bir şey eklenince değişiyor ve içindekiler hakkında hiçbir şey söylemiyor.
Düzeltildi
spacetrace import ile alınan snapshot'lar uygulamada açılıyor. Bozuk bir kökle kaydedildikleri için uygulama onları kullanılamaz ağaç diye reddediyordu.
Bir tarama ilerlemeyi bıraktığında ilerleme şeridi artık bunu söylüyor ve beklediği klasörü adıyla veriyor; hiçbir yere gitmeyen bir taramanın üstünde çubuk oynatmıyor. Cevap vermeyi bırakmış bir ağ paylaşımı çekirdekte bloke oluyor ve bunu hiçbir uygulama kaldıramaz — ama neyi beklediğini bilmek, beklemekle durdurmak arasında seçim yapmanızı sağlayan şey.
Bir klasörün tüm geçmişi tek çizgide. Geçmiş, bir klasörün saklanan bütün anlık görüntülerini grafik olarak gösteriyor ve her ikisi arasında neyin değiştiğini yanında yazıyor; bir adıma tıklamak tam o sıçramanın karşılaştırmasını açıyor. Eksen sıfırdan başlıyor, yani çizginin yüksekliği boyutun kendisi.
Performans
Taramalar çekirdek başına bir yerine en fazla sekiz thread kullanıyor; ölçülen her dizin ağacında hızlandı — küçüğünde %39, büyüğünde %11. Yürüyüş syscall'a bağlı: belli bir noktadan sonra thread'ler çalışmak yerine çekirdekte sıraya giriyor.
macOS'ta taramalar yaklaşık 2,3 kat hızlandı; tarama çekirdeğindeki aynı değişiklikten geliyor: sistem bir klasörün adlarını ve dosyalarının boyutlarını dosya başına bir istek yerine tek istekte verebiliyor.
Düzeltildi
İlerleme şeridi her taramanın sonunda donmuş görünüyordu: yürüyüşten sonra kopyala-yazarken klonlarını arayan ikinci bir geçiş var ve o sırada hiçbir sayaç kımıldamıyordu. O aşama artık “Tamamlanıyor” diyor ve durmuş bir dosya sayısı göstermek yerine denetlediğini sayıyor.
Snapshot'lar artık içeriklerinin sağlamasını taşıyor. Bir ajandan çekilen ve yolda değişmiş snapshot çizilmek yerine reddediliyor: dönen bir bit kusursuz geçerlilikte bir ağaç bırakıyor, ve treemap yanlış rakamı doğrusu kadar inandırıcı çiziyor.
Değişti
Uygulamanın komut satırı aracıyla paylaştığı snapshot veritabanı yeni bir şemaya geçiyor. Bu sürüm eskisini sorunsuz okuyor; tersi geçerli değil, yani ikisini de kullanıyorsanız birlikte güncelleyin.
macOS'ta .dmg dosyası artık açılmıyordu. 0.4.1'de eklenen imza kimliği disk imajına da uygulanıyordu ve macOS'un güvenmediği bir sertifikayla imzalanmış imaj daha bağlanırken reddediliyor — yani uyarı uygulamayı çalıştırmadan önce, indirilen dosyayı açarken çıkıyordu. İmaj yeniden imzasız; içindeki uygulama kimliğini koruyor.
macOS, uygulama her güncellendiğinde verdiğiniz bütün izinleri unutuyordu: kararlı bir imza kimliği olmadan sistem her sürümü ayrı bir uygulama sayıyor. Tam Disk Erişimi açık görünüyor ama dikkate alınmıyordu, ve her tarama klasör klasör yeniden soruyordu. Uygulama artık sürümler boyunca tek bir kimlik taşıyor; bir kez verilen izin veriliyor kalıyor.
macOS ve Windows için geçici kurulum betikleri: paketi curl ya da Invoke-WebRequest ile indirir, SHA256SUMS ile doğrular ve kurar. Bu şekilde inen bir dosya tarayıcının yazdığı işaretleri taşımadığı için Gatekeeper ve SmartScreen hiç devreye girmiyor. Uygulama imzalandığında kaldırılacaklar.
Full Disk Access olmadan macOS korumalı her klasör için ayrı ayrı izin soruyor — tarama ortasında, kimsenin öngöremeyeceği bir sırayla. Karşılama ekranı artık bunu ilk taramadan önce söylüyor ve doğrudan ilgili ayar paneline giden bir düğme sunuyor. Sistemin kendi penceresi de artık bir disk çözümleyicinin dosyalarınızı neden okuduğunu açıklıyor.
Değişti
"Yenilikler" penceresi artık yalnızca yayınlanmış sürümleri listeliyor. Tamamlanmış ama hiçbir sürüme girmemiş girdiler, sizin kopyanızda bulunmayan bir işi anlatıyordu.
Düzeltildi
macOS kurulum talimatı, Apple'ın macOS 15'te kaldırdığı sağ tık → Aç yöntemini anlatıyordu. Artık Sistem Ayarları → Gizlilik ve Güvenlik → Yine de Aç yolunu gösteriyor.
Hata mesajları da sizin dilinizde. İşletim sisteminin söylediği kısım — Permission denied gibi — kendi sözleriyle kalıyor, çünkü aradığınızda işinize yarayan sözler onlar.
Uygulama açılışta yeni bir sürüm olup olmadığına bakıyor ve kurmayı öneriyor. Siz istemeden hiçbir şey indirilmiyor. macOS'ta uygulama hâlâ imzasız, yani güncellemeden sonra sistem sizden yeniden onay isteyebilir.
Uygulama beş dil konuşuyor: İngilizce, Türkçe, İtalyanca, Fransızca ve Almanca. İlk açılışta sisteminizin dilini izliyor, ve bu seçim istendiği zaman değiştirilebiliyor.
Hangi sürümü ve hangi derlemeyi çalıştırdığınızı, ve son sürümlerde ne değiştiğini gösteren bir pencere. Çevrimdışı çalışıyor: changelog uygulamanın içine derleniyor.
Performans
Büyük bir taramayı açmak daha az bellek kullanıyor; tarama çekirdeğindeki küçülen ağaç gösterimi sayesinde.
0.2.0
· geliştirme kilometre taşı
Eklendi
macOS, Windows ve Linux için kurulabilir paketler; her push'ta derleniyor.
Haritanın ve listelerin hangi ölçüyü izleyeceği için bir anahtar: dosyaların iddia ettiği mi, diskin tuttuğu mu.
Değişti
Pencere hiçbir zaman kilitlenmiyor. Uzun işler ana thread dışında çalışıp ilerleme bildiriyor ve tarama sürerken iptal edilebiliyor.
0.1.0
· geliştirme kilometre taşı
Eklendi
İlk masaüstü uygulaması: bir klasörün treemap'i, yanında ağaç ve sağda seçili girdinin ayrıntıları.
Yeni bir tarama, saklanmış bir anlık görüntü ya da bir sunucuda veya NAS'ta çalışan ajandan doğrudan okunan bir görüntü aç.
Girdileri uygulama içinden Çöp Kutusu'na taşı; onay ekranı tam olarak neyin gideceğini söylüyor.
spacetrace scan --ssh host /path, ssh ile erişilebilen bir makineyi orada hiçbir şey kurmadan tarar ve snapshot'ı yerel veritabanında tutar; scans, diff, ls --scan ve verify onu diğerleri gibi ele alır. Aynı sürümün bir kopyası karşı taraftaki özel bir geçici dizine yüklenir (orada çalışıyorsa bu binary, değilse o platform için yayımlanmış sürüm, SHA256SUMS ile doğrulanıp önbelleğe alınarak), taramayı yapar, veritabanını geri gönderir ve silinir: hata olduğunda, Ctrl-C'de ve spacetrace doğrudan öldürüldüğünde de, çünkü uzak taraf oturum biter bitmez kendisi temizler. Tek bağlantı, yani en fazla bir parola sorusu. Snapshot uzak makinenin host adını ve yolunu taşır, böylece o makinenin geçmişine katılır. Bedeli: ssh erişimi, her çalıştırmada yaklaşık 7 MB'lık bir yükleme ve snapshot için /tmp ya da $HOME'da yer. Windows'ta henüz yok.
spacetrace scan s3://bucket/prefix bir S3 bucket'ını tarıyor - AWS ya da --endpoint ile MinIO, Cloudflare R2, Backblaze B2 ve Wasabi - ve --save onu ls --scan, diff --path s3://..., age --scan ve export'un değiştirmeden okuduğu sıradan bir snapshot olarak saklıyor. Kimlik bilgileri ve bölge, aws CLI'nin okuduğu yerlerden ve onun sırasıyla geliyor: anahtarlar, üstlenilen bir rol, bir web kimliği token'ı, aws sso login sonrası IAM Identity Center, credential_process, ECS/EKS container kimlik bilgileri ve EC2 instance metadata. Geçici anahtarlar süreleri dolmadan yenileniyor; MFA kodu isteyen bir rol için soru sorulmuyor, bu yüzden önce anahtarlarını aws configure export-credentials ile dışa aktarın. --no-sign-request herkese açık bir bucket'ı listeliyor. Bir AWS bucket'ı klasörlere bölünerek aynı anda 16 istekle listeleniyor (us-west-2'ye karşı ölçümde 587.000 anahtar 175 s yerine 30 s); diğer her --endpoint, --threads daha fazlasını istemedikçe tek akışta kalıyor, çünkü MinIO paralelde ölçümde daha yavaş çıktı. Anahtarlar / ile bölünerek klasör olarak gösteriliyor. Toplam yalnızca güncel sürümleri sayıyor: eski sürümler, silme işaretleri ve yarım kalmış multipart yüklemeler faturalanıyor ama listelenmiyor ve çıktı bunu söylüyor. . ya da .. yol parçası içeren anahtarlar gösterilmiyor: okunamayan girdi olarak sayılıyor ve çıktı onları adıyla belirtiyor. diff --path s3://... yalnızca aynı servisin snapshot'larını karşılaştırıyor; böylece aynı adlı bir MinIO ve bir AWS bucket'ı hiçbir zaman eşleştirilmiyor.
Yeni spacetrace watch <folder> komutu, başlatıldığından beri hangi klasörlerin büyüyüp küçüldüğünü, ne hızla olduğunu canlı gösteriyor, en büyükler önce - diff'in bildireceği satırların aynısı. Bir kez tarıyor, sonra dosya sistemi olaylarını (FSEvents, inotify, ReadDirectoryChangesW) izliyor ve yalnızca onların adını verdiği klasörleri taramanın kendi koduyla yeniden okuyor; bu yüzden sabit bağlantı, sembolik bağlantı, --exclude, -x ve --depthscan'deki anlamlarını koruyor. Terminalde yerinde yenileniyor, pipe'a satır ekliyor, --json ile her yenilemede bir JSON nesnesi yazıyor; --interval hızını belirliyor. Sabit bağlantılı bir dosya aygıtı ve inode'u üzerinden izlenip bir kez sayılıyor, bu yüzden sabit bağlantı dolu bir build dizini tam yeniden tarama gerektirmiyor; yalnızca sistemin kaybedildiğini bildirdiği olaylar ya da diğer adları bulunamayan bir bağlantı tam bir yeniden taramayı tetikliyor ve çıktı bunu söylüyor; klonlar tam boyutlarıyla sayılıyor. Linux'ta inotify watch'ları bittiğinde, sınırı yükselten sysctl komutunu söyleyerek duruyor.
spacetrace pkgs bir klasörün altındaki baytların hangi kurulu pakete ait olduğunu ve ne kadarının hiçbir pakete ait olmadığını söylüyor - genellikle birinin elle oraya koyduğu kısım. Klasör yerine tek bir dosya verilirse, o dosyanın sahibi olan paketi söylüyor. dpkg, pacman, apk ve Homebrew doğrudan diskten okunuyor, rpm veritabanı olan yerde rpm'e soruluyor; okunamayan bir veritabanı, dosyaları sessizce sahipsiz sayılmak yerine çıktıda adıyla belirtiliyor. /usr'ın birleştirildiği sistemlerde /bin/ls diyen bir liste, dosyanın gerçekte durduğu /usr/bin/ls ile eşleştiriliyor: yazıldığı gibi eşleştirilseydi Debian 12'nin /usr'ının %17'si sahipsiz görünecekti. macOS'ta kurulum makbuzları da okunuyor: bir .pkg'nin kurduğu her şey - Apple'ın kendi paketleri, Command Line Tools, Office, Node.js - pkgutil --files'ın verdiği dosya listesiyle kendi paketine yazılıyor ve makbuzlar saniyeler yerine saniyenin bir kesrinde doğrudan diskten okunuyor. /System/Volumes/Data/Applications taraması /Applications taramasıyla aynı sonucu veriyor ve bir güncelleyicinin büyük/küçük harflerini değiştirdiği dosya hâlâ kendi paketine sayılıyor. Bozuk bir makbuz çıktıda adıyla belirtiliyor, geri kalanlar yine okunuyor. Bir paketin kurulum betiğinin ürettiği dosyalar, örneğin Python bytecode'u ya da font önbellekleri, hiçbir listede yer almıyor ve sahipsiz görünüyor. Yalnızca bu makinede çalışıyor; başka bir host'tan alınmış snapshot reddediliyor.
Agent artık /metrics adresinde Prometheus metrikleri sunuyor; API'sinin geri kalanıyla aynı bearer token'ın arkasında. Yapılandırılmış her kök için: en yeni snapshot'ın ne zaman başladığı ve ne kadar sürdüğü, mantıksal boyut ve diskteki boyut, dosyalar, dizinler, okunamayan yollar, o sırada ölçülen boş ve toplam alan, şu anda tarama yapılıp yapılmadığı ve kaç snapshot saklandığı; ayrıca derleme bilgisi ve başlangıç zamanı. Hiç taranmamış bir kök de sıfır snapshot ile listeleniyor, böylece "hiç taranmadı" için uyarı kurulabiliyor. Bir scrape yalnızca zaten saklananları okuyor - tarama başlatmıyor, taranan disklere dokunmuyor - ve 20.005 snapshot saklanan bir veritabanında 2,2 ms sürdü. Scrape yapılandırması docs/AGENT.md içinde.
macOS'ta spacetrace scan --save ve ajanın zamanlanmış taramaları son snapshot'tan başlıyor ve yalnızca FSEvents'in değişti dediği klasörleri yeniden okuyor: /Applications 406 ms yerine 239 ms'de. Sonuç tam taramayla aynı, ya da tam tarama yapılıyor: herhangi bir şüphe (imleç yok, başka birim, yavaş ya da kayıp günlük, çok fazla değişiklik, iki günden eski taban, farklı seçenekler, bozuk ya da içe aktarılmış taban) tam tarama demek ve snapshot nedenini kaydediyor. --full ve kök başına incremental = false tam taramayı zorluyor. Geçici klasörünüzden başka bir birimdeki kök, örneğin harici bir disk, her zaman tam taranıyor: orada FSEvents'in taramadan hemen önce yapılan bir değişikliği numaralandırmış olacağına güvenilemiyor.
scan --json, rescan alanını (full, incremental ya da fallback:<reason>) ve bir incremental nesnesini (yeniden oynatma ve taban yükleme süresi, yeniden okunan klasörler, yeniden kullanılan girdiler) bildiriyor.
spacetrace scan --disk auto|ssd|hdd taramanın hızını alttaki diske göre ayarlıyor. hdd tek thread'le tarıyor ve Linux'ta her klasörün girdilerini diskteki sıralarıyla istiyor; varsayılan auto, Linux'ta dönen diskleri algılıyor ve geri kalan her şeyi eskisi gibi tarıyor. Simüle edilmiş bir dönen diskte soğuk bir tarama 11,5 s yerine 0,9 s sürdü. --json hızı bildiriyor (disk, threads, disk_decided). Ajan aynı ayarı kök başına disk olarak alıyor.
Değişti
btrfs ve XFS'te diskteki toplam, dosyalar arasında paylaşılan blokları artık diskin tuttuğu gibi bir kez sayıyor: reflink kopyalar (cp --reflink, coreutils 9'da varsayılan) ve btrfs snapshot'ları artık her ad için ayrı sayılmıyor. btrfs'te root olarak çalıştırıldığında sıkıştırılmış dosyalar sıkıştırılmış boyutlarıyla sayılıyor. Ölçüldü: 100 MB'lık bir dosyanın üç reflink kopyası önceden 300 MB gösteriyordu, şimdi df'in söylediği gibi 100 MB gösteriyor; sıkıştırılmış 100 MB'lık bir günlük 100 MB yerine 3 MB gösteriyor. Bu dosya sistemlerindeki toplamlar bu yüzden düşüyor ve önceki bir sürümün aldığı snapshot ile karşılaştırma, diskte hiç yaşanmamış bir azalma gösteriyor. root olmadan sıkıştırılmış dosyalar sıkıştırılmamış boyutlarında kalıyor ve özet bunu söylüyor. ZFS'te blok klonlarının ve tekilleştirilmiş blokların bir taramada görülemediğini belirtiyor. Bunun için btrfs ve XFS'teki her dosya bir kez açılıyor; sıcak önbellekte 1.000 dosya başına 0,4 ile 0,9 ms tutuyor, blokların çoğu paylaşılıyorsa XFS'te daha fazla. --no-clone-dedupe bunu kapatıyor ve du'nun sayısını geri veriyor.
Performans
Snapshot kaydetmek yaklaşık %17 daha kısa sürüyor: içerik özeti ikinci bir geçişte değil, satırlar yazılırken hesaplanıyor. Ajanın /status yanıtı artık checksumming aşamasını bildirmiyor.
Linux'ta taramalar daha hızlı: klasörler büyük gruplar halinde okunuyor ve her girdi, girdi başına bellek ayırmadan kendi klasörüne göre sorgulanıyor. En çok kazanan, ajanın dağıtıldığı statik derleme — ölçülen ağaçlarda 1,3 ile 3,4 kat arası daha hızlı — glibc derlemeleri ise %6 ile %14 arası.
Reflink'li dosyalar barındıran XFS dosya sistemlerinde birden çok thread'le yapılan taramalar artık tek thread'den yavaş değil: dosya sistemine paylaşılan bloklar bir seferde tek thread'le, toplu halde soruluyor. 100.000 reflink'li dosyalık bir ağaç sıcak önbellekle 855 ms yerine 200 ms, soğuk önbellekle 971 ms yerine 248 ms sürdü. Reflink'li dosya barındırmayan XFS, btrfs ve ext4 değişmedi.
Windows'ta yönetici olarak çalıştırılan tüm bir NTFS biriminin taraması, her dosyayı açmak yerine birimin ana dosya tablosunu (MFT) tek bir sıralı geçişte okuyor. Sonuç girdi girdi aynı; CI bunu gerçek bir birimde denetliyor. Geri kalan her şey — birimin kökünün altındaki bir klasör, yönetici yetkisi yokken, ReFS, FAT, ağ sürücüsü — eskisi gibi taranıyor. --no-mft her zaman eski yolla tarıyor.
Düzeltildi
spacetrace update artık yavaş bir bağlantıda başarısız olmuyor. Arşivin indirilmesi sürüm kontrolüyle aynı beş saniyelik sınırla çalışıyordu ve bu sınır yanıtın tamamını kapsıyor; yani 12 MB'lık bir arşiv için 2,4 MB/s gerekiyordu, yoksa zaman aşımı oluyordu. İndirmelerin artık beş dakikası var.
spacetrace age --scan ID kayıtlı her snapshot için her yaş aralığında 0 B gösteriyordu; gerçek boyutları yalnızca yeni bir tarama gösteriyordu. Artık bir snapshot, kaydedildiği taramayla aynı cevabı veriyor.
Push edilen ya da çekilen bir snapshot kaydedilmeden önce baştan sona denetleniyor: ağacı tutarlı, her değeri doğru türde olmalı. Sağlaması doğru ama ağacı bozuk bir snapshot şimdiye kadar yine de kaydediliyordu ve ardından o veritabanını okuyan her komut bu yüzden başarısız oluyordu; artık reddediliyor ve ondan hiçbir şey kalmıyor. Bir günden fazla ileri tarihli bir snapshot da reddediliyor: yoksa klasörünün en yeni taraması olarak sonsuza dek kalırdı. Denetim agent'ın kendi taramalarını bekletmiyor ve saçma sayıda dosya bildiren bir snapshot artık ne açılırken spacetrace'i çökertiyor ne de o klasörün sonraki taramasını yarıda kesiyor.
Çıktısı erken kapanan bir komut (spacetrace scans | head -1) artık "failed printing to stdout: Broken pipe" ile çökmek yerine sessizce 0 çıkış koduyla bitiyor. 141 değil 0, çünkü okumayı bırakan taraf istediğini almıştır; yoksa set -o pipefail altındaki bir betik hiçbir şeyin ters gitmediği yerde başarısız olurdu.
macOS'ta bir APFS klon ailesinin kapladığı yer artık her taramada aynı üyeye yazılıyor: en sığdakine, eşitlikte yolu önce gelene. Şimdiye kadar bir tarama thread'inin ilk ulaştığı üyeye gidiyordu; toplam doğruydu, ama klonlar farklı klasörlerdeyken diskte hiçbir şey değişmeden baytlar bir taramadan ötekine aralarında yer değiştiriyordu ve değişmemiş bir diskin iki snapshot'ının diff'i bir klasörü büyüyor, ötekini küçülüyor gösteriyordu. Daha eski bir snapshot'a karşı diff böyle bir kaymayı son bir kez gösterebilir. Tarama süresi değişmedi.
64 KiB'den kucuk klonlar da tekillestiriliyor ve varsayilan is parcacigi sayisi 8'den 6'ya dustu. Boyut tabani her klon kontrolunun bir dosya acmasi yuzunden vardi; artik bedava, bu yuzden cok sayida kucuk klon iceren bir agac eskisinden az bildiriyor - df'in diskte tuttugunu soyledigi degere daha yakin. clones_deduped buna gore artiyor. Is parcacigi varsayilani yurüyüs ucuzladiktan sonra yeniden olculdu: uc test korpusunun hepsinde en iyi degerde ya da ona yakin olan 6, oysa 8 artik en buyugunde %22 kaybettiriyor. --threads ile degistirilebilir.
Performans
macOS taramaları %15-33 daha hızlı ve üçte bir daha az bellek tutuyor. Kopyala-yaz klonları eskiden yürüyüşten sonra kendi aşamasında bulunuyor, her aday dosya tek tek açılıyordu; APFS klon ailesini yürüyüşün zaten okuduğu dizin listesinin içinde bildiriyor, bu yüzden o aşama kalktı. Önceki yapıya karşı ölçüldü, sıcak önbellek, iç içe geçmiş koşular: 50.189 girdi 94'ten 78 ms'ye, 415.503 girdi 485'ten 412 ms'ye, 1.064.452 girdi 2133'ten 1431 ms'ye. Bunların en büyüğünde tepe bellek 299 MiB'den 200 MiB'ye düştü, çünkü yürüyüş artık listelediği her girdi için tam yol kurmuyor - yalnızca içine indiği dizinler için kuruyor. Klon tekilleştirme artık taramanın %15-31'i yerine bedava, bu yüzden --no-clone-dedupe artık hız kazandırmıyor.
Düzeltildi
remotes.toml icindeki ca_file artik Windows'ta calisiyor ve yalnizca adini verdigi sertifikaya guveniyor. Kendi TLS'ini sunan bir agent'a baglanmak orada, sertifika ne kadar dogru olursa olsun, InvalidCertificate(UnknownIssuer) ile basarisiz oluyordu: istemci sertifikayi platformun kendi koklerine ekliyordu ve Windows dogrulayicisi eklenen bir koku yalnizca zincir eksik dondugunde yeniden degerlendiriyor - kendinden imzali bir sertifikanin zinciri eksik degil, tam ama guvenilmez, dolayisiyla eklenen koke hic bakilmiyordu; ve ca_file zaten yalnizca kendinden imzali sertifikalar icin var. Istemci artik tam olarak ca_file icindeki sertifikalara guveniyor, hicbir genel otoriteye guvenmiyor; belgeler bunu zaten sabitleme olarak anlatiyordu ve diger platformlarda da boyle olmaliydi.
Agent artık API'sini kendisi HTTPS üzerinden sunabiliyor: yapılandırmada [server] altında tls_cert_file ve tls_key_file, ikisi birlikte ya da hiç. Şimdiye kadar bunun için önde bir reverse proxy gerekiyordu; kendi alan adı olmayan bir NAS'ta bu, token'ı ve dosya envanterini ağ üzerinde düz metin göndermek anlamına geliyordu. Kendinden imzalı bir sertifika yeterli; istemciye hangisine güveneceği remotes.toml içindeki ca_file ile söyleniyor. Alan adı olan yerde reverse proxy hâlâ daha iyi seçenek, çünkü sertifikayı o yeniliyor, agent yenilemiyor: yenilenen sertifika bir yeniden başlatma gerektiriyor. Sertifikanın, istemcilerin kullandığı adresi subject alternative name olarak taşıması gerekiyor.
Ajan artık tek bir istemci adresinin kaç istek yapabileceğini sınırlıyor; sınırın üstünde Retry-After başlığıyla 429 dönüyor. Sayım bearer token kontrolünden önce yapılıyor, çünkü tokenin sınırlayamadığı iki şey tam da sınırlanması gerekenler: /health tasarım gereği tokensiz ve yanlış bir token da bir cevaba mal oluyor. Varsayılan dakikada 120, olağan kullanımın çok üstünde; durdurduğu şey, yeniden deneme döngüsüne takılmış bir istemcinin ajanın ölçmek için var olduğu diski tüketmesi. Ters vekil arkasında her istek vekilden geldiği için sınır herkesin paylaştığı tek hakka dönüşür — bunun önemli olduğu yerde rate_limit_per_minute = 0 yapıp sınırlamayı vekilde kurun.
Değişti
CSV dışa aktarımı artık her klasörü hemen içeriğiyle birlikte yazıyor. Önceden bütün kardeşleri bir arada, içeriklerini çok aşağıda yazıyordu; bu da hesap tablosunda bir klasörle dosyalarını sayfalarca ayırıyordu. Sütunlar ve satırların kendisi değişmedi.
spacetrace scan --save artık anlık görüntüyü veritabanına yazarken ne yaptığını söylüyor. Bu yazma taramanın sonuna eklenmiş kısa bir iş değil — 412.983 girdilik bir klasörde yürüyüş 0,8 saniye, yazma 0,6 saniye sürüyor, on milyon girdide ise yaklaşık on dört saniye — ve şimdiye kadar ilerleme satırı yürüyüş biter bitmez temizleniyor, komut donmuş gibi görünüyordu. Ajan da aynı iki aşamayı /status üzerinden bildiriyor.
Düzeltildi
spacetrace dupes aynı kopyaları her koşuda başka sırada listeliyordu, yani iki raporu karşılaştırmak olmayan farklar gösteriyordu. Sıra artık koşular arasında değişmeyen yolları izliyor.
Yaklaşık 210 seviyeden daha derin iç içe geçmiş bir dizin ağacı artık taramayı çökertmiyor. Yürüyüş her seviye için bir kez kendini çağırıyor ve thread'leri sıradan varsayılan yığına sahipti, dolayısıyla yeterince derin bir ağaç onu taşırıyor ve süreç doğrudan ölüyordu — agent'ta bu, HTTP API'sini ve zamanlayıcıyı da beraberinde götürüyor, hiçbir snapshot yazılmıyordu. Yürüyüş thread'leri artık 16 MiB yığın alıyor ve 1024 seviyede duruyor, dizini okunamaz olarak kaydedip devam ediyor; işletim sisteminin adlandırabileceğinden daha derin bir ağaç da aynı şekilde, yolu ve sebebiyle raporlanıyor.
spacetrace dupes aynı içeriği tutan dosyaları buluyor ve fazlalıkları silmenin ne kadar yer açacağını söylüyor. Olabildiğince az okuyor: farklı uzunluktaki dosyalar eşleşemez ve tarama zaten her uzunluğu biliyor, aynı uzunluktakiler ilk 16 KiB'ına göre ayrılıyor, ve yalnızca ikisini de geçen tam olarak okunuyor. 375.585 dosyalık 33,8 GiB'lık bir ağaçta bu 2,6 GiB okuma etti — %7,7 — ve ikinci koşu 30 MiB okudu, çünkü tam dosya özetleri koşular arasında hatırlanıyor. Hardlink olan adlar ayrı listeleniyor ve hiçbir şey kazandırmıyor olarak sayılıyor, çünkü baytlarını zaten paylaşıyorlar. Hiçbir şey silinmiyor; hangi kopyanın kalacağı bu aracın bağlamına sahip olmadığı bir karar.
Performans
Tarama belirgin biçimde daha az bellek kullanıyor. Yürüyüş eskiden kendi ağacını kurup sonucun içine kopyalıyor, yani tepe anında ikisi birden bellekte duruyordu; artık her dizin okundukça girdiler doğrudan sonuç ağacına yazılıyor. 412.983 girdilik bir klasörde tepe 91,5 MB'dan 57,6 MB'a, aynı klasörün önceki taraması kayıtlıysa 49,3 MB'a indi. Tarama eskisi kadar sürüyor ve bildirdiği her rakam aynı.
spacetrace import ile oluşturulan bir snapshot kaydedilebiliyor ama bir daha açılamıyordu: her deneme "entry 0 is not a root: it claims a parent" hatası veriyordu. İçe aktarma bozuk bir kök yazıyordu ve bu, okumaya kadar fark edilmiyordu. Halihazırda içe aktarılmış snapshot'lar bu sürümle yeniden içe aktarmaya gerek kalmadan okunabiliyor.
--threads N bir taramanın kaç thread'le koşacağını seçiyor, ajanda da kök başına aynı ayar var. En iyi bir sayı yok: optimum ağacın büyüklüğüyle kayıyor, ve diskini bilen biri gömülü hiçbir varsayılandan daha iyi seçer.
Bir tarama ilerlemeyi bıraktığında ilerleme satırı artık bunu söylüyor ve beklediği dizini adıyla veriyor; "scanning…" demeye devam etmiyor. Cevap vermeyi bırakmış bir ağ paylaşımı çekirdekte bloke oluyor ve bu programdaki hiçbir zaman aşımı onu kaldıramaz — ama neyi beklediğini bilmek, beklemekle vazgeçmek arasında seçim yapmanızı sağlayan şey.
spacetrace import bir ncdu ya da gdu JSON dışa aktarımını okuyup anlık görüntü olarak saklıyor; böylece elinizdeki eski taramalar karşılaştırılabilir hâle geliyor — artık yeniden taranamayacak, ortadan kalkmış bir makinenin taraması dâhil. Bir dizinin kendi görünen boyutu içeri alınırken atılıyor: onu saymak, du --apparent-size'ın bu aracın bildirdiği rakamla çelişmesinin sebebi.
spacetrace export --format csv her girdi için bir satır yazıyor; --depth ile de hiçbir hesap tablosunun bütün açamayacağı bir ağacın yalnızca üst katmanlarında durabiliyorsunuz. İki ölçü de ayrı sütun, ayar değil — dosyaların iddia ettiği ve diskin tuttuğu — ve yanlarında her girdinin kendi maliyeti var, böylece bir dosyayı üstündeki her klasör için tekrar saymadan toplam yeniden kurulabiliyor. İsimlerdeki virgül, tırnak ve satır sonu düzgün kaçırılıyor: bunlar dosya adında geçerli karakterler ve naif bir dışa aktarım onları sessizce yanlış satırlara çeviriyor.
spacetrace age dolu bir diskin sorduğu diğer soruyu cevaplıyor: ne büyük değil, kimsenin dokunmadığı ne. Baytlar son değiştirilme zamanına göre gruplanıyor — bantları --bands ile siz belirliyorsunuz — ve dosya sayısına göre değil boyuta göre ağırlıklandırılıyor, çünkü yüz bin eski kaynak dosyası cevap değil, bir tane eski disk imajı cevap. Değiştirilme zamanı hiç kaydedilmemiş dosyalar elli yıllık sayılmak yerine ayrı bildiriliyor.
Değişti
Ajanın /status'u artık çalışan bir taramanın ilerlediğini mi yoksa takıldığını mı söylüyor. scanning düz bir yol yerine tarama başına bir nesne taşıyor: canlı sayaçlar, aşama (walking ya da finishing — yürüyüşten sonra yalnızca clone sondası kımıldıyor, yani yalnızca dosya sayan biri sağlıklı bir taramayı takılmış sanıyor) ve bütün sayaçlar durduğunda ne kadar süredir durdukları ile hangi dizinleri bekledikleri. Takılma süresini ajanın içindeki bir izleyici ölçüyor, yani /status'u seyrek yoklamak süreyi şişirmiyor.
Performans
Taramalar artık çekirdek başına bir yerine en fazla sekiz thread kullanıyor; ölçülen her dizin ağacında daha hızlı çıktı — küçüğünde %39, büyüğünde %11. Yürüyüş syscall'a bağlı: belli bir noktadan sonra thread'ler çalışmak yerine çekirdekte sıraya giriyor. --threads N ile değiştirilebilir.
macOS'ta taramalar yaklaşık 2,3 kat hızlandı. Eski yürüyüş çekirdekten önce bir dizinin adlarını, sonra girdi başına bir kez daha boyut ve tarihleri istiyordu; macOS ikisini tek çağrıda verebiliyor ve artık öyle yapıyor. Uçtan uca, iki gerçek ağaçta ölçüldü: birinde 1293 ms'den 556 ms'ye, diğerinde 1554 ms'den 646 ms'ye — iki sürüm de birebir aynı toplamları bildiriyor.
Düzeltildi
İlerleme göstergesi her taramanın sonuna doğru donmuş görünüyordu. Yürüyüşten sonra kopyala-yazarken klonlarını arayan ikinci bir geçiş var ve hiçbir sayacı kımıldatmıyordu — ~/github'da 1989 milisaniyenin 1193'ü. O aşama artık adını söylüyor ve denetlediğini sayıyor.
Sunucusu ortadan kaybolmuş bir ağ paylaşımı artık taramanın tamamını kilitlemiyor. Bağlı bir dosya sistemine yapılan ilk sorgu bir kez asıldığında kesilemiyor ve dizinler tek thread'de listelendiği için ölü bir paylaşım bütün kardeşlerini de beraberinde götürüyordu. Taramalar artık önce mount tablosunu okuyor, mount noktasına terk etmeye razı olduğu bir thread üzerinden yaklaşıyor ve 60 saniye sonra onu okunamayan yol olarak kaydedip devam ediyor — yani sonuç o tek dosya sistemi kadar eksik oluyor ve bunu söylüyor, hiç gelmemek yerine. --mount-timeout 0 eski davranışı geri veriyor; kontrolün ölçülen maliyeti 300.000 girdilik bir ağaçta yaklaşık bir milisaniye.
Snapshot'lar artık içeriklerinin sağlamasını taşıyor ve spacetrace verify bunu denetliyor. Yolda değişmiş bir snapshot inanılmak yerine içe aktarılırken reddediliyor: dönen tek bir bit kusursuz geçerlilikte bir ağaç bırakıyor ve yanlış rakam bildiriyor — bugüne kadar hiçbir şeyin göremediği arıza tam olarak buydu.
Değişti
Snapshot veritabanı, sağlamaya yer açmak için yeni bir şemaya geçiyor. Eski sürümler bu sürümün yazdığı bir veritabanını artık açmıyor — yanlış okumak yerine bunu açıkça söylüyorlar. Aynı geçmişi masaüstü uygulamasıyla da kullanıyorsanız onu da güncelleyin.
install.sh ve spacetrace update yine doğru sürümü buluyor. Üç bileşen de tek depoya yayınladığı için GitHub'ın en son sürümü bir süre hub'ınkini gösterdi — install.sh onu kuramıyordu, güncelleme kontrolü de hiçbir sürüm olarak okuyordu.
Ajan, yeni bir sürüm olduğunda bunu /status üzerinden bildiriyor. Yalnızca bildirim: hiçbir şeyi kendisi kurmuyor. Günde bir kez, makine hakkında hiçbir şey göndermeden, ve update_check = false ile tamamen kapanıyor.
spacetrace update en yeni sürümü çalışan sürümün üzerine kuruyor; indirdiğini önce yayınlanan SHA256SUMS ile doğruluyor.
Günde bir kez yeni sürüm kontrolü, stderr'e tek satır. Yalnızca etiketli bir derlemede ve terminalde çalışıyor, ilk seferinde ne yaptığını söylüyor, ve SPACETRACE_NO_UPDATE_CHECK=1 ile tamamen kapanıyor.
--version artık hangi derleme olduğunu söylüyor: commit, derleme tarihi ve kanal. Ajan aynı bilgiyi /health ve /status üzerinden veriyor.
Her sürüm artık beş dilde yazılmış sürüm notlarıyla geliyor, ve depoda bir CHANGELOG.md var.
Değişti
Blok paylaşımı olmadığında disk boyutlarının du ile uyuştuğu sözü, artık belgedeki bir iddia değil, gerçek du çalıştıran bir testle zorlanıyor.
Performans
Büyük bir ağacı taramak belirgin biçimde daha az bellek kullanıyor: ağaç düğümü 104 bayttan 72 bayta indi ve adlar tek bir paylaşılan arenaya taşındı.
Düzeltildi
install.sh indirdiğini yayınlanan SHA256SUMS ile doğruluyor. Dosya her sürümde yayınlanıyordu ve hiç okunmuyordu.
APFS clone'ları bir kez sayılıyor. 100 MB'lık üç clone diskte fazladan 0 MB yer tutuyor; du hâlâ 400 MB derken spacetrace artık doğrusunu söylüyor. Kapatmak için --no-clone-dedupe.
Windows'ta artık dosyanın diskte gerçekten kapladığı yer okunuyor ve sabit bağlantılı dosya bir kez sayılıyor; eskiden dosyanın iddia ettiği uzunluğa düşülüyordu.
0.3.0
· geliştirme kilometre taşı
Eklendi
Süren bir tarama iptal edilebiliyor ve yüklü bir ağaçtan alt ağaç, çevresindeki girdileri geçersizleştirmeden çıkarılabiliyor.
Sıralama ve çizim artık hangi ölçüyü kullandığını açıkça söylüyor; böylece en büyük önce diyen bir liste, yanındaki sayıyla aynı şeyi söylüyor.
Her push indirilebilir bir derleme bırakıyor ve install.sh bunu Linux ile macOS'a kuruyor.
0.2.0
· geliştirme kilometre taşı
Eklendi
spacetrace-agent: sunucular ve NAS'lar için salt okunur bir ajan; kendi zamanlayıcısı ve HTTP arayüzü var. Hiçbir şeyi silmiyor.
Dosya sistemi kapasitesi, yüzde dolu olarak değil boş ve toplam olarak bildiriliyor; çünkü APFS'te ve ince havuzlarda yüzde df ile çelişiyor.
Treemap yerleşim motoru: squarified döşeme, detay seviyesi ve hiyerarşiyi izleyen isabet testi.
Düzeltildi
Bir veritabanını açmak artık yazma kilidi almıyor; böylece bir okuma, hâlâ yazmakta olan bir taramayı deviremiyor.
0.1.0
· geliştirme kilometre taşı
Eklendi
Bir dizini tara ve yerin nereye gittiğini gör; iki ölçü yan yana: dosyaların iddia ettiği ve diskin gerçekten tuttuğu.
SQLite'ta saklanan anlık görüntüler; bugün alınan bir tarama gelecek ay alınanla karşılaştırılabiliyor.
spacetrace diff bir değişimin altındaki her dosyayı listelemek yerine sorumlu klasörü söylüyor.
Push edilen bir snapshot kaydedilmeden önce baştan sona denetleniyor: ağacı tutarlı, her değeri doğru türde olmalı. Sağlaması doğru ama ağacı bozuk olan biri şimdiye kadar yine de kaydediliyordu ve ardından onu okuyan her sayfa başarısız oluyordu; artık 400 ile reddediliyor ve ondan hiçbir şey kalmıyor. Bir günden fazla ileri tarihli bir snapshot da reddediliyor, çünkü makinesinin en yeni taraması olarak sonsuza dek kalırdı - yani saati o kadar ileride olan bir agent, saati düzelene kadar her push'ta 400 alıyor.
Bir uyarı kuralı webhook çağırmak yerine e-posta gönderebiliyor. URL'nin geldiği yere bir adres yazmak yeterli; bir kuralın tam olarak bir hedefi var, yani birbiriyle tutarsız hâle gelecek bir şey yok. Posta ayarları panoda değil, hub yapılandırma dosyasının [smtp] bölümünde: veritabanı yedeklediğiniz dosya ve içindeki bir parola her kopyayla birlikte geziyor. Yeni Ayarlar sayfası röleyi gösteriyor — parolayı asla — ve bir uyarının izlediği yoldan test mesajı gönderiyor; yani oradaki başarı uyarıların ulaşacağı anlamına geliyor, başarısızlık da disk dolmadan neyin yanlış olduğunu söylüyor.
Tek ortak kimlik yerine kişiler. Yeni Kişiler sayfası kişi başına bir token veriyor, iki rolden biriyle: görüntüleyici tüm filoyu görüyor ve hiçbirini değiştiremiyor, yönetici erişimi kimin aldığı dâhil her şeyi değiştirebiliyor. Uyarı kuralları artık kimin eklediğini kaydediyor — ortak bir girişin asla cevaplayamadığı soru. Parola değil token, bilerek: üretilmiş bir token düz bir özet olarak saklanabilir çünkü tahmin edilecek bir şey yok, seçilmiş bir parola saklanamazdı. Hub yapılandırma dosyasındaki token çalışmaya ve yönetici olmaya devam ediyor: geri dönüş yolu o, son yöneticinin kendi erişimini kaldıramamasının sebebi de aynı.
Pushlanan bir snapshot, taşıdığı sağlamaya karşı denetleniyor ve tutmuyorsa filoya katılmak yerine 400 ile reddediliyor. Yolda dönen bir bit, geçerli bir ağacın içinde yanlış bir rakam bırakıyor — aciliyete göre sıralayan bir panoda bu, en üstte yanlış makine demek.
Değişti
Hub'ın snapshot veritabanı, sağlamaya yer açmak için yeni bir şemaya geçiyor. Eski bir sürüme dönmek dosyayı artık açmıyor — yanlış okumak yerine bunu açıkça söylüyor. Yükseltmeden önce bir kopya kenara koymanın maliyeti yok.
About sayfası artık yalnızca yayınlanmış sürümleri listeliyor. Tamamlanmış ama hiçbir sürüme girmemiş girdiler, sizin kopyanızda bulunmayan bir işi anlatıyordu.