>

qemu-kvm是虚拟机,在Ubuntu上安装KVM并搭建虚拟环境

- 编辑:澳门博发娱乐官网 -

qemu-kvm是虚拟机,在Ubuntu上安装KVM并搭建虚拟环境

  1. 宿主机环境(dell备份服务器)

  项目实战系列,总架构图 

在Ubuntu上安装KVM并搭建虚拟环境

图片 1

在Ubuntu上安装KVM并搭建虚拟环境,分为4个章节

1.环境准备
2.安装KVM软件
3.配置桥接网卡
4.创建虚拟机(Ubuntu, winxp)

  1. 环境准备

1)  两台计算机,一台是操作计算机Client, 一台是服务器Server

Client: 笔记本电脑, Win7旗舰版,64位,内网ip: 192.168.1.101

Server(Host): 服务器, Ubuntu 12.04LTS 64位,2核CPU,4G内存,内网ip:192.168.1.10,

2) 在server启动时,进入BIOS中开起CPU虚拟化的支持

进入BIOS中,在config –> CPU选项中
Intel(R) Virtualization Technology (Enabled)
Intel(R) VT-d Feature (Enabled)

不同BIOS菜单稍有不同。

3) Server上,先安装Openssh-server,Client才能连接

~ sudo apt-get install openssh-server

Clinet通过Putty回家连接Server。

注:以下的所有操作都通过SSH进行。

4) Server系统环境

~ uname -a
 Linux conan 3.5.0-23-generic #35~precise1-Ubuntu SMP Fri Jan 25 17:13:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
 ~ cat /etc/issue
 Ubuntu 12.04.2 LTS n l

5) 查看CPU的虚拟化支持

~ egrep 'svm|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 lm constant_tsc arch_perfmon pebs bts nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm ida dtherm tpr_shadow vnmi flexpriority
 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 lm constant_tsc arch_perfmon pebs bts nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm ida dtherm tpr_shadow vnmi flexpriority

我机器是intel的CPU,可以查看vmx的标识

 

6) Server上,配置ubuntu下载源sources.list,我用的是sohu源。

~ sudo vi /etc/apt/sources.list
 deb precise main restricted
 deb-src precise main restricted
 deb precise-updates main restricted
 deb-src precise-updates main restricted
 deb precise universe
 deb-src precise universe
 deb precise-updates universe
 deb-src precise-updates universe
 deb precise multiverse
 deb-src precise multiverse
 deb precise-updates multiverse
 deb-src precise-updates multiverse
 deb precise-backports main restricted universe multiverse
 deb-src precise-backports main restricted universe multiverse
 deb precise-security main restricted
 deb-src precise-security main restricted
 deb precise-security universe
 deb-src precise-security universe
 deb precise-security multiverse
 deb-src precise-security multiverse
 deb precise main
 deb-src precise main

#更新源
~ sudo apt-get update

  1. 安装KVM软件

1) Server上,安装KVM及virt管理软件

~ sudo apt-get install kvm qemu
 ~ sudo apt-get install virtinst python-libvirt virt-viewer virt-manager

在ubuntu上安装,真的很简单。

  1. 配置桥接网卡

1) 在这里我们使用网卡桥接的方式

~ sudo apt-get install bridge-utils

2) 查看网卡的设置

~ ifconfig
 eth0 Link encap:Ethernet HWaddr 00:1c:25:a1:99:fc
 inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0
 inet6 addr: fe80::21c:25ff:fea1:99fc/64 Scope:Link
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:736674 errors:0 dropped:0 overruns:0 frame:0
 TX packets:1098750 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000
 RX bytes:63783787 (63.7 MB) TX bytes:1540374899 (1.5 GB)
 Interrupt:20 Memory:fc200000-fc220000

lo Link encap:Local Loopback
 inet addr:127.0.0.1 Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 UP LOOPBACK RUNNING MTU:16436 Metric:1
 RX packets:1156 errors:0 dropped:0 overruns:0 frame:0
 TX packets:1156 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0
 RX bytes:114090 (114.0 KB) TX bytes:114090 (114.0 KB)

 virbr0 Link encap:Ethernet HWaddr be:65:ec:88:86:3d
 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
 UP BROADCAST MULTICAST MTU:1500 Metric:1
 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

3) 已有的网卡
eth0是直接插入网线的以太网卡,
lo是本地网络,本机内部资源
virbr0是刚才我们装完KVM后,自己生成的虚拟网卡

4) 网卡桥接
 我们增加一个叫br0的虚拟网卡,让这个网卡可以和eth0以太网的网卡做桥接

~ sudo vi /etc/network/interfaces
 auto lo
 iface lo inet loopback
 auto eth0
 iface eth0 inet manual
 auto br0
 iface br0 inet static
 address 192.168.1.10
 netmask 255.255.255.0
 gateway 192.168.1.1
 bridge_ports eth0

