熱點推薦:
您现在的位置: 電腦知識網 >> 電腦故障 >> 正文

理解Windows啟動和故障恢復中的文件

2013-11-11 23:58:35  來源: 電腦故障 

  默認情況下Windows配置為當系統發生崩潰時嘗試自動抓取一個當前操作系統的狀態信息接下來我們將討論系統故障非應用程序失敗Dump選項可以通過控制面板中的系統工具來進行設置我們打開系統屬性—高級選項卡找到啟動和故障恢復點擊設置我們就可以看到Dump文件的相關配置當系統發生崩潰時類Dump文件可以被捕獲

  


 
  完全內存轉儲當崩潰發生時將捕獲整個物理內存的狀態此類轉儲文件大小為內存中頁面文件大小+MB的文件頭Windows NT只支持完全內存轉儲當然這也是Windows Server Systems的默認設置
 
  核心內存轉儲當崩潰發生時核心內存轉儲只捕獲物理內存中內核態的頁面文件讀/寫數據這只是內核態的轉儲並不包括用戶態進程的頁面不過由用戶態進程頁引起系統崩潰是不大可能的通常都是由內核態引起核心內存轉儲中包括當前運行進程線程和被加載的驅動等相關信息核心內存轉儲文件大小=操作系統內核態內存占用大小+操作系統為驅動程序分配內存的大小
 
  小內存轉儲小內存轉儲(又叫Minidump)是一個K的轉儲文件(位系統和Windows裡是KVistaK)它包括終止代碼參數和被加載的驅動列表主要信息為崩潰時的當前進程線程和內核堆
 
  注意有的情況下我們需要進行完全內存轉儲手動進行完全內存轉儲為程序停止響應的排錯提供了最為豐富的信息因為當程序Hang住時我們需要查看用戶態進程死鎖等等信息不過當你在選擇捕獲哪種Dump文件時一定要考慮好捕獲出來的文件大小如上所述完全內存轉儲文件大小會是在物理內存大小的基礎上+MB(筆者GB內存再加MB恐怖啊……)
 
  前面我們回顧了種類型的Dump文件實則在日常的工作中核心內存轉儲是我們系統崩潰和Bug檢查時最常用到的請記住核心內存轉儲文件大小僅基於內核態內存占用和驅動內存占用(在有更多內存的系統上Dump文件過大是正常的)目前我們還無法精准的計算核心內存轉儲文件大小你可以嘗試手動配置核心內存轉儲來查看頁面文件是否足夠大對於設置最小的核心內存轉儲大小我們有一定的指導方針但對於最大值目前還沒辦法

  

  物理內存

  最小頁面文件 (Kernel Dump)

  < MB

  MB

  < GB

  MB

  < GB

  MB

  >= GB

  MB


 
  如果你擔心頁面文件設置過小無法很好的捕獲核心轉儲我們唯一的辦法就是通過KB所描述的方式使用CrashOnCtrlScroll方法造成手動崩潰系統重啟之後我們可以手工查看Dump文件大小另一種方法是在啟動分區上手動設置GB+MB的頁面文件大小(位系統)這是因為位操作系統內核態最大地址空間就是GB
 
  除了配置正確的頁面文件大小之外我們也需要確保有足夠的磁盤空間讓Dump文件能夠被正確的寫入與頁面文件用來捕獲Dump不同Dump文件可以被寫入其它的本地分區在保存多個Dump文件時請取消選擇覆蓋任何現有文件不過請記住這會給剩余的磁盤空間造成很大的壓力

  


 
  下面我們來看Dump文件是如何被產生的當系統啟動時會到注冊表HKLMSystemCurrentControlSetControlCrashControl 讀取崩潰轉儲選項所有在圖形界面所做的操作都會修改如下注冊表值

  將事件寫入系統日志=LogEvent

  自動重新啟動= AutoReboot
  寫入調試信息= CrashDumpEnabled
  轉儲文件= DumpFile
  覆蓋任何現有文件= Overwrite


 
  如果你的系統超過GB內存在圖形界面中你將不會看到完全內存轉儲選項其原因在KB中進行了描述但我們可以通過將HKLMSystemCurrentControlSetControlCrashControl下的CrashDumpEnabled值設置為來強制啟用它(改這個值在圖形界面中完全內存轉儲仍不會顯示出來)如果你需要完全內存轉儲來做更詳盡的排錯也可以考慮使用Bootini中的MAXMEM開關將位操作系統所使用的內存限制在GB或更少(可以參考KB此時系統就會將完全內存轉儲選項顯示來

  


 
  現在回到Dump文件如何被產生這個話題一旦轉儲功能被啟用操作系統會自動寫一個以Dump_開頭的磁盤迷你端口驅動到啟動分區並校驗與創建Dump文件相關的所有組件包括磁盤迷你端口驅動寫入Dump文件的I/O管理函數和啟動分區的頁面文件最終所得的校驗結果會被保存起來每當系統啟動時KeBugCheck函數會重新進行校驗並與之前的結果相比對如果校驗結果不匹配將不會有Dump文件被寫入磁盤(因為有破壞磁盤數據的危險);如果檢驗結果匹配Dump信息會被寫入已經被寫到磁盤啟動分區上的頁面文件當中文件系統會被完全繞過因為它也有可能是造成崩潰的原因之一當SMSSEXE在啟動過程中開啟內存分頁時系統會仔細檢查啟動分區頁面文件當中的信息如果有崩潰信息這部分頁面文件就會被保護起來如果啟動過程中的所有或部分啟動分區頁面文件不可用系統會提示虛擬內存過低(暫時)啟動進程執行完成之後WINLOGONEXE會調用SAVEDUMPEXE進程從頁面文件中抽出崩潰信息並將Dump文件寫到磁盤上
 
  在Windows Server 某些過程可能會有不同請參考KB當Server啟動之後Windows會要求在啟動分區上創建一個和物理內存相同大小的臨時文件如果磁盤空間不足Dump還是會生成不過會被系統縮減大小在創建Dump操作過程的初期會話管理子系統(SMSSEXE)就會介入驗證內存Dump信息是否有效如果Dump信息有效SMSSEXE會將Dump文件重命名為Dumpxxxtmp進而存儲Dumpxxxtmp到啟動分區並設置HKLM/System/CurrentControlSet/Control/CrashControl/MachineCrash下的TempDestination和DumpFile值SAVEDUMPEXE便會讀取這個值並在判定文件的有效性之後將Dumpxxxtmp保存成Memorydmp

  

  


From:http://tw.wingwit.com/Article/Fault/201311/10391.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.