天天看点

python脚本实现linux下virtualbox的自动备份与远程创建虚拟机

备份部分:

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连接了。

当然,这些都可以写到脚本里面。