2012/05/07

用 File-Based Write Filter(FBWF) 使 RAMDisk 擁有動態記憶體分配功能

(本文適用 Windows 7 64bit 版本)

RAMDisk 通常是指定分配空間之後,不管你有沒有使用,都會吃掉實際可用的記憶體。例如你分一個 2GB 的 RAMDisk,到 Windows 的工作管理員可以看到記憶體已經被吃掉了。有一些 RAMDisk 有動態記憶體分配的技術 (Dynamic RAM Allocation),可以讓你吃多少用多少。這樣的好處是當你 RAMDisk 沒有用到的時候,系統不會將記憶體圈存起來,這樣你仍然可以使用完整的記憶體空間。當你真正放檔案到 RAMDisk 的時候,再真正的圈存記憶體。可惜有這個功能的 RAMDisk 是必須付錢的:VSuite RamdiskPrimo Ramdisk之類。

現在,不管你用什麼 RAMdisk,只要使用微軟的 File-Based Write Filter (FBWF),就可以達到動態記憶體分配的效果。不過,這有幾個缺點:

不能放分頁檔到 RAMDisk 上 (因為 FBWF 啟動在分頁檔產生之後,而且原本縮小後的 RAMDisk 也無法容納)。
非 64bit 版本所能分配的空間有限 (XP: 320MB, Win7 32bit: 1GB, Win7 64bit: 128GB)。

當然,如果你不在意的話,倒是可以使用的很快樂。因為分配空間很重要,因此 64bit 的作業環境是最推薦的,上限 128GB 應該足夠的。

取得及安裝 File-Based Write Filter (FBWF)


請到這個討論串(Win7 下使用 FBWF,为C 盘写保护,图文)的二樓,樓主上傳到115了。解壓取出 fbwfcfg.exe, fbwfcfg.dll, fbwflib.dll, fbwfMgr.exe, fbwf.sys 這些檔案。將 fbwf.sys 放到 %SYSTEMROOT%\system32\drivers 下 (需管理員權限,複製時會提醒)。其他檔案放到 %SYSTEMROOT%\system32 即可。

隨包附上的 reg 登錄機碼則點兩下匯入即可。這樣就可以重開機載入驅動了。

排解 FbwfMgr: Unable to communicate with the file-based write filter. 問題 (可略過)


問題先寫在前面。我照網路上這樣安裝之後重開機,然後要進行設定的時候總是跑出這個畫面。明明檔案有複製到,也是用系統管理員下命令,但是就是失敗。後來才發現原來是機碼有缺導致服務沒有順利啟動。參考這篇 (FBWF安装及使用的若干问题) 的說明我們知道 [HKLM\SYSTEM\CurrentControlSet\ENUM\Root] 有機碼沒有寫入 (僅限 SYSTEM 寫入,連系統管理員都沒權限),需要手動寫入。

所以先取得 PsExec: Sysinternals PsExec,然後以系統管理員開啟命令提示字元 (滑鼠右鍵選擇以系統管理員身分執行),執行這個命令:
psexec -i -d -s regedit
這樣可以用系統帳號來執行登錄機碼編輯器。

順利開啟後,將以下檔案存成 reg 檔案並使用功能表檔案→匯入來進行登錄機碼的增加。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_FBWF]
"NextInstance"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_FBWF\0000]
"Service"="Fbwf"
"Legacy"=dword:00000001
"ConfigFlags"=dword:00000020
"Class"="LegacyDriver"
"ClassGUID"="{8ECC055D-047F-11D1-A537-0000F8753ED1}"
"DeviceDesc"="Fbwf"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_FBWF\0000\Control]
"ActiveService"="Fbwf"

重新開機後,應該就正常了。我是得做到這一步才能啟動服務,若沒有問題可直接跳過此節。

設定 FBWF


安裝完並重新開機後,請用系統管理員身分執行命令提示字元。

fbwfmgr /enable
如果出現 FbwfMgr: Unable to communicate with the file-based write filter. 請先確認是不是用管理員身分執行、和檔案是否複製正確。都一樣那就是機碼問題,試試上一節吧。

一般來說它會回應 File-based write filter will be enabled on the next reboot.,然後就能做一些設定。

fbwfmgr /addvolume X:
fbwfmgr /setthreshold 6144
fbwfmgr /setsizedisplay 1
將 RAMDisk 加入 FBWF 保護,X: 為 RAMDisk 代號。大小設為 6GB (數字單位為MB) 並啟動虛擬容量顯示,這樣你才會看到經過保護之後的確實容量。

最後再次重開機,檢查一下是不是OK了。

RAMDisk 設定


RAMDisk 經過 FBWF 保護之後,其實它的大小一點也不重要了,設太大還會吃掉記憶體。所以大小改成 16MB 就可以了,越小越好啦,因為這個分配區根本用不上,只是作為 FBWF 的一個位置設定而已。這個設定依每個軟體不同而有不同,請自行依照軟體說明修改。

實驗發現這個磁區設為 FAT 並沒有 4GB 檔案限制,也就是 RAMDisk 只是幌子,實際上都是由 FBWF 在控制的。

參考文章

- 將RAMDISK修改為動態虛擬硬碟
- Win7 下使用 FBWF,为C 盘写保护,图文
- FBWF安装及使用的若干问题
- [心得] Ramdisk 與 win7 x64 使用FBWF telnet://ptt.cc #1FN4QE81 (Storage_Zone)

沒有留言:

張貼留言