使用RamDisk與否,一直存在網友間的論戰。對我來說,使用RamDisk至少可以降低硬碟機或SSD的讀寫頻率,以提高其壽命,所以我將 TEMP 目錄,IE / Firefox Temp 目錄,Pagefile,以及虛擬機器的無重要資料的虛擬磁碟檔案等等都放到RamDisk中。日常應用中,舉凡壓縮解壓縮或光碟映像檔處理等等,都先以RamDisk為暫存空間,所以算是RamDisk的中或重度使用者。
其中,Pagefile on RamDisk 是最常引發使用與否的論戰之一。對我而言,挖了一大塊記憶體來當作RamDisk後,自然會擔心剩下的記憶體偶而會不夠應用程式使用,所以在RamDisk中設定一個初始容量很小,但可隨系統需要自行長大的Pagefile,仍是一個很好的方案。
在過去的系統,可用的RamDisk軟體的選擇性較多,但在Win7又使用x64版本的條件下,若加上我自己需要的額外條件:免費、可設定為NTFS(便於放入大檔案)、可放入Pagefile等等條件,選擇性真的就不多了。而ImDisk 正好是一個可行的方案。
對於把 ImDisk 當作 RamDisk 來使用,網路上多有論述,例如01上的 超小巧效能強悍的窮人版 Ramdisk-ImDisk (含安裝與設定圖解說明@Windows 7 x64) 有基本且較詳細介紹。
ImDisk 是一個 open source 的 virtual disk driver,但作者的driver binary file 已經過數位簽章認證因而可以在 x64 環境下正常使用。不過由於該驅動程式的屬性,無法在Windows 下直接在控制台設定 Pagefile,幸好仍有一個工具程式 swapadd.exe 可以手動增加Pagefile在 RamDisk 中。ImDisk Installer 和 swapadd 都可以在官網上找到:http://www.ltr-data.se/opencode.html/。
我的設定方法並不使用映像檔也不在關機時回存,而是使用startup script來設定之,關機後內容也不要了,這樣保留設定RamDisk大小的彈性,也略過了設定映像檔的繁瑣步驟。原始方法如下:
1. 安裝 ImDisk
2. 設定 ImDisk service 開機自動執行,方法是 裝置管理員 -> 檢視 -> 顯示隱藏裝置. 然後在 非隨插即用驅動程式 -> ImDisk Virtual Disk Driver 按右鍵 -> 內容 -> 驅動程式 -> 啟動 -> 類型 -> 自動。
3. 建立一個工作目錄,我建立的是 C:\WBIN\RamDisk,將 swapadd.exe 放入該目錄,並建立一個 bproc.cmd 的 script file,設定的內涵是 7G大小的RamDisk在R: drive,而Pagefile大小為64MB~4096MB,其cmd file內容如下
C:\Windows\System32\imdisk -a -t vm -s 7G -m R: -p "/fs:ntfs /v:RamDisk /q /c /y"
C:\WBIN\RamDisk\swapadd r:\pagefile 64M 4096M
md R:\TEMP
4. 接著指定開機時自動執行 bproc.cmd,方法是以 WinKey+R或Command Prompt 執行 gpedit,在 電腦設定 -> Windows 設定 -> 指令碼,然有 double click 啟動 -> 新增 -> 選取 C:\WBIN\RamDisk 下的 bproc.cmd 即可。
5. 重新開機即可看到結果RamDisk R: 已存在。
6. 接著可以開始轉移 TEMP,IE Temp 等等。
初步到此似乎是成功了,但是安裝防毒軟體後,發現重開機 RamDisk 不見了。原本單純以為是防毒軟體block startup script,經過長時間試驗各家的免費防毒軟體,狀況都相同。深入研究才發現原來安裝防毒軟體後延遲了 ImDisk driver 的載入,以致於 startup script 執行時,ImDisk driver竟還沒有運作。
為了解決這個問題,網路搜尋了半天不得要領,只好自己想辦法。幾經思索,想到一個不完善但卻可行,也實驗成功的方法,簡單說,就是在 startup script 一開始先檢查並等待 ImDisk driver 已載入才繼續 script。方法是利用 ImDisk 的 frontend config 程式 (也就是 imdisk.exe) 執行 enquiry 動作 (imdisk -l),根據傳回的訊息即可判斷 ImDisk driver 是否已載入。判斷的小程式 (chkmsg.c/exe) 如下:
int main(void)
{
char str[128];
scanf("%s",str);
printf("%s\n",str);
if(str[0] != 'N') // simply check 1st char only
{
Sleep(1000); // delay 1000ms = 1second
return(1);
}
return(0);
}
改良後方法如下:
1. 安裝 ImDisk
2. 設定 ImDisk service 開機自動執行,方法是 裝置管理員 -> 檢視 -> 顯示隱藏裝置. 然後在 非隨插即用驅動程式 -> ImDisk Virtual Disk Driver 按右鍵 -> 內容 -> 驅動程式 -> 啟動 -> 類型 -> 自動。
3. 建立一個工作目錄,我建立的是 C:\WBIN\RamDisk,將 swapadd.exe / chkmsg.exe / bproc.cmd / waitim.cmd等置入該目錄。
4. 接著指定開機時自動執行 bproc.cmd,方法是以 WinKey+R或Command Prompt 執行 gpedit,在 電腦設定 -> Windows 設定 -> 指令碼,然有 double click 啟動 -> 新增 -> 選取 C:\WBIN\RamDisk 下的 bproc.cmd 即可。
5. 重新開機即可看到結果RamDisk R: 已存在。
6. 接著可以開始轉移 TEMP,IE Temp 等等。
請注意,若工作目錄或 Windows 安裝目錄不同,請自行對應修改 bproc.cmd 和 waitim.cmd。另外,由於不熟悉batch script 的高階用法,waitim.cmd用plain的方式執行最多9次檢查動作,每次間隔1秒,有興趣請自行修改。最後,附件附上 bproc.cmd / waitim.cmd / chkmsg.exe 的 zip 檔。
附加壓縮檔: 201106/mobile01-48f1d12956f7d4739da3d4e2118d6895.zip
----------------2011/6/13更新--------------------
繞了一圈,卻發現忘了最基本的方法,只要在 bproc.cmd 一開始就啟動 imdisk service 即可,這樣連步驟2也可省去,也不需要 waitim.cmd / chkmsg.exe 了。bproc.cmd file內容更新如下
net start imdisk
C:\Windows\System32\imdisk -a -t vm -s 7G -m R: -p "/fs:ntfs /v:RamDisk /q /c /y"
C:\WBIN\RamDisk\swapadd r:\pagefile 64M 4096M
md R:\TEMP
對了,原本附件的bproc.cmd未更新,請自行修改之。
----------------2011/11/22更新--------------------
又發現原本的內容有問題, 經過網路搜尋研究, 應該還須再修正. 不過目前沒有完美的方案.
簡單說, 原先看到許多教學提到的類似命令
imdisk -a -t vm -s 7G -m R: -p "/fs:ntfs /v:RamDisk /q /y"
所建立的 RamDisk (應該是 Virtual Disk), 其實並不能拿來放 pagefile. 原因是這個命令是由 System Virtual memory 來配置記憶體, 而這些 virtual memory 本身是可能被 swap out to pagefile 的. 這樣造成衝突, 結果就是當機.
正確建立於 physical memory 的 RamDisk 應該使用以下命令.
net start awealloc
net start imdisk
C:\Windows\System32\imdisk -a -s 3G -f \\.\awealloc -m R: -p "/fs:ntfs /v:RamDisk /q /y"
C:\WBIN\RamDisk\swapadd r:\pagefile 64M 2048M
先載入imdisk隨附的 awealloc.sys 這個專門用來配置physical memory as file 的 driver. 再讓 imdisk 使用 driver file \\.\awealloc 來真正配置不會被 swap out 的 memory. 很可惜目前這個 awealloc.sys 不能處理 4G 或以上的記憶體, 這樣限制了單一 RamDisk 的大小了.
----------------2011/11/23更新--------------------
感謝 ultras 及 kamuy 網友提醒, 原來新版本 imdisk 1.5.3 已經解決了 awealloc 的 4GB bug 了.
pg007 wrote:
爬了三天終於找到大大...(恕刪)
不知道您要做的東西的細節,對於 batch file (script file) ,也就是 .bat / .cmd 之類的檔案,我知道的入口點可以有以下幾種:
1. Group Policy (群組原則) 的電腦設定 (啟動/關閉)。
2. Group Policy (群組原則) 的使用者設定 (登入/登出)。
3. 由Registry的許多Run / RunOnce 切入。
4. 由開始功能表的啟動群組。
5. 其他? 我不清楚,由網友補充。
我所用的是第1項,也是我認為最好的位置,1~4項裡面應該只有第1項是以系統管理員身分執行,而且執行的時機也最早。
可參考 http://jwils876.deviantart.com/art/Add-GPEDIT-msc-215792914
注意 若系統使用者目錄 非預設C:\Users 可能無法使用
早先安裝系統時用指令改D:\Users 結果安裝時 導致複製不完整...
開啟GPEDIT.msc後會顯示 MMC 無法建立嵌入式管理單元 搞很久才發現是用戶目錄路徑的問題
最好先換GPEDIT.msc 再手動逐一改目錄位置
剛測了下發現 啟動加入執行程式 無效 不會自動運行.....
或許得改用工作排程 得再研究@[email protected]
工作排程似乎無法設定關機執行程式
簡單說, 原先看到許多教學提到的類似命令
imdisk -a -t vm -s 7G -m R: -p "/fs:ntfs /v:RamDisk /q /y"
所建立的 RamDisk (應該是 Virtual Disk), 其實並不能拿來放 pagefile. 原因是這個命令是由 System Virtual memory 來配置記憶體, 而這些 virtual memory 本身是可能被 swap out to pagefile 的. 這樣造成衝突, 結果就是當機.
正確建立於 physical memory 的 RamDisk 應該使用以下命令.
net start awealloc
net start imdisk
C:\Windows\System32\imdisk -a -s 3G -f \\.\awealloc -m R: -p "/fs:ntfs /v:RamDisk /q /y"
C:\WBIN\RamDisk\swapadd r:\pagefile 64M 2048M
先載入imdisk隨附的 awealloc.sys 這個專門用來配置physical memory as file 的 driver. 再讓 imdisk 使用 driver file \\.\awealloc 來真正配置不會被 swap out 的 memory. 很可惜目前這個 awealloc.sys 不能處理 4G 或以上的記憶體, 這樣限制了單一 RamDisk 的大小了.
-------------------------------------------------------------------------
另外回答 daywalkerN1,
其實我也是用 copy 的方式還原資料, 我只是在 bproc.cmd 後面繼續加上 copy 或 xcopy 命令即可, 基本上 startup script - bproc.cmd 是循序執行的, 前面load driver, 執行的 format 完成後, 後面的 swapadd, md R:\TEMP, copy 等等, 都會等前面執行完才運作, 故一切正常.
pcfree wrote:
沒想到這篇文章又被翻...(恕刪)
剛看完您的文章之後,我找了一些資料。
http://www.billsway.com/notes_public/WinXP_Tweaks/WinXP-2K_Pagefile/
http://www.pcdvd.com.tw/showthread.php?t=920389
我找到上述的軟體,可以用來檢視 pagefile 的使用量
用 google chrome 開了 1x 頁面,然後播放動作片
檢視結果如下
-----------------------------------------------
2011/11/23 下午 09:12:55
Pagefile Physical Location: C:\pagefile.sys
Current Pagefile Usage: 0 MB
Session Peak Usage: 0 MB
Current Pagefile Size: 32 MB
Pagefile Physical Location: r:\pagefile
Current Pagefile Usage: 0 MB
Session Peak Usage: 0 MB
Current Pagefile Size: 64 MB
------------------------------------------------
根本沒用到 @@
我系統設定 page file 32, R 為 ramdisk,採用您原先的方法建立的 64m 4096m
實體記憶體 12g
我在想,是否真的有需要把 pagafile 掛在 ramdisk 上嗎 ?
至於資料備份的部分,目前打算採 7.zip 無壓縮封裝,看看效率會不會比用 xcopy 快
備份
path C:\Program Files\7-Zip\
7z.exe a -mx0 c:\RamDisk\temp.7z r:\temp
回存
path C:\Program Files\7-Zip>
7z x c:\ramdisk\temp.7z -or:\
還在測試階段,您可以參考看看
關閉廣告