保存,重起网卡设置

~ sudo /etc/init.d/networking restart

再查看网卡的设置

~ ifconfig
 br0 Link encap:Ethernet HWaddr 00:1c:25:a1:99:fc
 inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0
 inet6 addr: fe80::21c:25ff:fea1:99fc/64 Scope:Link
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:91 errors:0 dropped:0 overruns:0 frame:0
 TX packets:100 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0
 RX bytes:6260 (6.2 KB) TX bytes:15470 (15.4 KB)

 eth0 Link encap:Ethernet HWaddr 00:1c:25:a1:99:fc
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:605 errors:0 dropped:0 overruns:0 frame:0
 TX packets:425 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000
 RX bytes:112441 (112.4 KB) TX bytes:61529 (61.5 KB)
 Interrupt:20 Memory:fc200000-fc220000

lo Link encap:Local Loopback
 inet addr:127.0.0.1 Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 UP LOOPBACK RUNNING MTU:16436 Metric:1
 RX packets:36 errors:0 dropped:0 overruns:0 frame:0
 TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0
 RX bytes:2100 (2.1 KB) TX bytes:2100 (2.1 KB)

 virbr0 Link encap:Ethernet HWaddr 2a:b8:36:cf:cc:c6
 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
 UP BROADCAST MULTICAST MTU:1500 Metric:1
 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

这个时候eth0,已经没有具体的IP地址。IP地址出在了br0的虚拟网上面。

我们ping一下公网ip,看看是不是通的。

~ ping 8.8.8.8
 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
 64 bytes from 8.8.8.8: icmp_req=1 ttl=46 time=51.7 ms
 64 bytes from 8.8.8.8: icmp_req=2 ttl=46 time=50.8 ms

  1. 创建虚拟机

通过virt虚拟机管理软件,创建虚拟机(Guest)。

上传2个安装镜像到Server: u1204.iso, xp.iso

放在/home/conan/os目录下面。

1)创建Guest1, Ubuntu 64位LTS 12.04版本(命令行,无可视化界面)

把u1204.iso文件mount一个目录

~ sudo mount -o loop /home/conan/os/u1204.iso /home/conan/os/ubuntu
~ ls /home/conan/os/ubuntu
 boot dists EFI isolinux pics preseed ubuntu
 cdromupgrade doc install md5sum.txt pool README.diskdefines

创建虚拟机

~ sudo virt-install --connect=qemu:///system
 --name g1
 --ram 2048
 --vcpus=2
 --os-type=linux
 --os-variant=ubuntuprecise
 --accelerate
 --hvm
 --disk path=/home/conan/os/g1.img,size=6,bus=virtio
 --location /home/conan/os/ubuntu
 --extra-args='console=tty0 console=ttyS0'
 --network bridge=br0,model=virtio
 --graphics none

进入安装界面

lqqqqqqqqqqqqqqqqqqqqqqqu [!!] Select a language tqqqqqqqqqqqqqqqqqqqqqqqqk
 x x
 x Choose the language to be used for the installation process. The x
 x selected language will also be the default language for the installed x
 x system. x
 x x
 x Language: x
 x x
 x C x
 x English x
 x x
 x <Go Back> x
 x x
 mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
 <Tab> moves; <Space> selects; <Enter> activates buttons

安装系统

lqqqqqqqqqqqqqqqqqqqqqu [!] Configure the network tqqqqqqqqqqqqqqqqqqqqqk
 x x
 x Please enter the hostname for this system. x
 x x
 x The hostname is a single word that identifies your system to the x
 x network. If you don't know what your hostname should be, consult your x
 x network administrator. If you are setting up your own home network, x
 x you can make something up here. x
 x x
 x Hostname: x
 x x
 x localhost____________________________________________________________ x
 x x
 x <Go Back> <Continue> x
 x x
 mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
 <Tab> moves; <Space> selects; <Enter> activates buttons

安装完成

2). 创建Guest2, Ubuntu 64位LTS 12.04版本(通过VNC,有可视化���面)

在server端,我要打开vnc_listen的端口支持

~ vi /etc/libvirt/qemu.conf
 #打开注释
vnc_listen="0.0.0.0"

重启virt软件

~ sudo /etc/init.d/libvirt-bin restart
 ~ netstat -nlt|grep 5900
 tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN

我们需要使用到Xming和putty配合,可以让putty远程传输的VNC信号通过Xming显示出来。

在putty里面,我们要修改一下配置。

图片 2

图片 3

启动Xming软件

图片 4

执行命令

