2008年10月1日 星期三

XP 休眠問題排除

網路上提到 XP 休眠的問題有很多種, 而我這次遇到的是記憶體昇級和疑似 Gavotte Ramdisk 造成的無法休眠。

兩年前買 NB DDR2 512MB 還要 $1200, 但這次買 2GB 只要 $950, 真的便宜許多, 。只是 記憶體從 1GB (0.5+0.5) 昇級到 2GB 以上 (2 或 2+0.5), 及安裝 Gavotte Ramdisk 之後就無法休眠

下面就來看此次排除的經過囉~~

.

待命 與 休眠

  待命
Suspend to Memory (S3), Standby
休眠
Suspend to Disk (S4), Hibernate
特色 保留記憶體內容, 只供電給記憶體, 關閉其他電源, 可在幾秒之內待命及還原 將記憶體內容儲存到硬碟, 關閉所有電源 (就是真的關機), 下次開機再從硬碟回復。休眠及還原大約各需要30秒到數分鐘, 視記憶體大小及硬碟速度而定
需求   需保留與記憶體大小相同的硬碟空間 (XP 內定為 C:\hiberfil.sys)
適用場合 短時間不使用電腦, 或短距離移動時 完全關閉電腦電源, 但又希望保留先前的工作狀態時

影響『待命』與『休眠』是否能正常運作的因素大致上有 :

  • 硬體 : 硬體故障, 或硬體不相容
  • 軟體 : 安裝或更新的程式有問題, 或是系統檔案有問題
  • 使用情境 : 有時透過網路分享檔案時, 可能會無法『待命』與『休眠』

參考資料

.

XP 休眠問題排除過程

  • 記憶體 1GB (0.5+0.5)
可以正常 待命 與 休眠
無法休眠, 嘗試要休眠時, 螢幕會黑一下就馬上回來, 之後就只能待命, 而且『電源選項』的休眠分頁也跟著消失, 要重新開機才會再出現。
有時剛開機不執行太多程式, 卻又可以休眠。
  • boot.ini 加入 /pae 選項
沒有改善
沒有改善
  • 改成 2GB
沒有改善
  • boot.ini 加入 /3gb 選項
開機輸入登入密碼之後出現錯誤, 無法開機到出現桌面
  • 拿掉 boot.ini 的 /pae /3gb 選項
  • 回復到 1GB (0.5+0.5)
2008-09-29
可以正常 待命 與 休眠
  • 安裝 KB909095 修正程式 
  • 昇級到 2GB
2008-09-29
可以正常 待命 與 休眠
觀察中
後續可能的動作  
  • 昇級到 2.5GB (2+0.5)
 
 

.

乍看之下, 似乎『KB909095 修正程式』就是解藥了, 以下是微軟官網的敍述

電腦偶爾無法依照您的操作進入休眠。發生此問題時,會出現類似下列的錯誤訊息:

系統資源不足,無法完成 API。

出現此問題時,必須重新啟動電腦,休眠功能才可恢復使用。
此問題通常是起因於電腦使用了 1 GB 或更多的 RAM。

在安裝『KB909095 修正程式』之前, 我可是半信半疑 (下面會解釋原因)。但是安裝之後, 已經在 2GB 的記憶體下成功休眠大約十次, 應該是沒有問題了。

至於 Gavotte Ramdisk 暫時先不裝, 因為在 mobile01 看到另一種說法 :

PageFile.sys 存在與否的迷思 (mobile01, 2008-04-08)

後來是解決了啦
之後在C:\跟R:\下各設(30-30)
那個速度就很快的微妙

既然記憶體夠大之後, 可以將 分頁檔 設為 (30-30), 那還需不需要 RamDisk 啊? (上面 R:\ 指的是 RamDisk), 我看還是先試試不要有 RamDisk 的狀況好了, 所以我目前的組態是 :

  • 2GB 記憶體
 
  • 分頁檔 C:\(30-30)
    (系統內容 => 進階 => 效能選項 => 進階 => 虛擬記憶體)

image
  • 增加『系統快取記憶體』的使用
    (系統內容 => 進階 => 效能選項 => 進階 => 記憶體使用量)
image
  • 硬碟從 80GB 昇級到 160GB
2GB 的記憶體下, 進入休眠只要 20秒,
開機如果不算 BIOS 的話, 20秒可看到桌面,

.

休眠外一章 -- 硬碟速度

由前一台筆電的經驗 ( IBM Thinkpad 240, 有機會在『我的電腦 』系列會提到), 得知硬碟速度對系統效能的影響 。所以這次同時昇級記憶體和硬碟, 由下面列出的 HD Tune 實測數據可以看出, 80GB 到 160GB 不只容量變大, 讀取的速度也變成將近兩倍。平時使用當然是『如虎添翼』, 而且休眠也不會因為記憶體容量變大, 而多花太多時間。

  80GB 160GB
轉速 5400 rpm 5400 rpm
內圈讀取速度 34 MB/sec 66 MB/sec
外圈讀取速度 17 MB/sec 33 MB/sec

.

追、追、追 -- KB909095 修正程式』修正了什麼 ?

下面細節或許太瑣碎, 擔心消化不良的人就直接跳過吧 !!

對於『KB909095 修正程式』, 我真的是半信半疑。在安裝之前, 我試了幾次, 雖然無法休眠, 但是 有出現系統資源不足,無法完成 API』的錯誤訊息。另外微軟官網記載『KB909095 修正程式』的檔案日期是 2005-10-12。而我電腦裡面的是 2007-03-01, 似乎沒有安裝舊版本來解決問題的道理

image
能休眠和不能休眠時, 都可以看到『Windows Image Acquisition (WIA) 服務已進入 執行中 狀態』的記錄, 分不出有什不同, 也沒有出現系統資源不足,無法完成 API』的錯誤訊息。
image
微軟官網記載『KB909095 修正程式』的檔案日期 2005-10-12

還是姑且一試, 裝完修正程式之後, 先去看到底改了什麼

  • c:\WINDOWS\$NtUninstallKB909095$
    => 沒有備份任何檔案
  • c:\WINDOWS\KB909095.log
    => 複製檔案: c:\windows\inf\branches.inf, 和一些看不懂的 branch 比對記錄
  • C:\WINDOWS\system32\ntkrnlpa.exe 和 ntoskrnl.exe 的日期還是 2007-03-01, 而沒有 ntkrpamp.exe 和 ntkrnlmp.exe

這樣就有效了嗎? 但是 安裝『KB909095 修正程式』似乎真的解決了問題 ...., 該怎麼解釋呢?

.

不小心發現和 KB909095 安裝時間非常接近的, 還有另一組 $NtUninstallKB931784$、KB931784.log

仔細查看 KB931784.log 的內容, 發現它裡面有一年前的安裝記錄
image 

在同一個檔案裡面, 又加了一段時間是 2008/09/29 20:39:28 的安裝記錄, (剛好緊接在 KB909095 的 2008/09/29 20:38:54 之後), 難道說 KB909095 檢查版本後, 沒直接安裝自己的內容, 但是因為那四個檔案的相依性, 所以又接著由 KB931784KB909095 的『branch』合併進來, 才修正完成 ?

image 

.

至於 KB931784 的說明, 看來真的和 休眠 沒什麼關係。

MS07-022:Windows 核心的弱點可能會允許權限提高 (KB931784)

...當系統嘗試連線到 Windows Update 時,可能會發生問題。之所以發生這個問題,是因為原始發行的安全性更新中的 Ntoskrnl.exe 檔版本號碼不正確。...

.