Windows Sistemlerde Crash Dump Analizi – Bölüm 1: Windows Neden Çöker, Crash Dump Nedir, Nasıl Alınır?

Windows ile çalışırken mutlaka bir gün Windows’un çökmesi ile karşılaşmışızdır. Çoğunlukla Windows’un çökme sebebi olarak yeni eklenen bir donanım ya da sürücü (driver) olsa da aslında Windows’un çökme nedeni çok farklı olabilir.

Windows’un çökme sebebini analiz etmeden once Windows’un neden çöktüğünü anlamamız gerekir.

Windows Neden Çöker

Bu soruya detaylı olarak bilgi verebilmek için aslında Windows’un nasıl tasarlandığı ve nasıl çalıştığı ile ilgili detaylı bilgiye sahip olmamız gerekir. Ancak burada bir işletim sisteminin nasıl çalıştığını anlatmamız mümkün olmadığından, bu konuya daha yüzeysel bakacağız.

Windows bugüne kadar hemen hep x86 işlemciler üzerinde çalıştı. x86 sistemler, birden çok programın aynı anda çalışmasına izin verir ve bunu programların birbirlerinin kaynaklarına erişmeden yapmasını sağlar. Aslında programların birbirlerinin kaynaklarına erişimini kısıtlamak x86 sistemlerin bir “uygulama koruma” sistemidir. x86 Windows sistemlerde belleğe (RAM) ve donanıma erişim 2 seviyeli bir ayrıcalık (privilege) ile olur: çekirdek (kernel) seviyesi ve kullanıcı (user) seviyesi.

Çekirdek seviyesi x86 sistemlerde en yüksek ayrıcalıktır. Windows işletim sistemi (operating system) ve aygıt sürücüleri (device drivers) güvenilir (trusted) olarak kabul edilirler ve bu sebepten çekirdek seviyesinde çalışırlar. Bu, bir taraftan sistem kaynaklarına aygıt sürücülerinin başıboş olarak erişmesi demekken bir taraftan da arada başka bir katman olmamasından dolayı işletim sisteminin donanım kaynaklarından olabilecek en fazla şekilde yararlanması demektir. İşletim sistemi ve donanım sürücüleri dışında kalan diğer uygulamalara da kullanıcı seviyesi önceliği atanır. Kullanıcı seviyesi x86 sistemlerin en düşük ayrıcalıklı seviyesidir ve sistem kaynaklarına erişimi kısıtlıdır. Bu kısıtlama uygulamaların sistem seviyesine erişmesini ve birbirlerinin kaynaklarını kullanmaya çalışmalarının önüne geçer. Örneğin Microsoft Excel, kullanıcı seviyesinde çalışır ve hiçbir şekilde donanıma ya da yanında çalışan Notepad uygulamasının kaynaklarına erişme yetkisi yoktur.

Çekirdek seviyesi uygulamalar her ne kadar kullanıcı seviyesi uygulamalardan korunsa da çekirdek seviyesinde çalışan diğer uygulamalardan korunmaz. Örneğin bir aygıt sürücüsü başka bir uygulama tarafından kullanılan bellek alanına (ya da çekirdek seviyesi uygulamalar tarafından erişilebilir olarak açıkça belirlenmeyen bir alana) eriştiğinde Windows bütün sistemi durdurur. Buna hata kontrolü (bug check) veya çökme (crash) adı verilir ve Windows meşhur ölümcül mavi ekranını (Blue Screen of Death – BSOD) gösterir. Windows çökmelerinin %95’i hatalı yazılımlardan (hatalı donanım sürücülerinden) kaynaklanır. Bu hatalı sürücülerin hemen hepsi de 3. parti firmaların yazdığı sürücülerdir. Kalan %5’lik kısım da arızalı olan ve genellikle de bellekteki bilgileri bozan (corrupt) donanımdan kaynaklanır.

Az bilinen konulardan birisi de birçok çökmenin aslında tekrarlanan çökme olduğudur. Çok az sistem yöneticisi çökmeleri analiz edip sorunları kısa zamanda çözebilir. Bu sebepten çökmeler bir çözüm bulunana kadar birçok defa tekrarlanır. Herhangi bir sistemin ilk çökme durumunda sebebini bulabilirsek muhtemel diğer çökmelerin de önüne geçebiliriz.