~ sudo virt-install --connect=qemu:///system
 --name g2
 --ram 2048
 --vcpus=2
 --os-type=linux
 --os-variant=ubuntuprecise
 --accelerate
 --hvm
 --disk path=/home/conan/os/g2.img,size=6,bus=virtio
 --cdrom /home/conan/os/u1204.iso
 --network bridge=br0,model=virtio
 --graphics vnc

``

通过Xming显示了VNC的界面,ubuntu安装画面

图片 5

安装完成

  1. 创建Guest3, Winxp(通过VNC,有可视化界面)

注1:这里的winxp必须安装版,ghost是不行的。

注2:windows的安装,必须要使用VNC界面方式,没有命令直接安装的方法

执行命令

sudo virt-install --connect=qemu:///system
 --name g3
 --ram 1024
 --vcpus=1
 --os-type=windows
 --os-variant=winxp
 --accelerate
 --hvm
 --disk path=/home/conan/os/g3.img,size=4
 --cdrom /home/conan/os/xp.iso
 --network bridge=br0,model=ne2k_pci
 --graphics vnc

图片 6

通过Xming显示了VNC的界面,WinXP安装画面

图片 7

安装完成

虚拟机互相通信

我们启动Guest1(ubuntu), Guest3(winxp).
Client: ip: 192.168.1.101
Server: ip: 192.168.1.10
Guest1: ip: 192.168.1.11
Guest3: ip: 192.168.1.12

他们都在同一网段,相互可以ping通,也可以相互调用。

如果你实验结果和我一样,那么恭喜你,已经实现了通过KVM搭建自己的VPS过程。

 

错误解决方案

  1. 错误代码:

libvirtError: internal error Process exited while reading console log output: char device redirected to /dev/pts/4
 Could not access KVM kernel module: Permission denied
 failed to initialize KVM: Permission denied
 No accelerator found!

解决办法:

~ sudo rmmod kvm_intel
~ sudo modprobe -r kvm_intel
~ sudo modprobe kvm_intel nested=1

Ubuntu 14.04 LTS 64位 内存:16G 硬盘:2T

KVM的介绍、准备工作和qemu-kvm 命令详解

--------------------------------------分割线

KVM中Linux虚拟机的硬盘添加方法

Linux入门学习教程:虚拟机体验之KVM篇   

RHEL6 KVM虚拟化创建桥接网卡-网桥

RedHat Linux KVM虚拟机桥接

CentOS 5.6下KVM的安装/桥接设置/虚拟机创建及运行

Ubuntu下用libvirt安装KVM虚拟机时找不到/bin/qemu-kvm问题解决

RedHat6.5下安装配置KVM虚拟机

  1. 确认CPU是否支持硬件虚拟化

1、介绍

(1)介绍

  KVM:就是Keyboard Video Mouse的缩写。KVM 交换机通过直接连接键盘、视频和鼠标 (KVM) 端口,让您能够访问和控制计算机。KVM 技术无需目标服务器修改软件。这就意味着可以在 Windows 的 BIOS 环境下,随时访问目标计算机。KVM 提供真正的主板级别访问,并支持多平台服务器和串行设备。

  KVM 技术已经从最初的基础SOHO办公型,发展成为企业 IT 基础机房设施管理系统。可以从kvm 客户端管理软件轻松的直接访问位于多个远程位置的服务器和设备。KVM over IP 解决方案具备完善的多地点故障转移功能、符合新服务器管理标准 (IPMI) 的直接界面,以及将本地存储媒体映射至远程位置的功能。

  KVM 是个"怪胎",原本是类型2 的主机虚拟化;但一旦在OS 上加载了kvm.ko 模块,就会"感染"OS,使其变为hypervisor(kvm),原本的软件空间作为控制台,转化成类型1 模式的主机虚拟化

图片 8

 

(2)KVM的组件

① kvm.ko:模块

  API 应用程序编程接口

qemu-kvm:用户空间的工具程序;

  qemu-KVM是一种开源虚拟器,它为KVM管理程序提供硬件仿真。

   运行中的一个kvm虚拟机就是一个qemu-kvm进程,运行qemu-kvm程序并传递给它合适的选项及参数即能完成虚拟机启动,终止此进程即能关闭虚拟机;

③ libvirt 虚拟化库:Libvirt是一个C工具包,可以与最近版本的Linux(以及其他操作系统)的虚拟化功能进行交互。主包包含了导出虚拟化支持的libvirtd服务器。

  C/S:

    Client:

      libvirt-client

      virt-manager

  Daemon:

    libvirt-daemon

 

(3)KVM模块load进内存之后,系统的运行模式:

  内核模式:GuestOS执行IO类的操作时,或其它的特殊指令操作时的模式;它也被称为"Guest-Kernel"模式;

  用户模式:Host OS的用户空间,用于代为GuestOS发出IO请求;

  来宾模式:GuestOS的用户模式;所有的非IO类请求

 

--------------------------------------分割线

