vmware 下虛擬機器的批量複製並配置網路
由於公司的特殊需求,經常需要在一臺伺服器上安裝大量的虛擬機器,並且虛擬機器必須使用靜態IP地址。總是一臺臺虛擬機器的開機-登入-修改ip會特別麻煩。所以查了些資料,通過shell腳呼叫vmrun命令來減少這種無聊單調的工作。
先介紹下工作環境。伺服器是dell的,上面裝的是OL6.5的作業系統,不熟悉的朋友可以簡單的理解成RHEL6.5或者Centos6.5.虛擬機器軟體使用的是 VMware Workstation 11.
下面進入正題。裡面安裝的虛擬機器是centos 6.5的。在下面,按照約定,我們將OL系統的伺服器稱為主機,centos6.5的虛擬機器稱為客戶機。
大體思路 如下:
虛擬機器的複製不多說了,就是關了虛擬機器直接 cp就好了。如果少的話直接cp,多的話用個for迴圈什麼的就好。
開啟虛擬機器的話,可以在主機中使用如下命令
vmrun start $PATH/$NAME.vmx
這裡貌似只有在圖形介面下才有用,如果不是圖形介面,應該還要加什麼引數什麼的。反正我用ssh連線的時候不能用,用vnc連線就沒什麼問題。
開啟虛擬機器之後,還要在裡面執行命令來配置IP,閘道器,DNS等等。在主機使用下面命令可以執行客戶機中的命令或指令碼。
vmrun -gu root -gp $passwd runProgramInGuest /home/vm/whois/whoisbak.vmx $cmd $argc //將其中的$passwd 換成你客戶機中的密碼,將後面<span style="font-family: Arial, Helvetica, sans-serif;">/home/vm/whois/whoisbak.vmx</span><span style="font-family: Arial, Helvetica, sans-serif;"> </span>換成你的虛擬機器的全路徑,$cmd 換成你要執行的命令,argc換成命令的引數。
下面說下我做的具體的過程。
我是在/home/vm目錄下,有個虛擬機器whois0,現在需要將其複製20份,並分配不同的地址。
我們公司內網網段為192.168.100.0,閘道器為100.254 。 為了更改ip方便,我在虛擬機器中寫了指令碼setip.sh,內容如下。使用時引數為ip地址最後三位。
這裡要保證虛擬機器中,啟動的網絡卡介面名稱為eth0.如果是從別的主機上覆制來的虛擬機器,網絡卡名可能會變成eth1.再複製到其它主機上時,網絡卡名可能就會變成eth2.這時需要修改/etc/udev/rules.d/70-persistent-net.rules 檔案,刪除其中的內容後重啟機器就好了。#!/bin/bash #auth:zhao xl #date:2014/12/19 #usage: setip.sh 123 echo "DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes IPADDR=192.168.100.$1 NETMASK=255.255.255.0 GATWAY=192.168.100.254" >/etc/sysconfig/network-scripts/ifcfg-eth0 service network restart
之後關閉虛擬機器,將虛擬機器複製20份。即將whois0目錄複製20份。如果寫到指令碼中執行,所有命令和檔名都一定要使用絕對路徑,不然不一定出什麼問題。查詢命令的絕對路徑可以使用which 命令。如which vmrun。
for i in `/usr/bin/seq 20`;do /bin/cp -r /home/vm/whois0 /home/vm/whois$i done;
然後將每個虛擬機器都開啟一遍。這時會詢問你你是複製的還是移動的虛擬機器,選擇i copy it。這部一定要做,不然虛擬機器無法啟動,下面的命令也就無法執行。
之後設定虛擬機器的ip,我是將他們設定為160到179.使用指令碼setvmip.sh如下。
#!/bin/bash
PATH=/home/vm
for i in `/usr/bin/seq 20`;
do
/usr/bin/vmrun -gu root -gp passwd runProgramInGuest /home/vm/whois$i/whoisbak.vmx /bin/setip.sh $[160+$i]
done
這個就不需要使用圖形介面了。用ssh連線就可以了。。
這些指令碼都是臨時使用的,所以寫的不太講究。有時間的話會再改改。對引數進行下驗證,把起始ip和數量都作為命令列引數。總之細節方面還有很多需要完善的,各位可以根據自己的需要來修改