看板 tails
作者 標題 [筆記] ImDisk使用心得
時間 2012年04月10日 Tue. AM 04:05:07
2012/4/11: [更新] 開關機自動執行
剛剛試了一下開關機自動執行的功能
不如想像中順利,不過也找到原因了
因為我批次檔是使用相對路徑的寫法
而開關機自動執行所使用的是命令列絕對路徑執行
照理來說,執行的時候會因為找不到檔案,最後錯誤結束
所以剛做了一點小修正
變成如果要使用開關機自動執行的話,就必須設定絕對路徑
相對路徑仍然可以正常執行(檔案總管點兩下的方法)
開關機自動執行的方法寫在下面,檔案下載也已做過修正了
剛剛試了一下開關機自動執行的功能
不如想像中順利,不過也找到原因了
因為我批次檔是使用相對路徑的寫法
而開關機自動執行所使用的是命令列絕對路徑執行
照理來說,執行的時候會因為找不到檔案,最後錯誤結束
所以剛做了一點小修正
變成如果要使用開關機自動執行的話,就必須設定絕對路徑
相對路徑仍然可以正常執行(檔案總管點兩下的方法)
開關機自動執行的方法寫在下面,檔案下載也已做過修正了
先前所提到的DOS指令
就是為了這個ImDisk
在開始使用之前先聽一個自編小故事
故事內容合不合理其實不重要
重要的是遇到的問題是什麼
=== 故事開始 ===
資工系出身的我
沒有修不好的電腦!!
但是卻有修不完的電腦...
親朋好友都知道我讀資工系
都會找我修電腦
然後請我吃飯
我不是討厭這種沒薪水的工作
而是每次別人電腦一出問題
需要重灌的機率高達99.98%
即然都是要重灌的
那我就必需準備一堆光碟:系統軟體、辦公室軟體、影音播放軟體、小遊戲、小工具
在XP和XP以前,每次裝系統軟體都要等好久
因為都是直接一個一個檔COPY進去
XP之後使用類似GHOST還原的技術,才比較快
但比較快沒用,因為其他軟體都還是要一個一個安裝
每個安裝就要驗證一堆有的沒有的東西,然後才會開始跑進度
最近Portable軟體非常的多,讓我非常的喜歡
因為不需要再跑那些安裝,直接COPY進去就搞定了
可是收集了很多不同的軟體後,
有2個問題出現了:
1.軟體一多,開啟軟體變得有點麻煩
因為下載軟體後,使用目錄分門別類擺放是必要的
但是要執行的時候必須經過層層把關才能執行到想執行的軟體
因為不需要安裝,所以桌面連結、開始目錄選單都沒有捷徑可以使用
2.軟體一多,COPY時間一樣會很長
原因是Portable軟體都是解壓的
所以常常會有很多小檔案
在複製的時候都會被這些小檔案給拖慢 (隨身碟更慘)
第1個問題好解決
Portable的愛好者自然想出一套辦法來解決了--做一個Portable的選單管理器
此選單管理器只要使用相對路徑的方式來連結各個程式
就能達到捷徑的功能了
第2個問題最後也出現解決方式了--使用虛擬磁碟
先建立一個可讀寫的虛擬磁碟把所有軟體放進去
再把磁碟整個dump下來建立成一個映像檔
只要需要使用的時候,直接掛載這個映像檔就能得到所有軟體的一個虛擬磁碟
要使用隨身碟時,只要映像檔連同虛擬磁碟軟體放入
裝好虛擬磁碟軟體後,掛載的瞬間,就等同裝好所有軟體了!
使用Portable版還有一個優點在於
只要系統相容,通常有80%以上的機率可以免安裝執行 (不敢說100%)
所以可以應用在所有的相容的公用電腦 (比方說學校電腦、網咖、公司電腦等)
而且大部分Portable的存檔都會存在同目錄下 (我目前用的都是這樣,也是不敢說絕對...)
對於隱密性也不錯
於是我變得超愛Portable軟體了XD
=== 故事結束 ===
看完以上的故事,相信應該能理解此篇的重點在於Portable版的應用
最後隨之而來的下一個問題,要用哪一套虛擬磁碟軟體?
我選擇的就是ImDisk了,有幾個主要原因:
1.免費,之前看到另一個Dataram Ramdisk,免費版只能支援到4G
2.軟體很小,安裝檔只有300多K
3.多一個附加價值,可以把映像檔掛在RAM上(當然映像檔不能比RAM大)
現在應該有的人的RAM都是大到用不完吧
因為RAM的執行速度可是硬碟的100倍 (SATA3 約70MB/s上下, DDR3 約3Gb/s 請自行換算O.Q)
使用RAM當cache一定是是超乎想像的快
只是缺點是這些東西都必需要自己設定...因此才會出現這篇文章
雖然優點很吸引人
但是掛載時會有點不穩定
可能是我指令的問題...
心動了嗎?開始學習吧~
以下以Windows為主 (Linux很少Portable軟體,設計理念不同的關係吧...)
首先當然要先來下載ImDisk!!
首頁
另外要下載一個叫 rawcopy 的軟體,可以使用Ctrl + F來找這個軟體
可以去下載幾個Portable軟體來做測試,比方說Chrome或Firefox會需要大量I/O的
Portable App
再來下載選單軟體(可以自行選擇喜歡的,我選PortableApps.com):
PortableApps.com
ASuite
準備好之後就可以開始規劃目錄了
我的做法是分成兩個目錄:
ImDisk目錄:放ImDisk程式、映像檔、批次檔等
Portable目錄:放Portable軟體、選單軟體、暫存資料等
ImDisk目錄我建立2個目錄:ImDisk、VirtualDisk
和兩個批次檔:Startup.cmd、Shutdown.cmd
ImDisk放ImDisk安裝檔與rawcopy外,另外放了3個批次檔:entry.cmd、mount.cmd、unmount.cmd
VirtualDisk放磁碟設定檔與映像檔
再來內容部分僅供參考
要是完全照以下文件輸入後
出現不可預期的錯誤或導致硬體損壞的話
本人不需要負任何責任
[v]我了解了。
Startup.cmd:(此檔做了切換目錄與呼叫entry檔)
REM @ECHO OFF
SET PORT_ROOT="D:\Portable"
IF EXIST "%cd%\ImDisk\entry.cmd" GOTO EXEC
IF "%PORT_ROOT%" == "" GOTO END
FOR /F "tokens=1,2 delims=:" %%a IN (%PORT_ROOT%) DO %%a:
CD %PORT_ROOT%
:EXEC
CMD /C ImDisk\entry.cmd %cd% startup
:END
SET PORT_ROOT="D:\Portable"
IF EXIST "%cd%\ImDisk\entry.cmd" GOTO EXEC
IF "%PORT_ROOT%" == "" GOTO END
FOR /F "tokens=1,2 delims=:" %%a IN (%PORT_ROOT%) DO %%a:
CD %PORT_ROOT%
:EXEC
CMD /C ImDisk\entry.cmd %cd% startup
:END
Shutdown.cmd:(同上)
REM @ECHO OFF
SET PORT_ROOT="D:\Portable"
IF EXIST "%cd%\ImDisk\entry.cmd" GOTO EXEC
IF "%PORT_ROOT%" == "" GOTO END
FOR /F "tokens=1,2 delims=:" %%a IN (%PORT_ROOT%) DO %%a:
CD %PORT_ROOT%
:EXEC
CMD /C ImDisk\entry.cmd %cd% shutdown
:END
SET PORT_ROOT="D:\Portable"
IF EXIST "%cd%\ImDisk\entry.cmd" GOTO EXEC
IF "%PORT_ROOT%" == "" GOTO END
FOR /F "tokens=1,2 delims=:" %%a IN (%PORT_ROOT%) DO %%a:
CD %PORT_ROOT%
:EXEC
CMD /C ImDisk\entry.cmd %cd% shutdown
:END
entry.cmd:(上面檔案的進入點)
@ECHO OFF
SET "PORT_DIR_WORK=%1"
SET "PORT_DIR_IMDISK=%1\ImDisk"
SET "PORT_DIR_VIRTUAL_DISK=%1\VirtualDisk"
IF "%2" == "" GOTO END
IF "%2" == "shutdown" GOTO SHUTDOWN
IF "%2" == "startup" GOTO STARTUP
:STARTUP
IF EXIST "%SystemRoot%\System32\imdisk.exe" GOTO START_IMDISK
IF NOT EXIST "%PORT_DIR_IMDISK%\imdiskinst.exe" GOTO END_NO_IMDISK
ECHO Installing ImDisk ...
CALL "%PORT_DIR_IMDISK%\imdiskinst.exe"
ECHO Install ImDisk OK.
:START_IMDISK
ECHO Starting Virtual Disk...
FOR %%i IN (%PORT_DIR_VIRTUAL_DISK%\*.ini) DO %PORT_DIR_IMDISK%\mount.cmd %%i
GOTO END
:SHUTDOWN
ECHO Stoping Virtual Disk...
FOR %%i IN (%PORT_DIR_VIRTUAL_DISK%\*.ini) DO %PORT_DIR_IMDISK%\unmount.cmd %%i
GOTO END
:END_NO_IMDISK
ECHO You don't have ImDisk install file.
ECHO Please download and put in "%PORT_DIR_WORK%"
PAUSE
GOTO END
:END
SET "PORT_DIR_WORK=%1"
SET "PORT_DIR_IMDISK=%1\ImDisk"
SET "PORT_DIR_VIRTUAL_DISK=%1\VirtualDisk"
IF "%2" == "" GOTO END
IF "%2" == "shutdown" GOTO SHUTDOWN
IF "%2" == "startup" GOTO STARTUP
:STARTUP
IF EXIST "%SystemRoot%\System32\imdisk.exe" GOTO START_IMDISK
IF NOT EXIST "%PORT_DIR_IMDISK%\imdiskinst.exe" GOTO END_NO_IMDISK
ECHO Installing ImDisk ...
CALL "%PORT_DIR_IMDISK%\imdiskinst.exe"
ECHO Install ImDisk OK.
:START_IMDISK
ECHO Starting Virtual Disk...
FOR %%i IN (%PORT_DIR_VIRTUAL_DISK%\*.ini) DO %PORT_DIR_IMDISK%\mount.cmd %%i
GOTO END
:SHUTDOWN
ECHO Stoping Virtual Disk...
FOR %%i IN (%PORT_DIR_VIRTUAL_DISK%\*.ini) DO %PORT_DIR_IMDISK%\unmount.cmd %%i
GOTO END
:END_NO_IMDISK
ECHO You don't have ImDisk install file.
ECHO Please download and put in "%PORT_DIR_WORK%"
PAUSE
GOTO END
:END
mount.cmd:(掛載用)
IF "%1" == "" GOTO END
ECHO Loading %1 setting ...
FOR /F "tokens=1,2 delims==" %%a IN ('TYPE %1') DO SET %%a=%%b
IF "%PORT_DISK_ENABLE%" == "0" GOTO END
IF EXIST %PORT_DISK_ID%:\ GOTO END
IF EXIST "%PORT_DIR_VIRTUAL_DISK%\%PORT_DISK_IMG_NAME%.img" GOTO MOUNT
ECHO Initializing %1 Virtual Disk ...
GOTO END
:MOUNT
ECHO Mount %1 Virtual Disk ...
imdisk -a -t %PORT_DISK_TYPE% -f "%PORT_DIR_VIRTUAL_DISK%\%PORT_DISK_IMG_NAME%.img" -m %PORT_DISK_ID%:
ECHO Mount OK ...
GOTO END
:END
ECHO Loading %1 setting ...
FOR /F "tokens=1,2 delims==" %%a IN ('TYPE %1') DO SET %%a=%%b
IF "%PORT_DISK_ENABLE%" == "0" GOTO END
IF EXIST %PORT_DISK_ID%:\ GOTO END
IF EXIST "%PORT_DIR_VIRTUAL_DISK%\%PORT_DISK_IMG_NAME%.img" GOTO MOUNT
ECHO Initializing %1 Virtual Disk ...
IF "%PORT_DISK_TYPE%" == "file" imdisk -a -t %PORT_DISK_TYPE% -f "%PORT_DIR_VIRTUAL_DISK%\%PORT_DISK_IMG_NAME%.img" -s %PORT_DISK_SIZE% -m %PORT_DISK_ID%: -p "/fs:%PORT_DISK_FS% /v:%PORT_DISK_V% /q /y"
IF "%PORT_DISK_TYPE%" == "vm" imdisk -a -t %PORT_DISK_TYPE% -s %PORT_DISK_SIZE% -m %PORT_DISK_ID%: -p "/fs:%PORT_DISK_FS% /v:%PORT_DISK_V% /q /y"GOTO END
:MOUNT
ECHO Mount %1 Virtual Disk ...
imdisk -a -t %PORT_DISK_TYPE% -f "%PORT_DIR_VIRTUAL_DISK%\%PORT_DISK_IMG_NAME%.img" -m %PORT_DISK_ID%:
ECHO Mount OK ...
GOTO END
:END
unmount.cmd:(缷載用)
IF "%1" == "" GOTO END
ECHO Loading %1 setting ...
FOR /F "tokens=1,2 delims==" %%a IN ('TYPE %1') DO SET %%a=%%b
IF "%PORT_DISK_ENABLE%" == "0" GOTO END
IF NOT EXIST %PORT_DISK_ID%:\ GOTO END
IF "%PORT_DISK_AUTO_UNMOUNT%" == "1" GOTO UNMOUNT_RESTORE
:UNMOUNT
CHOICE /C YN /M "%PORT_DISK_ID%:\ is mounted, Do you want to unmount? (Y/N)"
IF ERRORLEVEL 2 GOTO END
IF ERRORLEVEL 1 GOTO UNMOUNT_RESTORE
:UNMOUNT_RESTORE
IF NOT "%PORT_DISK_IMG_RESTORE%" == "1" GOTO UNMOUNT_DO
ECHO Restoring %1 Virtual Disk ...
%PORT_DIR_IMDISK%\rawcopy.exe -mld \\.\%PORT_DISK_ID%: "%PORT_DIR_VIRTUAL_DISK%\%PORT_DISK_IMG_NAME%.img"
:UNMOUNT_DO
ECHO Unmount %1 Virtual Disk ...
imdisk -D -m %PORT_DISK_ID%:
ECHO Unmount OK ...
GOTO END
:END
ECHO Loading %1 setting ...
FOR /F "tokens=1,2 delims==" %%a IN ('TYPE %1') DO SET %%a=%%b
IF "%PORT_DISK_ENABLE%" == "0" GOTO END
IF NOT EXIST %PORT_DISK_ID%:\ GOTO END
IF "%PORT_DISK_AUTO_UNMOUNT%" == "1" GOTO UNMOUNT_RESTORE
:UNMOUNT
CHOICE /C YN /M "%PORT_DISK_ID%:\ is mounted, Do you want to unmount? (Y/N)"
IF ERRORLEVEL 2 GOTO END
IF ERRORLEVEL 1 GOTO UNMOUNT_RESTORE
:UNMOUNT_RESTORE
IF NOT "%PORT_DISK_IMG_RESTORE%" == "1" GOTO UNMOUNT_DO
ECHO Restoring %1 Virtual Disk ...
%PORT_DIR_IMDISK%\rawcopy.exe -mld \\.\%PORT_DISK_ID%: "%PORT_DIR_VIRTUAL_DISK%\%PORT_DISK_IMG_NAME%.img"
:UNMOUNT_DO
ECHO Unmount %1 Virtual Disk ...
imdisk -D -m %PORT_DISK_ID%:
ECHO Unmount OK ...
GOTO END
:END
設定檔範例RAMDisk.ini:
PORT_DISK_ENABLE=1
PORT_DISK_SIZE=1G
PORT_DISK_ID=Z
PORT_DISK_TYPE=vm
PORT_DISK_FS=ntfs
PORT_DISK_V=RAMDisk
PORT_DISK_IMG_NAME=RAMDisk
PORT_DISK_IMG_RESTORE=1
PORT_DISK_AUTO_UNMOUNT=1
PORT_DISK_SIZE=1G
PORT_DISK_ID=Z
PORT_DISK_TYPE=vm
PORT_DISK_FS=ntfs
PORT_DISK_V=RAMDisk
PORT_DISK_IMG_NAME=RAMDisk
PORT_DISK_IMG_RESTORE=1
PORT_DISK_AUTO_UNMOUNT=1
這個檔講解一下...
ENABLE,1為啟用、其他為禁用
SIZE,應該只會用幾M或幾G,記憶體不夠是不能執行成功的哦
ID,識別碼,範例為Z:
TYPE,模擬的來源可為vm或file、vm代表RAM、file代表檔案系統
FS,檔案系統
V,標籤
IMG_NAME,存映像檔時的名稱
IMG_RESTORE,缷載前是否回存映像檔,1為是,其他為否
AUTO_UNMOUNT,執行缷載時不做詢問的動作。
檔案放置好後
一開始沒有映像檔沒關係
直接設定好執行就會建立一個空的區域了 (只是vm和file方式不一樣而已)
把想放的東西放一放,再執行Shutdown.cmd
如果RESTORE設定1的話,就會回存回去了 (vm需要回存,file應該是不用)
其他ImDisk的操作可以到 控制台→打開所有項目 裡找
不過這部分就留給各位看倌玩了
設定好空的區域後
我會把Portable的目錄放到這個區域裡
然後回存後
隨身碟只要存著img檔和ImDisk的批次檔和安裝檔
到了別人的電腦 只要執行一下批次檔
它就會自動要求安裝與掛載設定檔指定的磁碟
要更自動化的話
就需要找開機自動執行程式的做法了
上面的檔案下載點:http://www.mediafire.com/?dlej3i8jeq3br3n
(2012/4/11 [修改]此檔案已做過修正了)
選單的部分
PortableApps.com大部分都幫你做好了,連下載都可以讓你選,應該會比較好用
ASuite就大多要使用手動了,不過自由度比較高
補充開關機自動執行的部分
首先必須先把整個目錄放在硬碟裡,比方說放C:\Portables
然後使用記事本之類的純文字編輯器修改startup.cmd和shutdown.cmd檔
把最上面那行的註解取消,並改成目前所在的絕對路徑
記得絕對路徑必需格式正確:[磁碟機代號]:[\目錄]....
SET PORT_ROOT="C:\Portables"
再來開機自動啟動有兩種方法
一種比較簡單,把startup.cmd做一個捷徑放在啟動目錄中就行了
要注意的是,這個方法只有目前登入的使用者有效
其他使用者一樣需要再加入
另一種方法是使用開關機執行
Windows鍵 + R
輸入gpedit.msc
然後按確定
再來依下圖左方選擇(本機電腦原則 > 電腦設定 > Windows 設定 > 指令碼 - (啟動/關機) )
啟動裡面加入 "C:\Portables\Startup.cmd"
關機如法炮製 "C:\Portables\Shutdown.cmd"
儲存後即可
--
ImDisk的中文文件還是很少數
所以參考資料不夠多,寫的很爛
希望大家別見怪O.Q
--
參考網站:
安裝上百套軟體,只須1分鐘
超小巧效能強悍的窮人版 Ramdisk-ImDisk (含安裝與設定圖解說明@Windows 7 x64)
Win7 x64 下使用 ImDisk 當作RamDisk的小小心得與改良方法
給免安裝軟體一個舒適的家,Asuite1.5隨身啟動選單
究極綠化!Netbeans portable
--
※ 作者: tails 時間: 2012-04-10 04:05:07
※ 編輯: tails 時間: 2012-04-12 09:58:41
※ 看板: tails 文章推薦值: 1 目前人氣: 0 累積人氣: 5016
回列表(←)
分享