首页 > Windows开发 > 详细

[软件推荐]一款win7 x86 x64都能用的免费内存虚拟盘的小工具——ImDisk

时间:2016-01-15 14:26:24      阅读:1010      评论:0      收藏:0      [点我收藏+]

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,基本的原理就是:

  1. 創建一個新的映像檔案。
  2. 將該映像檔案掛載到特定的虛擬硬碟上。

再來就是考慮如何在系統開關機時自動回存的功能了。

  • 既然 ImDisk 可以將映像檔案掛載到虛擬硬碟上,所以只要在系統開機時執行掛載的指令即可。
  • 但 ImDisk (至目前版本, 1.4.1)並沒有提供如何將虛擬硬碟內變更後的資料寫回至映像檔,所以就必須找一個具有「磁碟複製 (disk clone)」功能的工具程式,來達成寫回實體硬碟映像檔的功能。這邊目前我是採用同一作者撰寫超小巧的工具程式-rawcopy,來完成這一功能。(也可以使用如 dd for windows 工具)
  • 將上述掛載與寫回作成批次指令 (batch file),然後在系統開關機時自動執行批次指令。

以下就把我安裝與設定 ImDisk 的心得整理成步驟實行的導引,我的環境為 Windows 7 x64。

    1. 下載並安裝 ImDisk
    2. 將 ImDisk 服務設定為自動啟動。
      [控制台]→[系統管理工具]→[服務],找到 [Helper service for ImDisk Virtual Disk Driver],並將其啟動類型設定為「自動」。
      技术分享
    3. 先暫時關閉 UAC 功能。
      [控制台]→[使用者帳戶]→[變更使用者帳戶控制設定]→將拉條調到最下。設定後需要重新開機。
      技术分享
    4. 在[命令提示字元]捷徑,滑鼠右鍵,選擇「以系統管理員身份執行」點擊執行。
      技术分享
    5. 執行創建虛擬硬碟的指令 (只要執行一次即可)。
      imdisk -a -t vm -s 2G -m R: -p "/fs:fat32 /v:MemDisk /q /y"

      -s 指定虛擬硬碟大小;-m 指定硬碟代號;-p 設定格式化參數。
      這邊我設定的就是 2GB 大小、硬碟代號為 R:、格式化為 fat32 檔案系統 (也可設定為 ntfs)。

    6. 在 [控制台] 首頁,將[檢視方式]改為「小圖示」,可以看到 [ImDisk Virtual Disk Driver] (原作者可能沒有分類好,我在分類主項目都找不到),點擊執行後即會出現 ImDisk Control Panel 視窗。
    7. 在 ImDisk Control Panel 視窗,可以看到已掛載的虛擬硬碟,點選以後點擊下列的 [Save Image] 按鈕,會出現一個對話框,選預設即可,將映像檔指定檔名與位置儲存。
      我是指定 C:\Bootimg 為 Ramdisk 的儲存位置 (包括 rawcopy, Batch 指令檔等也是在該位置),檔名為「Ramdisk.img」。
      技术分享

好啦,這樣是告第一段落,其實目的只有一個:創建一個已包含虛擬硬碟 (本例為 R 磁碟)磁區內容的映像檔。搞這麼麻煩的原因實在是因為 ImDisk Control Panel 對於 UAC 啟動後總會有權限無法存取等問題,所以必須先暫時關閉 UAC,先創建出映像檔再說,成功後再啟動回覆 UAC 原先等級即可。

  1. 下載 rowcopy.zip,解壓縮放至 C:\Bootimg 內。
  2. 新增並編輯兩個檔案:Startup.cmd , Shutdown.cmd,將此兩個批次檔儲存至 C:\Bootimg 內。
    Startup.cmd
    imdisk -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)。

  3. 利用 [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

[软件推荐]一款win7 x86 x64都能用的免费内存虚拟盘的小工具——ImDisk

原文:http://www.cnblogs.com/snippet/p/software-imdisk.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!