裸用KVM创建虚拟机,体验virtualbox为你做的10件事情

叁叁肆2018-11-06 14:05

此文已由作者刘超授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。


看这一篇之前,请保证看过以下文章:

我是虚拟机内核我困惑?!

Qemu,KVM,Virsh傻傻的分不清


相信大家都使用过VirtualBox创建过虚拟机,通过界面点点就能创建一个能够上网的虚拟机,如果使用KVM,就没有这么简单了,一切都得自己来做,不过这个过程可以了解KVM虚拟机的创建原理。


首先要给虚拟机起一个名字,在KVM里面就是-name ubuntutest



设置一个内存大小,在KVM里面就是-m 1024



创建一个虚拟硬盘,对于VirtualBox是VDI格式,对于KVM则不同。



硬盘有两种格式,一个是动态分配,也即开始创建的时候,看起来很大,其实占用的空间很少,真实有多少数据,才真的占用多少空间。一个是固定大小,一开始就占用指定的大小。

硬盘的大小为8G


在KVM中,创建一个虚拟机镜像,大小为8G,其中qcow2格式为动态分配,raw格式为固定大小。

qemu-img create -f qcow2 ubuntutest.img 8G


将ubuntu的ISO挂载为光盘,在KVM里面-cdrom ubuntu-14.04-server-amd64.iso

创建一个网络,有时候会选择桥接网络,有时候会选择NAT网络,这个在KVM里面只有自己配置了。


接下来Virtualbox就会有一个界面,可以看到安装的整个过程,在KVM里面,我们用VNC来做。参数为-vnc :19


于是我们也可以创建KVM虚拟机了,用下面的命令:

qemu-system-x86_64 -enable-kvm-name ubuntutest  -m 2048 -hda ubuntutest.img -cdromubuntu-14.04-server-amd64.iso -boot d -vnc :19


启动了虚拟机后,连接VNC,也能看到安装的过程。


按照普通安装ubuntu的流程安装好ubuntu,然后shutdown -h now关闭虚拟机。


接下来可以对KVM创建桥接网络了,这个就要复杂些,Virtualbox还是做了很多事情的。


(1) 在Host机器上创建bridge br0

brctl addbr br0


(2) 将br0设为up

ip link set br0 up


(3) 创建tap device

tunctl -b


(4) 将tap0设为up

ip link set tap0 up


(5) 将tap0加入到br0上

brctl addif br0 tap0


(6)启动虚拟机, 虚拟机连接tap0,tap0连接br0

qemu-system-x86_64 -enable-kvm-name ubuntutest  -m 2048 -hda ubuntutest.qcow2 -vnc :19 -net nic,model=virtio -nettap,ifname=tap0,script=no,downscript=no


(7)虚拟机启动后,网卡没有配置,所以无法连接外网,先给br0设置一个ip

ifconfig br0 192.168.57.1/24


(8) VNC连上虚拟机,给网卡设置地址,重启虚拟机,可ping通br0




(9)要想访问外网,在Host上设置NAT,并且enable ip forwarding,可以ping通外网网关

# sysctl -p

net.ipv4.ip_forward = 1


sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


(10) 如果DNS没配错,可以进行apt-get update


下图是Vmware的桥接网络模式,这个连接过程和刚才手动做的一样



免费体验云安全(易盾)内容安全、验证码等服务

更多网易技术、产品、运营经验分享请点击