Uzun dönem Windows kullanıcıları, sistem klasörlerinin (genellikle C:\Windows) altında WinSxS adında bir klasörün olduğunu görmüşlerdir. Bu klasör korunan ve içeriği administrator ile bile değiştirilemeyen bir yapıya sahiptir. Kurulumdaki bütün sistem dosyalarının asılları bu klasörün altındadır. Kullanımdaki kopyası ise aslında bir kopya değil, dosyanın aslına bir harlink'tir. Örnek olarak explorer.exe'ye bakalım.
C:\> dir C:\Windows\explorer.exe | fl FullName, LinkType, Target
FullName : C:\Windows\explorer.exe
LinkType : HardLink
Target : {C:\Windows\WinSxS\amd64_microsoft-windows-explorer...
Bu klasördeki bütün dosyaları görmek için
dir * -file | ft Name, LinkType
kullanabiliriz. Evet, bu güvenlik önlemlerine karşı kötü niyetli yazılımların da karşı yöntemleri var. Herşeye rağmen hardlink bozulabilir, sistem dosyası kötü bir kopya ile değiştirilebilr. Hatta WinSxS klasörü altındaki dosya bile değiştirilebilir. Sistemimizde beklenmeyen bir durum olduğunda her kaynakta ilk yapılması gereken
sfc /scannow
olarak önerilmiş. Arka planda bu komut, sistem dosyalarını tarar, bütünlüğünü, denetler ve güvenilir bir katalogdaki özelliklere (imza, hash vs) sahip olup olmadığını kontrol eder. Ayrıca hardlink'inin doğru olup olmadığına da bakar. Sonra eğer burada bir sorun algılarsa WinSxS altındaki doğru dosyaya olan hardlink'i tekrar oluşturarak onarmaya çalışır. WinSxS altında bir dosyanın birden fazla sürümü olabilir. Bütün sürümler yinw WinSxS klasöründe saklanır. O yüzden en son güncelleme ile gelen sürüme hardlink oluşturulması önemli.
WinSxS klasöründe bir bozulma olmuşsa sfc bu aşamada yetersiz kalır. Bu bozulmayı onarmak için kullanılacak araç dism. Dism'in kafa karıştıran 3 farklı komutu var:
- CheckHealth
- ScanHealth
- RestoreHealth
Bu 3 komutu, bir disk taramasındaki işlemlere benzeterek açıklamaya çalışacağım.
Diskimizde bir sorun olduğunu anlamak için bir tarama yapmak istiyoruz. Ama hızlı olmasını istiyoruz. Bütün diski taramak çok zaman ve enerji alan bir işlem. Aslında diskte işlem yaparken hata ile karşılaşan bir program var mı diye baksak olmaz mı? Bunun için önce evenlog'a bakıyoruz, herhangi bir program buraya disk ile ilgili hata olayı yazmış mı diye. Bu CheckHealth'a karşılık gelen bir işlem. Bütün WinSxS klasöründeki dosyaları taramak da çok zaman ve enerji alan bir işlem olduğu için kaydı düşülen bir sorun var mı, ona bakıyoruz. Bu işlemde bir düzeltme işlemi uygulanmıyor. Örnek kullanım:
DISM /Online /Cleanup-Image /CheckHealth
İkinci komut ScanHealth, daha çok diskte bir düzeltme işlemi yapmadan taramaya benziyor. Sistem açıkken diskte onarım yapmak istemiyorsak, sadece hata var mı yok mu bize onu söylesin diyorsak bu işlem uygulanabilir. Yine bu adımda da diskte bir düzeltme yapılmayacak. Örnek kullanım:
DISM /Online /Cleanup-Image /ScanHealth
Üçüncü komut RestoreHealth ise aktif olarak diskte hataları bul ve düzelt komutu gibi. Bütün WinSxS klasörü taranır, bulunan hatalar (ISO dosyasından veya internetten) bozulmamış kopyalar kullanılarak düzeltilir. Örnek kullanım:
DISM /Online /Cleanup-Image /RestoreHealth
Dism, bunun yanı sıra açık olan Windows kurulumu üzerinde de işlem yapabilir, DVD veya USB'den boot edilerek disklerden birindeki kurulum üzerinde de çalışabilir. /ONLINE anahtarı şu an çalışan sistem üzerinde işlem yapılmasını söylüyor.
Dism'in bunun dışında çok güzel kullanımları var. Örneğin WinSxS klasörümüzün boyutu çok büyüdüyse ve eski sürümlere ait dosyaları silmek istersek (kesinlikle elle yapılmaması gereken bir işlem) aşağıdaki komut kullanılabilir.
Önce mevcut WinSxS (component store - Windows Side-by-side) boyutunu kontrol edelim:
C:\> dism /online /cleanup-image /analyzecomponentstore
Deployment Image Servicing and Management tool
Version: 10.0.22621.2792
Image Version: 10.0.22631.3880
[===========================99.6%========================= ]
Component Store (WinSxS) information:
Windows Explorer Reported Size of Component Store : 14.29 GB
Actual Size of Component Store : 13.35 GB
Shared with Windows : 7.30 GB
Backups and Disabled Features : 6.05 GB
Cache and Temporary Data : 0 bytes
Date of Last Cleanup : 2024-07-15 12:24:43
Number of Reclaimable Packages : 3
Component Store Cleanup Recommended : Yes
The operation completed successfully.
Eski ve kullanılmayan (superseded) sürümleri silelim
Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
Bu komut sonrasında da kurulmuş güncellemerin kaldırılması imkansız hale gelir. Görece daha "hafif" bir temizlik için /ResetBase olmadan kullanabiliriz.
Bir service pack ile eski duruma düşmüş dosyaları silmek için (service pack'in kaldırılmasını imkansız hale getirir)
Dism.exe /online /Cleanup-Image /SPSuperseded
dism'in kullanımına benzer olarak Powershell'in de Repair-WindowsImage cmdlet'i var, aşağıdaki gibi kullanımı mümkün:
Repair-WindowsImage -CheckHealth Repair-WindowsImage -ScanHealth Repair-WindowsImage -RestoreHealth
Bir sistemde kurulu olan güncellemeleri listelemek için
dism /online /Get-Packages /Format:Table
Şu an açık olan sistemde bunu elde etmenin başka yolları da var. Ama DVD veya USB'den açılmış sistem üzerinde aynısını yapabilmek için
dism /image:D:\ /Get-Packages /Format:Table
Burada /image:D:\ Windows'un bulunduğu sürücüyü göstermeli.
Karşılaşılan sorunlar ile ilgili şu videoya bakılabilir.
Hiç yorum yok:
Yorum Gönder