在Ubuntu上安装KVM并搭建虚拟环境,分为4个章节 1.环境准备 2.安装KVM软件 3.配置桥接网卡 4.创建虚拟机(Ubu...

root@shwilling:~# egrep -o '(vmx | svm)' /proc/cpuinfo

2、使用KVM 的准备

(1)前提:

① 必须跑在x86 系统的架构上

② 必须支持硬件级虚拟化

  vmx:Intel VT-x

  svm:AMD AMD-v

③ 在虚拟机上再虚拟化,需开启虚拟化 Intel VT-x/EPT

图片 9

 

(2)判断CPU是否支持硬件虚拟化:

[root@master ~]# grep -i -E '(vmx|svm|lm)' /proc/cpuinfo

注意:vmx 或 svm 必须出现一个,表示是支持的

  vmx:Intel VT-x

  svm:AMD AMD-v

图片 10

 

(3)安装前准备

① 装载KVM 模块

[root@master ~]# yum install libvirt-daemon-kvm qemu-kvm virt-manager -y

[root@master ~]# modprobe kvm 装载kvm 模块

 

② 检测kvm 模块是否装载

[root@master ~]# lsmod |grep kvm

图片 11

[root@master ~]# ll /dev/kvm 字符设备

图片 12

 

③ 安装用户端工具 qemu-kvm

[root@master ~]# yum install libvirt-daemon-kvm qemu-kvm virt-manager -y

 

vmx

3、qemu-kvm命令语法

qemu-kvm [options] [disk_image]

选项有很多类别:标准选项、块设备相关选项、显示选项、网络选项、...

(1)标准选项:
  -machine [type=]name:-machine help来获取列表,用于指定模拟的主机类型; 
  -cpu cpu:-cpu help来获取列表;用于指定要模拟的CPU型号;
  -smp n[,maxcpus=cpus][,cores=cores][,threads=threads]多少线程[,sockets=sockets]多少核:指明虚拟机上vcpu的数量及拓扑;
  -boot [order=drives][,once=drives]只用一次(如按照系统时只用一次光盘引导)[,menu=on|off] [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
  order:各设备的引导次序:c表示第一块硬盘,d表示第一个光驱设备;-boot order=dc,once=d
  -m megs:虚拟机的内存大小;
  -name NAME:当前虚拟机的名称,要惟一;

(2)块设备相关的选项:
  -hda/-hdb file:指明IDE总线类型的磁盘映像文件路径;第0和第1个;
  -hdc/-hdd file:第2和第3个;
  -cdrom file:指定要使用光盘映像文件; 
  -drive [file=file路径][,if=type接口][,media=d接口对应的设备类型][,index=i] [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]:
    ① file=/PATH/TO/SOME_IMAGE_FILE:映像文件路径;
    ② if=TYPE:块设备总线类型,ide, scsi, sd, floppy, virtio,...
    ③ media=TYPE:介质类型,cdrom和disk;
    ④ index=i:设定同一类型设备多个设备的编号;
    ⑤ cache=writethrough|writeback|none|directsync|unsafe:缓存方式;
    ⑥ format=f:磁盘映像文件的格式;
  CentOS磁盘镜像文件下载: https://cloud.centos.org/centos/7

(3)显示选项:
  -display type:显示的类型,sdl, curses, none和vnc;
  -nographic:不使用图形接口; 显卡型号
  -vga [std|cirrus|vmware|qxl|xenfb|none]:模拟出的显卡的型号;
  -vnc display[,option[,option[,...]]]]:启动一个vnc server来显示虚拟机接口; 让qemu进程监听一个vnc接口; 
    display:
      ① HOST:N
        在HOST主机的第N个桌面号输出vnc;
      ② unix:/PATH/TO/SOCK_FILE
      ③ none
    options:
      password:连接此服务所需要的密码;
  -monitor stdio:在标准输出上显示monitor界面;
    Ctrl-a, c:在console和monitor之间切换;
    Ctrl-a, h

(4)网络选项:
  -net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
    为虚拟机创建一个网络接口,并将其添加至指定的VLAN;
    model=type:指明模拟出的网卡的型号,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio;
      net nic,model=?
    macaddr=mac:指明mac地址;52:54:00:

  -net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:
    通过物理的TAP网络接口连接至vlan;
    script=file:启动虚拟机时要执行的脚本,默认为/etc/qemu-ifup
    downscript=dfile:关闭虚拟机时要执行的脚本,/etc/qemu-ifdown
    ifname=NAME:自定义接口名称;
其它选项:
  -daemonize:以守护进程运行;

 

vmx

实战一:图形化工具virt-manager 创建虚拟机

如果有结果显示就OK

1、创建物理桥桥接接口br0

[root@master ~]# systemctl start libvirtd.service

[root@master ~]# virsh iface-bridge eth0 br0

分析:把自己的物理网卡eth0 作为交换机,把br0 当网卡,提供IP

注意:命令可能会卡死或出错,终端被强制退出;等一会,在登录就OK 了

图片 13

 

 

2、图形化工具创建虚拟机

(1)打开窗口

[root@master ~]# virt-manager

注意:这个命令需在支持图形化界面的机器才能执行, 用其他机器 ssh -X 连接,再执行

图片 14

 

(2)创建虚拟机

① 创建新的虚拟机

图片 15

② 选择操作系统类型和版本

图片 16

③ 选择内存和CPU 设置

图片 17

④ 虚拟硬盘有多大

图片 18

⑤ 网络选择

图片 19

⑥ 详细配置,开始安装

图片 20

⑦ 进入虚拟化图形管理窗口,选择安装系统版本

图片 21

 

  1. 安装相关软件包

实战二:命令行工具qemu-kvm创建使用虚拟机

apt-get install qemu-kvm qemu-system libvirt-bin bridge-utils

1、准备桥

(1)命令管控虚拟网桥:brctl

[root@master ~]# yum -y install bridge-utils   下载brctl 命令的包

[root@master ~]# brctl addbr br-int0   添加网桥

[root@master ~]# brctl show   查询所有网桥

[root@master ~]# ifconfig -a   每一个桥,在机器上都表现为一个网卡接口,只是没有激活

图片 22

[root@master ~]# ip link set br-int0 up   激活桥,会分配mac 地址

图片 23

删除网桥

[root@master ~]# ip link set br-int0 down   先down掉网桥

[root@master ~]# brctl delbr br-int0   再删除

[root@master ~]# ifconfig -a   查询不到这个网卡了

[root@master ~]# brctl show   查询不到网桥

 

(2)手动创建物理网桥

① 创建网桥对应的配置文件

[root@master network-scripts]# pwd

/etc/sysconfig/network-scripts

[root@master network-scripts]# cp ifcfg-eth1 ifcfg-br0

[root@master network-scripts]# vim ifcfg-br0

DEVICE=br0
NAME=br0
TYPE=Bridge
ONBOOT=yes
IPADDR=172.16.1.7
NETMASK=255.255.0.0
GATEWAY=172.16.0.1
DNS1=172.16.0.1

注意:是要充当正常网卡使用的,所有IP、NETMASK、GATEWAY、DNS1 都要有

 

② 把主机的网卡连接到桥上

[root@master network-scripts]# vim ifcfg-eth1

DEVICE=eth1
ONBOOT=yes
BRIDGE=br0

注意:主机的网卡连接网桥后,是要充当交换机的,所以不需要IP、NETMASK、GATEWAY、DNS1

 

③ 重启网络服务

[root@master network-scripts]# systemctl restart network

[root@master ~]# ifconfig

图片 24

[root@master ~]# brctl show 也能查到

图片 25

 

qemu-kvm是虚拟机

2、创建虚拟机前准备

使用virt-manager管理KVM

(1)准备 qemu-kvm 命令

[root@master ~]# yum install qemu-kvm libvirt-daemon-kvm virt-manager   安装qemu-kvm 命令行工具

[root@master ~]# modprobe kvm   加载模块

[root@master ~]# lsmod |grep kvm

图片 26

[root@master ~]# rpm -ql qemu-kvm 因为qemu-kvm 命令路径不在PATH 路径下

图片 27

创建软连接,或者写入PATH 变量都行

[root@master ~]# ln -sv /usr/libexec/qemu-kvm /usr/bin/

[root@master ~]# qemu-kvm -h 查询命令帮助

图片 28

 

bridge用于网络桥接虚拟机和宿主机之间通信

3、创建一个虚拟机

(1)创建一个虚拟机,用kubuntu 的镜像文件(用windows、linux 什么镜像文件都行)

[root@master ~]# qemu-kvm -cpu host -smp 2,sockets=1,cores=2,threads=1 -m 512 -drive file=/data/imgs/test.img,if=virtio,media=disk,format=qcow2 -drive file=/root/kubuntu-17.10-desktop-amd64.iso,if=ide,media=cdrom -boot order=dc,once=d -vnc 172.16.1.7:0

分析:命令详解见上边

 

(2)vnc 登录实验虚拟机

[root@master ~]# vncviewer 172.16.1.7:0

图片 29

 

 

实战三:手动构建虚拟机间的虚拟通道、仅主机网桥和NAT 网桥

apt-get install virt-manager python-spice-client-gtk

1、准备虚拟机镜像文件

(1)下载cirros 镜像文件

用cirros 来演示测试,因为它很小,不占资源

去网站下载cirros

CentOS磁盘镜像文件下载: https://cloud.centos.org/centos/7

[root@master ~]# qemu-img info cirros-no_cloud-i386.img

图片 30

 

(2)准备2分创建虚拟机的镜像文件

[root@master ~]# mkdir -pv /data/imgs/

[root@master ~]# cp cirros-no_cloud-i386.img /data/imgs/c1.img

[root@master ~]# cp cirros-no_cloud-i386.img /data/imgs/c2.img

 

virt-manager为虚拟机管理程序(在x window中运行,需要用到python-spice-client-gtk)

2、创建虚拟的准备

(1)准备物理网桥

[root@master imgs]# brctl addbr br-c1-and-c2 创建网桥接口

[root@master imgs]# ifconfig br-c1-and-c2 up 激活网桥

[root@master imgs]# brctl show

图片 31

 

(2)准备激活连接网桥脚本

① [root@master ~]# vim /etc/qemu-ifup-pn1

#!/bin/bash
#
bridge=br-c1-and-c2
if [ -n "$1" ];then
        ip link set $1 up
        sleep 1
        brctl addif $bridge $1
        [ $? -eq 0 ] && exit 0 || exit 1
else
        echo "Error: no interface specified."
        exit 2
fi

② 加执行权限

[root@master ~]# chmod +x /etc/qemu-ifup-pn1

 

 

3、创建、登录两个虚拟机

(1)创建并开启虚拟机

[root@master ~]# qemu-kvm -name c1 -cpu host -smp 2 -m 64 -drive file=/data/imgs/c1.img,if=virtio,media=disk,format=qcow2 -vnc :0 -net nic,model=e1000,macaddr=52:54:00:00:01:01 -net tap,script=/etc/qemu-ifup-pn1 -daemonize

[root@master ~]# qemu-kvm -name c2 -cpu host -smp 2 -m 64 -drive file=/data/imgs/c2.img,if=virtio,media=disk,format=qcow2 -vnc :1 -net nic,model=e1000,macaddr=52:54:00:00:00:01 -net tap,script=/etc/qemu-ifup-pn1 -daemonize

注意:-vnc :0/1 是窗口号;MAC 地址52:54:00 不能改,后边随意

[root@master ~]# ss -nutl 开启了5900 和5901 的端口

图片 32

 

(2)登录连接2个虚拟机

开2个终端,vnc 连接虚拟机

[root@master ~]# vncviewer 192.168.30.107:0

[root@master ~]# vncviewer 192.168.30.107:1

登录用户:cirros

登录密码:cubswin:)

