对虚拟化的支持一般在BIOS中是禁掉的,必须开启才能够。es6
对于Intel CPU,咱们能够经过下面的命令查看是否支持虚拟化。ubuntu
# grep "vmx" /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase smep ermscentos
对于AMD CPU,则执行下面的命令api
grep "svm" /proc/cpuinfo网络
KSM: Kernel Same Page Mergingapp
Kernel SamePage Merging (KSM) (also: Kernel Shared Memory, Memory Merging) lets the hypervisor system share identical memory pages amongst different processes or virtualized guests.ssh
This is done by scanning through the memory finding duplicate pages. The duplicate pair is then merged into a single page, and mapped into both original locations. The page is also marked as "copy-on-write", so the kernel will automatically separate them again should one process modify its data.ide
KSM was originally intended to run more virtual machines on one host by sharing memory between processes as well as virtual machines.oop
查看是否支持flex
# cat /boot/config-3.13.0-27-generic | grep KSM
CONFIG_KSM=y
查看是否enable
# cat /sys/kernel/mm/ksm/run
0
这是disable,设为1则为enable
在ubuntu下面安装
apt-get install kvm qemu-kvm
KVM kernel modules
# lsmod | grep kvm
kvm_intel 143060 27
kvm 451511 1 kvm_intel
能够经过以下的命令加载内核模块
modprobe kvm
modprobe kvm_intel
dmesg命令用于打印Linux系统开机启动信息,kernel会将开机信息存储在ring buffer中。您如果开机时来不及查看信息,可利用dmesg来查看(print or control the kernel ring buffer)。开机信息亦保存在/var/log/dmesg的文件里。某些硬件设备(好比七号信令卡、语音卡之类)在安装的时候,一般会安装驱动程序(内核模块),会打印一些信息,就能够经过dmesg命令来查看。
查看启动的时候是否Load了kvm
dmesg | grep kvm
要建立一个虚拟机须要下面的过程:
qemu-img create -f qcow2 /tmp/centos5.8.img 10G
virt-install --virt-type qemu --name centos-5.8 --ram 2048 --noreboot --disk path=/tmp/centos5.8.img,format=qcow2,bus=virtio,device=disk --cdrom=/tmp/CentOS-5.8-x86_64-bin-DVD-1of2.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
qemu-img convert -O qcow2 -c centos-5.8.img centos-5.8.1.qcow2
使用qemu
qemu-img create -f qcow2 ubuntutest.img 5G
# qemu-system-x86_64 -enable-kvm -m 2048 -hda ubuntutest.img -cdrom ubuntu-14.04-server-amd64.iso -boot d
Could not initialize SDL(No available video device) - exiting
SDL(Simple DirectMedia Layer)是一个用C语言编写的、跨平台的、免费和开源的多媒体程序库,它提供了一个简单的接口用于操做硬件平台的图形显示、声音、输入设备等。
在QEMU模拟器中的图形显示默认就是使用SDL的。
SDL的功能很好用,也比较强大,不过它也有一个局限性,就是在建立客户机并以SDL方式显示时,它会直接弹出一个窗口,因此SDL方式只能在图形界面中使用。若是在非图形界面中(如ssh链接到宿主机中),使用SDL时会出现以下的错误信息。
因为咱们是在ssh模式下,因此要关闭SDL,使用vnc
# qemu-system-x86_64 -enable-kvm -name ubuntutest -m 2048 -hda ubuntutest.img -cdrom ubuntu-14.04-server-amd64.iso -boot d -vnc :19
安装完了后,就能够从硬盘启动了
固然上面的启动是没法联网的。因此咱们还须要配置网络。
qemu的网络配置有如下几种:
咱们一般能够经过下面的方法定义一张虚拟网卡
-net nic,vlan=1,macaddr=00:16:35:AF:94:4B,model=virtio,name=ncard1
vlan=1是虚拟网络的id,若是不指定则默认为0,这个虚拟网络和IEEE 802.1Q彻底两回事。是指qemu本身定义的网络而已。
能够指定mac地址
model能够查看
# qemu-system-x86_64 -enable-kvm -net nic,model=?
qemu: Supported NIC models: ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio
配置User Networking (SLIRP)
This is the default networking backend and generally is the easiest to use. It does not require root / Administrator privileges. It has the following limitations:
qemu-system-x86_64 -enable-kvm -name ubuntutest -m 2048 -hda ubuntu-14.04.img -boot c -vnc :19 -net user -net nic,model=virtio
The VM Guest allocates an IP address from a virtual DHCP server. VM Host Server (the DHCP server) is reachable at 10.0.2.2, while the IP address range for allocation starts from 10.0.2.15. You can use ssh to connect to VM Host Server at 10.0.2.2, and scp to copy files back and forth.
配置Bridge Networking
With the -net tap option, QEMU creates a network bridge by connecting the host TAP network device to a specified VLAN of VM Guest. Its network interface is then visible to the rest of the network.
bridge=br0
tap=$(sudo tunctl -u $(whoami) -b)
sudo ip link set $tap up
sudo brctl addif $bridge $tap
qemu-kvm -m 512 -hda /images/sles11sp1_base.raw
-net nic,vlan=0,model=virtio,macaddr=00:16:35:AF:94:4B
-net tap,vlan=0,ifname=$tap,script=no,downscript=no
sudo brctl delif $bridge $tap
sudo ip link set $tap down
sudo tunctl -d $tap
(1) 在Host机器上建立bridge br0
brctl addbr br0
(2) 将br0设为up
ip link set br0 up
(3) 建立tap device
# tunctl -b
tap0
(4) 将tap0设为up
ip link set tap0 up
(5) 将tap0加入到br0上
brctl addif br0 tap0
(6) 启动虚拟机
qemu-system-x86_64 -enable-kvm -name ubuntutest -m 2048 -hda ubuntu-14.04.img -boot c -vnc :19 -net nic,model=virtio -net tap,ifname=tap0,script=no,downscript=no
虚拟机链接tap0,tap0链接br0
(7) 虚拟机启动后,网卡没有配置,因此没法链接外网,先给br0设置一个ip
ifconfig br0 192.168.57.1/24
(8) 在虚拟机里面,给网卡设置地址
ifconfig eth0 192.168.57.2/24
这个时候在虚拟机里面能够ping的通192.168.57.1了,可是仍是没法访问外网
(9) 在Host上设置NAT,而且enable ip forwarding
# sysctl -p
net.ipv4.ip_forward = 1
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(10) 在虚拟机里面设置默认网关
route add –net default gw 192.168.57.1
这个时候,能够ping的通外网网关了
ping 16.158.164.1
(11) 而后在虚拟机里面设置dns,则能够进行apt-get
# cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTENnameserver 16.110.135.52nameserver 16.110.135.51