Biz yazımızda Windows Server 2008 R2 çökmeleri üzerinde duracağız. Ancak diğer Windows işletim sistemlerinde – Windows Server 2003, Windows XP, Windows 7 ve Windows 8 dahil tüm Windows sistemleri – aynı prensipleri uygulayabilirsiniz. Gerekli araçlara sahip olduğunuz takdirde Linux, Unix, NetWare gibi diğer işletim sistemlerinde de aynı prensipler ile, ancak farklı araçlar ve farklı bakış açıları ile çökmeleri analiz edebilirsiniz.

Crash Dump Nedir?

Crash dump aslında çökme anında bellekte (RAM) bulunan tüm bilgilerdir, ya da başka bir deyişle o andaki belleğin bir kopyasıdır. Bu kopyayı ilk açtığınızda görebileceğiniz en şifreli dosyayı gördüğünüzü düşünebilirsiniz, ancak çökme ile ilgili gidebileceğiniz en iyi yer de crash dump dosyasıdır. Bu dosyaya bakmak yerine kullanıcıya ya da sistem yöneticisine en son ne yaptığını sorup da crash dump içinde yazan bilgiyi edinmeye çalışabilirsiniz ancak bu bilgi de çok doğru olmayabilir: ne yaptıklarının farkında olmayabilirler (sadece bir donanım sürücüsü güncellemesinin bu sonuca sebep olacağını düşünmeyebilirler) ya da tam olarak istediğimiz bilgiyi bize veremeyebilirler.

Windows 2000, 2003 ve XP sistemlerde 3, Windows 2008 ve Windows 2008 R2 sistemlerde 2, Windows 8  ve Windows 2012 sistemlerde 4 tip crash dump dosyası vardır:

  • Küçük dump (small/mini dump) (Windows 2000, 2003, XP sistemlerde 64 KB, 2008, 2008 R2 sistemlerde 256 KB): Birkaç yüz megabyte ya da birkaç gigabyte büyüklüğünde belleğin bu kadar az bir dosyaya yazılabilmesinin sebebi, çökme anında bellekte bulunan ikili (binary) dosyaların ya da çalıştırılabilir (executable) uygulamaların dump dosyasında bulunamamasıdır. Uygulamaların(.exe dosyalarının) ve ikili dosyaların bulunmaması küçük dump dosyalarının içerdiği bilgi kısıtlı olduğundan çökme analizinde bu dosyalar da bize kısıtlı fayda sağlar. Ancak eğer çökme analizini çökmenin olduğu makinede yapıyorsak, hata ayıklayıcı (debugger) bu bilgileri bir ihtimâl, eğer sistem güncellemesi yapılmadıysa sistem kök dosyalarında bulabilir (bunun üzerinde daha sonra konuşacağız). Windows 2003 ve XP sistemler varsayılan ayarlarında her çökme için küçük dump dosyası kaydederken, tam (full) dump dosyasını da sadece en son çökme için kaydeder. Windows 2000 sistemler sadece tek bir tam dump dosyasını, Windows 2008, 2008 R2 ve Windows 7 sistemler çekirdek bellek (kernel memory) dump dosyasını, Windows 8 ve Windows 2012 sistemler de otomatik bellek dump dosyasını kaydederler.
  • Çekirdek bellek dump’ı  (kernel memory dump) (Windows 2003, Windows XP, Windows 7, Windows 2008, Windows 2008 R2, Windows 8, Windows 2012): Bu dump dosyasının büyüklüğü, çökme sırasında işletim sistemi çekirdeği tarafından kullanılan bellek boyutuna eşittir. Örneğin 2 GB bellek (RAM) ile çalışan Windows 2003 için bu dosya yaklaşık 70-80 Megabyte büyüklüğündedir, ancak tabi ki bu değer sizin sistemlerinizde daha değişik olabilir. Çekirdek bellek dump dosyası birçok durum için en kullanışlı dump dosyasıdır: hem dosya boyutu çok büyük değildir, hem de çökme ile muhtemelen bir ilgisi olmayan bellek bölümleri ile ilgili bilgiler dump dosyasında bulunmaz.
  • Tam dump (complete/full dump)(Windows 2003, Windows XP, Windows 8, Windows 2012): Bu dosyanın büyüklüğü sistemde bulunan bellek (RAM) miktarına eşittir. Bu dump dosyasınin boyutu bu sebepten çok büyük olduğundan kaydedilmesi ve analiz için başka bir makinaya aktarılması zor olacaktır. Ancak diğer tarafta bu dump dosyasında tüm uygulamalar ve bellekteki bilgiler bulunduğundan en fazla bilgiyi  de bu dump tipi içerir.
  • Otomatik dump (Automatic memory dump) (Windows 8 ve Windows 2012): Otomatik dump dosyası temelde çekirdek bellek dump (kernel memory dump) dosyası ile aynıdır. Fark şu sebepten kaynaklanır: Microsoft tarafından Windows 8 ve Windows 2012 sistemlerde page file dosyasının sistem tarafından yönetildiği makinalarda, SMSS (Session Manager Subsystem) süreci ile page file boyutunun azaltılması yoluna gidilmiştir. Örneğin 16 Gigabyte belleği olan bir sunucuda pagefile.sys dosyası 6 Gigabyte’a kadar inebilir. Ancak eğer bir çökme olursa pagefile.sys dosyası yine 16 Gigabyte civarına (yani bellek ile aynı boyuta) çekilecektir. Bu durum sistemin ilk çökmesinden itibaren ilk 4 hafta içinde olacaktır, sonrasında pagefile.sys dosyasının boyutu yine düşecektir. Burada amaç SMSS ile azaltılmış olan pagefile.sys dosyasından alınan bilgilerin yeterli olmadığı durumlarda tüm bilgileri içeren dump dosyaları oluşturmaktır. Eğer çökmeye sebep olan sorun düzeltilmediyse 4 hafta içinde sistem muhtemelen birkaç defa daha çökecek ve tüm bilgileri içeren dump dosyasından gerekli bilgiler alınabilecektir.

