備份部分:
virtualbox提供了一個vboxmanage可以在指令行對virtualbox操作,官網位址點選打開連結
例如: 要備份目前運作的虛拟機(假如虛拟機名字為:Ubuntu),先power off,然後export
可調用指令 : VBoxManage controlvm Ubuntu poweroff (相當于電腦斷電)
或者VBoxManage controlvm Ubuntu acpipowerbutton
然後 VBoxmanage export Ubuntu -o ubuntu20180714.ova
然後等待結束就可以了。
用python腳本實作的時候要用os.popen 和os.system來調用VBox的指令,不要用subprocess(我也不知道為什反正就會報錯,如果有人知道可用告訴我一下,十分感激!),先檢視正在運作的虛拟機:
os.popen('VBoxmanage list runningvms').read()
然後調用上列出的指令就可完成備份,結束之再調用VBoxmanage startvm ubuntu虛拟機可用繼續運作。
如果虛拟機裡面有重要的東西白天要用,那麼可用晚上在關機進行備份:
先輸入 crontab -e
然後編輯 輸入 :
1 2 * * 6 /root/autoback.py 就可以在每周六淩晨2點1分自動備份
遠端建立部分:
将之前建立好的虛拟機儲存成ova檔案的形式,然後vboxmanage import ubuntu20180714.ova
把ova檔案同腳本(auto_import.py)放到同一目錄下,友善進行導入。遠端通過pxssh ssh連接配接本地,先cd 到腳本所在的目錄,然後python auto_import.py,兩條指令要同時發送,中間用分号隔開
例如:
from pexpect import pxssh
host = "192.168.1.1"
username = "root"
password = "admin"
try:
s = pxssh.pxssh()
s.login(host,username,password)
s.sendline("cd /root/auto_import;python auto_import.py")
s.prompt()
print(s.before.decode('utf8'))
s.logout()
except Exception as e:
print('login in fail ! info : {}'.format(e))
如果連接配接的時候出現EOF 或者no such platform 或者can not run shell commande 的情況,可能是ssh 本地或者遠端的ssh端口沒有打開,ubuntu不會預設打開22端口要手動安裝ssh service.
如果要擷取新生成的虛拟機IP,可以為之前import 的OVA檔案安裝guest addition ,讓 VBoxmanage guestproperty enumerate *** | grep "Ner.*V4.*IP"|cut -d"," f2 | tr -d "value:",如果導入的虛拟機裡面有什麼自啟動的服務例如需要登入使用的就可以透過IP連接配接了。
當然,這些都可以寫到腳本裡面。