$ sudo su - 切换到管理用户

# poweroff 关机

图片 33

 

  1. 执行下面的命令查看kvm是否安装成功

4、建立虚拟机间的虚拟通道

① 给2个虚拟机加 IP ,在同一网段

# ifconfig eth0 10.1.0.1/16 up

# ifconfig eth0 10.1.0.2/16 up

分析:一旦添加了IP,就是仅主机模式了

 

② 测试虚拟通道是否连通

# ping 10.1.0.2

图片 34

# ping 10.1.0.1

图片 35

 

root@shwilling:~# kvm-ok

5、通过仅主机网桥连通宿主机

(1)在宿主机上的br-c1-and-c2 网桥,添加虚拟机网段的地址

① 每创建一个虚拟主机,都会有另一半在宿主机上

图片 36

② [root@master ~]# ip addr add 10.1.0.10/16 dev br-c1-and-c2

[root@master ~]# ip a show br-c1-and-c2

图片 37

 

(2)测试仅主机网桥

# ping 10.1.0.10 在虚拟机上ping

图片 38

 

输出如下:

6、通过NAT 网桥实现NAT 模式

(1)在宿主机上开启路由转发功能

[root@master ~]# sysctl -w net.ipv4.ip_forward=1

图片 39

 

(2)在2个虚拟机上添加路由

