使用VboxManage批量创建虚拟机

VirtualBox的安装使用

        当下主流的虚拟软件主要有两种:VirtualBox和VMware,本人开始使用虚拟化时选择的是VMware,在window系统中的使用效果很好,但是当转移到Linux系统时便于到了问题,如果是Linux的桌面环境还好说,如果是Linux的终端环境就感觉力不从心了,于是决定转换到VirtualBox,VirtualBox的终端控制要比VMware做得优秀,下面就是我使用了VirtualBox一段时间的总结,如果存在错误欢迎指正。

  • 安装环境

系统版本:ubuntu 20.04

软件版本:6.1.8

下载地址:https://download.virtualbox.org/virtualbox/6.1.10/virtualbox-6.1_6.1.10-138449~Ubuntu~eoan_amd64.deb

扩展下载:http://download.virtualbox.org/virtualbox/6.1.8/Oracle_VM_VirtualBox_Extension_Pack-6.1.8.vbox-extpack

下载是注意版本对应。

  • 安装步骤

Ubuntu 系统

    可以使用自带的Software工具安装。

Ubuntu中vbox安装扩展程序

管理-全局设定-扩展-添加

CentOS系统

    下载CentOS对应的rpm包,https://download.virtualbox.org/virtualbox/6.1.10/VirtualBox-6.1-6.1.10_138449_el7-1.x86_64.rpm

(以CentOS 7 为例),下载后运行以下命令

yum install -y gcc make perl packages kernel-devel
yum localinstall ./VirtualBox-6.1-6.1.4_136177_el7-1.x86_64.rpm

CentOS 7 中vbox安装扩展程序

vboxmanage extpack install Oracle_VM_VirtualBox_Extension_Pack-6.1.4.vbox-extpack
  • 命令使用

        VirtualBox中有一套终端管理工具vboxmanage,使用该命令不仅仅可以起停虚拟机,还可以完成创建、删除、复制虚拟机,修改虚拟机配置等操作。

        最常用的命令:

vboxmanage startvm vmname --type headless       # 以无界面的方式启动虚拟机
vboxmanage list vms                             # 查看存在那些虚拟机
vboxmanage list runningvms                      # 查看那些虚拟机正在运行
vboxmanage controlvm vmname acpipowerbutton     # 正常关闭虚拟机
vboxmanage controlvm vmname poweroff            # 强制关机,相当于关闭电源
  • 案例说明

        使用脚本创建一台虚拟机

# =====================variable start
vmname=${1:-CentOS-7}
vmpath=${2:-~/VMS/}
nwname=$3
isofile=${4:-/****/ISOWork/CentOS-7-x86_64-Minimal-2003.iso}
# =====================variable end
# ===================== 初始化变量
function initvariable(){
        if [ ! -d ${vmpath}/${vmname} ];then
                mkdir -p ${vmpath}/${vmname}
        fi
        if [ ! -n "${nwname}" ];then
                nwname=`ls /sys/class/net | grep "^enp"`
        fi
}
initvariable
# =====================变量初始化完成
# 创建虚拟机
vboxmanage createvm --name ${vmname} --register --basefolder ${vmpath}/
# 注册虚拟机,将vbox虚拟机文件注册到虚拟机列表
# vboxmanage registervm ${vmpath}/${vmname}/${vmname}.vbox
# 查询虚拟机支持的系统类型
# vboxmanage list ostypes
# 设置系统类型 
vboxmanage modifyvm ${vmname} --ostype RedHat_64
# 删除虚拟机 (全部删除)
# vboxmanage unregistervm --delete ${vmname}
# 设置虚拟机内存
vboxmanage modifyvm ${vmname} --memory 4096
# 设置虚拟机cpu
vboxmanage modifyvm ${vmname} --cpus 2
# 将虚拟机的第一启动设备设为硬盘
vboxmanage modifyvm ${vmname} --boot1 dvd
vboxmanage modifyvm ${vmname} --boot2 disk
vboxmanage modifyvm ${vmname} --boot3 none
vboxmanage modifyvm ${vmname} --boot4 none
# 将虚拟机${vmname}的第一个网卡的网络连接方式设为桥接
vboxmanage modifyvm ${vmname} --nic1 bridged
# 虚拟机${vmname}的第一个网卡的网卡芯片类型设为82540EM
vboxmanage modifyvm ${vmname} --nictype1 82540EM
# 将虚拟机${vmname}的第一个网卡桥接到host的eth0网卡上
vboxmanage modifyvm ${vmname} --nic1 bridged --nictype1 82545EM --cableconnected1 on --bridgeadapter1 $nwname
# 禁用声卡
vboxmanage modifyvm ${vmname} --audio none
# 创建一个大小为100G的虚拟硬盘
vboxmanage createmedium --filename ${vmpath}/${vmname}/${vmname}.vdi --size 204800
# 给虚拟机添加一个IDE控制器
vboxmanage storagectl ${vmname} --name IDE  --add ide  --controller PIIX4     --bootable on
vboxmanage storagectl ${vmname} --name SATA --add sata --controller IntelAhci --bootable on
# 关联第一块虚拟磁盘
vboxmanage storageattach ${vmname} --storagectl SATA --port 0 --device 0 --type hdd --medium ${vmpath}/${vmname}/${vmname}.vdi
# 关联第二块虚拟磁盘
# vboxmanage storageattach ${vmname} --storagectl SATA --port 1 --device 0 --type hdd --medium ${vmname}-2.vdi
# 取消第一块磁盘关联
# vboxmanage storageattach ${vmname} --storagectl SATA --port 0 --device 0 --type hdd --medium none
# 关联镜像文件
vboxmanage storageattach ${vmname} --storagectl IDE --port 0 --device 0 --type dvddrive --medium $isofile
# 取消镜像关联
# vboxmanage storageattach ${vmname} --storagectl IDE --port 1 --device 0 --type dvddrive --medium none
# 打开远程桌面 
# vboxmanage modifyvm ${vmname} --vrdeport 3389
# vboxmanage modifyvm ${vmname} --vrde on

 补充说明:

当添加其他网络时的命令:

# 指定宿主机内部网络下ip
vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.2.1 --netmask 255.255.255.0
# 配置虚拟网络适配器使用内部网络
vboxmanage dhcpserver add    --ifname vboxnet0 --ip 192.168.2.1 --netmask 255.255.255.0 --lowerip 192.168.2.2 --upperip 192.168.2.254  --enable
# 修改内部网络
# vboxmanage dhcpserver modify --ifname vboxnet0 --ip 192.168.2.1 --netmask 255.255.255.0 --lowerip 192.168.2.2 --upperip 192.168.2.254  --enable
# 上面三条命令作用目标是宿主机
# ============================================================================
# 下面两条命令作用目标是虚拟机
# 向虚拟机中添加桥接网卡
vboxmanage modifyvm "vmname" --nic1 bridged --nictype1 82545EM --cableconnected1 on --bridgeadapter1 enp1s0
# 向虚拟机中添加仅主机网卡
vboxmanage modifyvm "vmname" --nic2 hostonly --nictype2 82545EM --cableconnected2 on --hostonlyadapter2 vboxnet0

打开远程桌面的操作:

脚本最后这两条命令是开启虚拟机的远程桌面功能,开放的端口是3389,也可以换为其他端口,只要不与现有端口冲突即可
vboxmanage modifyvm ${vmname} --vrdeport 3389
vboxmanage modifyvm ${vmname} --vrde on
# 脚本执行完成后会在VirtualBox中注册一台名为$vmname的虚拟机
# 桌面版本的可以直接打开VirtualBox软件查看,如果是终端版本的可以使用命令查看
vboxmanage list vms
# 使用命令启动
vboxmanage startvms vmname --type headless 
# 启动后在window上通过远程桌面进行访问,访问地址:宿主机IP:3389,不用填写用户和密码
# 远程桌面的功能主要是对终端机器使用

 将以上文件保存为createvm.sh,调用命令:./createvm.sh  虚拟机名称 虚拟机存储路径  桥接网卡名称  挂在镜像路径

如果在脚本中配置好可以不用定义网卡名称和镜像路径,但这样做一定要保证镜像存在,除此之外还要保证网卡型号是否为因特尔网卡,如果是其他的网卡请修改 ls /sys/class/net | grep "^enp"

通常调用的命令

./createvm.sh centos-7 /home/username/vms/

其实这个脚本仅仅是能够批量创建虚拟机,但是不能批量安装虚拟机,如果是批量安装可以使用PXE实现自动化安装擦作系统,在这里推荐使用cobbler。

以上内容个人总结,如存在疑问欢迎探讨。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值