Virtual Machine 是一個很神奇的東西, 它可以在一個系統裏模擬出不同的作業系統, 比如在Win10中, 可以安裝Linux系統.
能寫出這種東西, 其實都是極度聰明的人或是極具遠觀的公司才辦得到的. 這些人都需具有作業系統能力的人.
目前常用的VM有二種
1. VMWare — 開發者為 VMWare, 需付錢的
2. Virtual Box — 開發者為 Oracle, 免費
那一種比較好呢, 公說公有理, 婆說婆有理. 其實都沒差, 自己用習慣就好了. 本人是一直用VMWare比較習慣.
下載
17.0.0 : 建議使用此版本
16.0.0 : 只能安裝在win10
15.5.6 : 可安裝於 win7及以上的作業系統
17.0亂碼
NZ4RR-FTK5H-H81C1-Q30QH-1V2LA JU090-6039P-08409-8J0QH-2YR7F 4A4RR-813DK-M81A9-4U35H-06KND 4Y09U-AJK97-089Z0-A3054-83KLA 4C21U-2KK9Q-M8130-4V2QH-CF810 MC60H-DWHD5-H80U9-6V85M-8280D
16.0亂碼:
ZF3R0-FHED2-M80TY-8QYGC-NPKYF
15.5亂碼 :
UF71K-2TW5J-M88QZ-8WMNT-WKUY4 AZ7MK-44Y1J-H819Z-WMYNC-N7ATF CU702-DRD1M-H89GP-JFW5E-YL8X6 YY5EA-00XDJ-480RP-35QQV-XY8F6 VA510-23F57-M85PY-7FN7C-MCRG0
建立新VM
從File/new Virtual Machine開始.
常見的問題如下
1. Inatall from
如果選擇Installer disc image file(iso), 則會啟用Easy Install, 這樣就無法自己規畫硬碟Partition大小及一些相關設定
所以建議選擇I will install the operating system later.
2. 上述建立一個空的VM後, 再點選CD/DVD, 然後選定要安裝的ISO檔案
3. CPU數量 : 通常就實体CPU的一半, 盡可能不要影響實体機的速度, 另請記得勾選 Virtualize Intel VT-x or AMD-V/RVI, 這樣效能就會比較好
4. RAM : 4G以上. 通常Ram沒大於16G的話, 你是沒資格玩VM的
5. Network Adapter :
a. NAT : 可以讓VM形成另一個網域, 跟主機不同網域
b. Bridged : 跟實機同樣的網域, 這樣就可以模擬成同網域中有多台機器.
掛載share folder
此說明是在VmWare裏啟動Ubuntu Server時, 掛載 share folder的方法
VmWare需先enabled folder
cd /media
sudo mkdir cdrom
sudo mount /dev/cdrom cdrom
cd
mkdir tmp && cd tmp
#將cdrom裏的所有檔案 copy 到 ~/tmp內再執行
cp -r /media/cdrom/. .
tar zxvf VMwareTools-10.3.22-15902021.tar.gz
cd vmware-tools-distrib
#sudo ./vmware-install.pl
然後一直按enter
sudo reboot
重新開機後, 就可以在/mnt/hgfs看到share folder了
為何要自動啟動VMWare
為什麼開機後要自動啟動VMWare呢?! 當然是要啟動VMWare裏的伺服器, 比如在VMWare裏安裝了Ubuntu系統, 然後架設了ftp server及Apache web server. 當外殼Windows啟動後, 也要順便啟動Ubuntu. 此時就有此需求了
現在問題來了, 當Windows 7啟動後, 一定要先登入, VMWare才有可能自動啟動. 如果希望Windows7在未登入任何使用者時, 就啟動VMWare, 依目前網路上大家的說明, 幾乎都是廢文, 完全不可能.
此篇文章就是為了破除網路上的廢文, 讓VMWare可以在未登入前, 就在背景啟動服務
網路常見的錯誤說明
網路常介紹的, 不外乎如下
1. 寫個bat檔, 然後放在shell:startup裏面
這有二個問題, 一個是此法必需登入才會執行, 另一個問題是為什麼要寫腳本呢, 直接把vmware.exe 或vmplayer.exe的捷徑放在shell:startup裏就好了啊, 這樣啟動時也不會出現一個很礙眼的DOS視窗‧
2. 執行 gpedit.msc, 然後進入Windows設定/指令碼, 於啟動/關機二個項目裏執行指令碼. 此法是完全沒用的, 不用再試了, 試了也是白試。(此法好像需先用其他指令允許啟動本機群組原則,懶的試了)
3.開始/附屬應用程式/系統工具/工作排程器, 在裏面新增一個工作, 觸發時機選電腦啟動時執行. 此方法可行,不過記得要勾選 “不論使用者登入與否均執行”,如此不需要登入亦會自動執行。 不過關機前若要先結束VMWare呢? 又是無解.
正確解決方式
那到底要如何解決呢!! 唯一的方法, 就是自己寫 Windows 服務程式, 本人是使用C# 撰寫的. 不知什麼是 Windows服務的話, 請參照本人所撰寫的文章 — 背景服務Windows Service
請注意, 上述程式碼一定要執行外部程式 vmrun.exe. 因為只有vmrun才能控制VMWare的啟動及停止.
OnStart中, 執行參數是 “-T ws start 映像檔名 nogui”, 記得要加 nogui, 這樣才能無聲無息的在背景中偷偷的運作, 也只有nogui才能正常執行
OnStop中, 執行參數是 “stop 映像檔 soft”, 記得要加 soft, 才能把VMWare正常關機
在C#中, 程式碼撰寫如下
public partial class 啟動Ubuntu : ServiceBase { public 啟動Ubuntu() { InitializeComponent(); } protected override void OnStart(string[] args) { Process.Start(@"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe", @"-T ws start C:\vmware\ubuntu16045\Ubuntu16045.vmx nogui"); } protected override void OnStop() { Process.Start(@"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe", @"stop C:\vmware\ubuntu16045\Ubuntu16045.vmx soft"); } }
安裝Windows服務
上述建置程式後, 在dos下輸入 installUtil 程式名.exe, 即可安裝此服務, 可於如下圖看到VMSrv開始於背景執行
若要移除安裝, 請使用 installUtil /u 程式名.exe
操作方式
重新開機後, 就會在背景啟動VMWare, 如下圖所示, vmware-vmx.exe即為正在執行的程式碼‧
若要停止VMWare, 在dos下使用 stop xxx soft是沒有用的. 需於服務的VMSrv按右鍵/停止服務 才可以‧
請注意, 連 vmrun list, 也是無法列出目前正在執行的VMWare列表
完整程式碼如下 : VMService.rar
工作排程
在 “開始/Windows 系統管理工具/工作排程” 也可以指定開機時就執行 vmware.exe,但卻沒有關機時要執行的選項,所以關機時 vmware 的 lock 檔沒被刪除,導致在下次重新開機時,無法啟重 vmware,因此工作排程是行不通的。
工作排程跟系統服務是完全不一樣的東西,且工作排程其實有很多的 bug,建議還是不要常用工作排程。
Virtual Box 共用資料夾
ubuntu 下必需先安裝如下
sudo apt-get install gcc make perl
然後再於Virtual Box掛載 Guest Additional 光碟片, 再進行安裝.
Virtual Box設定共用資料夾, 資料夾名稱改為 “shared”
ubuntu重新開機後, 會多一個sf_shared的目錄, 需使用如下指令掛載
mkdir ~/data sudo mount -t vboxsf shared ~/data
啟動vm
如果不想透過VirtualBox開啟虛擬機器, 那可以直接執行vboxmanager, 此程式位於 C:\Program Files\Oracle\VirtualBox.
vboxmanage startvm ubuntu_server_18042
如果不想啟動GUI, 可下達 –type headless
vboxmanage startvm ubuntu_server_18042 --type headless