# route add default gw 10.1.0.10

# ping 172.16.1.7 发现ping 宿主机的另一块网卡能ping 通了,因为内核机制

图片 40

# ping 172.16.0.1 但是外网还是ping不同,原因:宿主机上只有出包,没有进包

[root@master ~]# tcpdump -i eth1 -nn icmp 只有出包,没有进包

图片 41

 

(3)做SNAT 策略

[root@master ~]# iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 172.16.1.7

[root@master ~]# iptables -vnL -t nat 查询

图片 42

 

(4)测试NAT 网桥

① 在宿主机上ping 外网

# ping 172.16.0.1

图片 43

② 宿主机也有回包了

图片 44

 

INFO: /dev/kvm exists

7、关闭虚拟机

① 在虚拟机上poweroff

# poweroff 关机

② 在宿主机上杀死进程

图片 45

 

KVM acceleration can be used

实战四:命令行工具virt 创建虚拟机及命令管理虚拟机

如果输出是这样:

1、创建前准备

(1)准备cirros 镜像文件

[root@master imgs]# yum install libvirt-daemon-kvm virt-install -y

[root@master ~]# mkdir -pv /data/imgs/

[root@master ~]# cp cirros-no_cloud-i386.img /data/imgs/c1.img

 

(2)创建物理网桥br0

