win7 x86 x64都能用的免费内存虚拟盘的小工具 ImDisk Virtual Disk Driver
下载地址:
虚拟磁盘驱动器(ImDisk Virtual Disk Driver)1.8.4 绿色汉化版
http://www.uzzf.com/soft/22644.html
安装方法:
解压到d:\apps\, 运行d:\apps\ImDisk\install.cmd即可
创建内存虚拟盘
命令行中输入
imdisk -a -s 200M -m x:
其中-s 200M表示磁盘大小,-m x:表示磁盘卷标
删除虚拟盘
在资源管理器x盘上右键-【卸载ImDisk虚拟磁盘】即可
其他参考资料: Win7 x64 下使用 ImDisk 當作RamDisk的小小心得與改良方法
http://www.mobile01.com/topicdetail.php?f=300&t=2200352
使用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 了.
其他参考资料2
超小巧效能強悍的窮人版 Ramdisk-ImDisk (設定篇) | Kenmingの鮮思維
http://www.kenming.idv.tw/super_lighweight_ramdisk_imdisk_setup
作為虛擬磁碟的驅動程式,ImDisk 最主要的作用就是在於將某一個映像檔案 (Image file),給掛載 (mount)到任一特定的虛擬硬碟上 (可自行指定硬碟代號)。
所以如何將 ImDisk 當成 Ramdisk,基本的原理就是:
- 創建一個新的映像檔案。
- 將該映像檔案掛載到特定的虛擬硬碟上。
再來就是考慮如何在系統開關機時自動回存的功能了。
- 既然 ImDisk 可以將映像檔案掛載到虛擬硬碟上,所以只要在系統開機時執行掛載的指令即可。
- 但 ImDisk (至目前版本, 1.4.1)並沒有提供如何將虛擬硬碟內變更後的資料寫回至映像檔,所以就必須找一個具有「磁碟複製 (disk clone)」功能的工具程式,來達成寫回實體硬碟映像檔的功能。這邊目前我是採用同一作者撰寫超小巧的工具程式-rawcopy,來完成這一功能。(也可以使用如 dd for windows 工具)
- 將上述掛載與寫回作成批次指令 (batch file),然後在系統開關機時自動執行批次指令。
以下就把我安裝與設定 ImDisk 的心得整理成步驟實行的導引,我的環境為 Windows 7 x64。
-
- 下載並安裝 ImDisk。
- 將 ImDisk 服務設定為自動啟動。
[控制台]→[系統管理工具]→[服務],找到 [Helper service for ImDisk Virtual Disk Driver],並將其啟動類型設定為「自動」。 - 先暫時關閉 UAC 功能。
[控制台]→[使用者帳戶]→[變更使用者帳戶控制設定]→將拉條調到最下。設定後需要重新開機。 - 在[命令提示字元]捷徑,滑鼠右鍵,選擇「以系統管理員身份執行」點擊執行。
- 執行創建虛擬硬碟的指令 (只要執行一次即可)。
imdisk -a -t vm -s 2G -m R: -p "/fs:fat32 /v:MemDisk /q /y"
-s 指定虛擬硬碟大小;-m 指定硬碟代號;-p 設定格式化參數。
這邊我設定的就是 2GB 大小、硬碟代號為 R:、格式化為 fat32 檔案系統 (也可設定為 ntfs)。 - 在 [控制台] 首頁,將[檢視方式]改為「小圖示」,可以看到 [ImDisk Virtual Disk Driver] (原作者可能沒有分類好,我在分類主項目都找不到),點擊執行後即會出現 ImDisk Control Panel 視窗。
- 在 ImDisk Control Panel 視窗,可以看到已掛載的虛擬硬碟,點選以後點擊下列的 [Save Image] 按鈕,會出現一個對話框,選預設即可,將映像檔指定檔名與位置儲存。
我是指定 C:\Bootimg 為 Ramdisk 的儲存位置 (包括 rawcopy, Batch 指令檔等也是在該位置),檔名為「Ramdisk.img」。
好啦,這樣是告第一段落,其實目的只有一個:創建一個已包含虛擬硬碟 (本例為 R 磁碟)磁區內容的映像檔。搞這麼麻煩的原因實在是因為 ImDisk Control Panel 對於 UAC 啟動後總會有權限無法存取等問題,所以必須先暫時關閉 UAC,先創建出映像檔再說,成功後再啟動回覆 UAC 原先等級即可。
- 下載 rowcopy.zip,解壓縮放至 C:\Bootimg 內。
- 新增並編輯兩個檔案:Startup.cmd , Shutdown.cmd,將此兩個批次檔儲存至 C:\Bootimg 內。
Startup.cmdimdisk -a -t vm -f C:\Bootimg\Ramdisk.img -m R:
Shutdown.cmd
C:\Bootimg\rawcopy.exe -m \\.\R: C:\Bootimg\RamDisk.img imdisk -D -m R:
-D 必須為大寫,亦即無論是否已 lock 住都強制卸載 (dis-mount)。
- 利用 [Win] +R 快速鍵,啟動「執行 (Run)」對話框,輸入 gpedit.msc,可打開「本機群組原則編輯器 (Group Policy)」視窗。
在 [本機原則]→[電腦設定]→[Windows 設定]→[指令碼 - (啟動/關機)],在「啟動」與「關機」對話框內的[指令碼]標籤,各自新增 Startup.cmd 與 Shutdown.cmd。
大功告成! 如此即可在 Windows 系統開機與關機時,會自動掛載與寫回映像檔。而且利用 ImDisk 達成這樣的回存功能,效能比 Dataram 快上太多了。後者我啟動 Dataram 回存,開機時間要耗上兩分多鐘之久,而前者這樣的客製化回存功能只需要約 40 秒左右,差很大。
再來就是端賴你如何運用 Ramdisk 特性了。最基本的運用,就是把系統暫存的環境變數,以及瀏覽器 (browser)的 Cache 檔案儲存位置,給全設定到 Ramdisk 磁碟上。關機時將虛擬硬碟整個磁區寫回映像檔、開機時再把映像檔掛載到虛擬硬碟上,一切都沒有問題,只稍微影響到系統的開關機時間。
利用 ImDisk 作為 Ramdisk 機制,我是覺得比較屬於克難式的窮人版做法,因為設定繁瑣,且穩定度仍有待商榷 (雖然我還沒遇到問題過)。如果有打算認真運用 Ramdisk 且會切割 4G 以上空間,我還是建議購買商業性的軟件,例如 VSuite Ramdisk 或 Superspeed Ramdisk,就不用搞得這麼複雜。
P.S. 關於上述開機用批次指令的載入方式,也可以使用「註冊表 (registry)」的方式,可參考下表:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ImDisk\Parameters] "LoadDevices"=dword:00000001 "FileName0"="\\DosDevices\\C:\\Bootimg\Ramdisk.img" "DriveLetter0"="R" "Flags0"=dword:00000200 |
關於上述參數的說明,可參考:IMDISK by Olof Lagerkvist。