Sunucularda tam dump almak için en az bellek miktarı kadar yer gerektiğinden, bu seçenek her sunucu için uygun olmayabilir. Bu sebepten en azından tüm sunucular için en azından çekirdek bellek dump alınmasını sağlamak çökmeleri izleyebilmek için bize başlangıç aşaması için çok değerli bilgiye sahip olmamızı sağlayacaktır.

Crash Dump Nasıl Alınır

Windows işletim sistemlerinin varsayılan durumda ile otomatik olarak crash dump dosyası alacak şekilde kurulduğuna değinmiştik. Ayarları kontrol etmek ya da değiştirmek için Bilgisayarım (My Computer) simgesine sağ tıklayıp Özellikler (Properties) seçtikten sonra:

  • Windows 2003, Windows XP sistemlerde Gelişmiş (Advanced) sekmesinde Başlangıç ve Kurtarma (Startup and Recovery) kısmında Ayarlara (Settings),
  • Windows 2008, Windows 2008 R2 sistemlerde Gelişmiş Sistem Ayarları’na (Advanced System Settings) tıklayarak açılan pencerede Başlangıç ve Kurtarma (Startup and Recovery) kısmında Ayarlara (Settings),

gitmemiz gerekir.

CRSHDMP01 - Windows 2008 R2 Sunucuda Cokme Dokum Ayarlari

Varsayılan olarak çökme dosyaları %SystemRoot% (eğer sisteminiz varsayılan olarak kurulduysa C:Windows) altında MEMORY.DMP olarak kaydedilir:

Windows 2008 R2 sunucuda Crash Dump ayarları - Dump dosyası kayıt dizini.

Eğer sisteminizde çökme yaşıyor ve dump dosyasını bulamıyorsanız, muhtemel sebebi aşağıdakilerden birisidir:

  • Hata ayıklama bilgisi yazma (write debugging information) altında yok (none) seçilmiştir,
  • Page file dosyası (pagefile.sys) işletim sisteminin kurulu olduğu disk bölümünde değildir,
  • Page file dosyasının (pagefile.sys) boyutu çok küçüktür,
  • Page file dosyası (pagefile.sys) yoktur,
  • Çökme sistem açılışının ilk adımlarında gerçekleşiyordur.

 

Windows Sistemlerde Crash Dump Analizi

Reklamlar