[root@master imgs]# brctl addbr br0 创建网桥接口

[root@master imgs]# ifconfig br0 up 激活网桥

[root@master imgs]# brctl show

 

(3)把br0 网桥连接到eth0 网卡上

[root@master ~]# systemctl start libvirtd.service

[root@master ~]# virsh iface-bridge eth0 br0

图片 46

 

INFO: Your CPU does not support KVM extensions

2、创建虚拟机

[root@master imgs]# virt-install -n c1 --vcpus 2 --memory 64 -w bridge=br0 --import --disk /data/imgs/c1.img --dry-run

[root@master imgs]# virt-install -n c1 --vcpus 2 --memory 64 -w bridge=br0 --import --disk /data/imgs/c1.img

分析:--dry-run 先干跑,测试一下

图片 47

 

KVM acceleration can NOT be used

3、virsh命令详解,下有实例

(1)virsh命令:
虚拟机的生成需要依赖于预定义的xml格式的配置文件;其生成工具有两个:virt-manager, virt-install; 
virsh [OPTION]... COMMAND [ARG]..
子命令的分类:
    Domain Management (help keyword 'domain')   域管理(帮助关键字“域”)
    Domain Monitoring (help keyword 'monitor')   域监视(帮助关键字“监视器”)
    Host and Hypervisor (help keyword 'host')   主机和管理程序(帮助关键字“主机”)
    Interface (help keyword 'interface')   接口(帮助关键字“接口”)
    Networking (help keyword 'network')   网络(帮助关键字“网络”)
    Network Filter (help keyword 'filter')   网络过滤器(帮助关键字“过滤器”)
    Snapshot (help keyword 'snapshot')   快照(帮助关键字“快照”)
    Storage Pool (help keyword 'pool')   存储池(help关键字“池”)
    Storage Volume (help keyword 'volume')   存储卷(帮助关键字“卷”)

(2)域管理 Domain Management (help keyword 'domain')
创建虚拟机:
  create:从xml格式的配置文件创建并启动虚拟机;
  define:从xml格式的配置文件创建虚拟机;
停止:
  destroy:强行关机、拔电源;
  shutdown:关机;
start:启动
reboot:重启;
undefine:删除虚拟机;
suspend/resume:暂停于内存中,或继续运行暂停状态的虚拟机;真正实现的效果:pause/unpause
save/restore:挂起/继续;保存虚拟机的当前状态至文件中,或从指定文件恢复虚拟机;
console:连接至指定domain的控制台;

(3)域的设备资源管理:
① cpu
  cpu-stats     查看cpu 信息
  vcpuinfo      查看vcpu 信息
  vcpucount     看有几个cpu
  setvcpus   可以调整cpu数(如果是调整的是动态的,在创建虚拟机时设置,静态的不行)
  vcpupin    把vcpu 绑定到真正的cpu 上
② memcache                        
  setmaxmem   修改最大内存(创建虚拟机时设置的是否可以修改)
  setmem   修改内存大小(没超过上限时)
③ 设备                       
  attach-disk/detach-disk:磁盘设备的热插拔;
  domblklist:查询虚拟机的磁盘设备
  attach-interface/detach-interface:网络接口设备的热插拔;
  domiflist:查询虚拟机的网卡设备

表明CPU不支持硬件虚拟化,还可以跑虚拟机不过非常慢。如果你的cpu支持硬件虚拟化,但是bios没有打开,也会给你提示

4、virsh命令演示

(1)简单查询

[root@master imgs]# virsh list 列出所有正在开启running 的虚拟机

[root@master imgs]# virsh list --all 列出所有的虚拟机,包括关机的、没运行的

[root@master imgs]# virsh 交互式执行命令

[root@master imgs]# virsh nodeinfo 查询信息

[root@master imgs]# virsh uri 查询uri 路径

图片 48

(2)连接虚拟机

[root@master imgs]# virsh console c1 连接至c1 虚拟机的控制台

# ping 172.16.0.1 因为物理桥已经连接到了网卡,所以有地址,且能ping 通外网

图片 49

(3)删除虚拟机

[root@master ~]# virsh destroy c1 先关掉虚拟机

[root@master ~]# virsh undefine c1 在删除虚拟机

[root@master ~]# ls /etc/libvirt/qemu/ .xml 文件被删除

[root@master ~]# virsh list --all 查询不到c1 虚拟机,删除成功

 

(4)暂停和挂起虚拟机

[root@master ~]# virsh suspend c1 暂停虚拟机

[root@master ~]# virsh resume c1 恢复暂停

[root@master ~]# virsh save /app/c1.bin 挂起虚拟机

[root@master ~]# virsh restore /app/c1.bin 恢复挂起

图片 50

 

(5)域设备资源管理查询

[root@master ~]# virsh cpu-stats c1 查看cpu 信息

[root@master ~]# virsh vcpuinfo c1 查看vcpu 信息

[root@master ~]# virsh vcpucount c1 看有几个cpu

图片 51

 

 

5、利用已有的虚拟机配置文件,创建一个新的虚拟机

原理:利用已下好的虚拟机,用命令把创建虚拟机的过程生成一个.xml的文件,利用这个文件创建新的虚拟机

(1)生成.xml的文件

[root@master ~]# virsh dumpxml c1 > /app/c2.xml

[root@master ~]# vim /app/c2.xml   需要修改的,都在下面列出了

<domain type='kvm' id='5'>
  <name>c2</name>   #名字
  <uuid>7303d4d3-b8d2-4e22-aac8-feb881882a73</uuid>  #UUID随便改,只要不相同
<source file='/data/imgs/c2.img'/>   #镜像文件
<mac address='52:54:00:52:10:34'/>   #mac随便改,只要不相同
      <source bridge='br0'/>   #桥接的网桥
      <target dev='vnet1'/>   #默认的后端设备

(2)创建新的虚拟机

[root@master ~]# virsh create /app/c2.xml --console

注:--console 直接连接虚拟机,或不加;再用下边的命令连接虚拟机

[root@master ~]# virsh console c2

 

(3)检查

[root@master ~]# virsh list 已有2个虚拟机了

图片 52

 

(4)把.xml 文件放入/etc/libvirt/qemu

[root@master ~]# ls /etc/libvirt/qemu

[root@master ~]# cp /app/c2.xml /etc/libvirt/qemu/

用virsh 自动启动等各种高级设置了

图片 53

  

  1. 网卡桥接

6、c1 虚拟机磁盘设备的热插拔

(1)创建10G 大小稀疏格式的磁盘映像文件

[root@master ~]# qemu-img create -f qcow2 -o preallocation=metadata,size=10G /data/imgs/c1.2.img

[root@master ~]# qemu-img info /data/imgs/c1.2.img 查询

图片 54

 

(2)把磁盘设备加到c1 上

[root@master ~]# virsh domblklist c1 查看c1 已有的磁盘设备

[root@master ~]# virsh attach-disk c1 /data/imgs/c1.2.img vda

图片 55

 

(3)连接至虚拟机,可以对这个磁盘做分区、文件系统格式化、挂载等操作

[root@master ~]# virsh console c1

# fdisk /dev/vda

# fdisk -l /dev/vda1

图片 56

 

(3)把磁盘设备拔掉

图片 57

 

已有的网卡:

7、网卡的热插拔

(1)在宿主机上添加一个新的物理桥

[root@master ~]# brctl addbr br-int0

[root@master ~]# ifconfig br-int0 up

图片 58

(2)激活网桥,给ip

[root@master ~]# ip addr add 10.1.0.254/16 dev br-int0

[root@master ~]# ifconfig br-int0

图片 59

 

(3)给c1 虚拟机插上这个网卡设备 ---> "热插"

[root@master ~]# virsh attach-interface c1 bridge br-int0

图片 60

 

(4)连接至虚拟机,激活网卡

[root@master ~]# virsh console c1

# ifconfig eth1 10.1.0.1/16 up

# ping 10.1.0.254 ping宿主机,测试是否生效

图片 61

[root@master ~]# virsh domiflist c1 查询虚拟机的网卡设备

图片 62

 

(5)拆除网卡 ---> "热拔"

# ifconfig eth1 down

[root@master ~]# virsh detach-interface c1 bridge --mac 52:54:00:5b:d8:04

图片 63

 

Eth0是直接插入网线的以太网卡

实战五:推荐几个图形化管理虚拟机的工具

(1)图形管理工具:

  kimchi:基于H5研发的web GUI;virt-king; 网上搜索kimchi kvm 有安装使用教程

  OpenStack:IaaS 非常重量级,非常吃资源;至少10台以上的虚拟机才用它

  oVirt:比kimchi 功能强大的多,比OpenStack轻量;但配置也较麻烦

  proxmox VE

(2)kvm 官方的管理工具栈:

 

Lo是本地网络,本机内部资源

Virbr0是刚才我们装完KVM自己生成的虚拟网卡

我们新增一个br0的虚拟网卡,让这个网卡可以和eth0以太网卡做桥接

Vim /etc/network/interfaces

Auto lo

Iface lo inet loopback

Auto eth0

本文由胜博发-操作发布,转载请注明来源:qemu-kvm是虚拟机,在Ubuntu上安装KVM并搭建虚拟环境