Skip to the content.

基于内核的虚拟机(英语:Kernel-based Virtual Machine,缩写为 KVM),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。

KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390[1],PowerPC[2]与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持[3]。

KVM目前由Red Hat等厂商开发,对CentOS/Fedora/RHEL等Red Hat系发行版支持极佳。

上述摘自维基百科:KVM

1.安装


[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 


# 内核
[root@localhost 3.10.0-693.el7.x86_64]# find . -name kvm*
./kernel/arch/x86/kvm
./kernel/arch/x86/kvm/kvm-amd.ko.xz
./kernel/arch/x86/kvm/kvm-intel.ko.xz
./kernel/arch/x86/kvm/kvm.ko.xz
./kernel/drivers/gpu/drm/i915/gvt/kvmgt.ko.xz
[root@localhost 3.10.0-693.el7.x86_64]# pwd
/lib/modules/3.10.0-693.el7.x86_64

# 包
[root@localhost ~]# yum grouplist 
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Installed Environment Groups:
   Virtualization Host
...

[root@localhost ~]# rpm -qa |grep -E "^virt*"
virt-who-0.19-5.el7.noarch
virt-top-1.0.8-23.el7.x86_64
virt-manager-1.4.1-7.el7.noarch
virtuoso-opensource-6.1.6-6.el7.x86_64
virt-manager-common-1.4.1-7.el7.noarch
virt-viewer-5.0-7.el7.x86_64
virt-what-1.13-10.el7.x86_64
virt-install-1.4.1-7.el7.noarch

# virt-install:命令行工具
# virt-manager:图形工具
# virt-install
[root@localhost ~]# virt-install 
WARNING  KVM acceleration not available, using 'qemu'
ERROR    
--name is required
--memory amount in MiB is required
--disk storage must be specified (override with --disk none)
An install method must be specified
(--location URL, --cdrom CD/ISO, --pxe, --import, --boot hd|cdrom|...)

2.创建一个虚拟机

使用virt-manager的方法和使用virtualBox或者vmware workstation差不多, 不重复了。这里使用virt-install命令行创建虚拟机。

# virt-install创建一个最简单的虚拟机

# 从 http://download.cirros-cloud.net/0.3.3/ 下载一个镜像,作为虚拟机的硬盘
# 太高的版本使用的是qcow3,不能使用,这里使用0.3.3
[root@localhost data]# file cirros-0.3.3-x86_64-disk.img 
cirros-0.3.3-x86_64-disk.img: QEMU QCOW Image (v2), 41126400 bytes

# 开始创建
[root@localhost ~]# virt-install -n c01 \
-r 128 \
--disk path=/data/cirros-0.3.3-x86_64-disk.img,format=qcow2 \
--network=default \
--boot hd \
--noautoconsole
WARNING  KVM acceleration not available, using 'qemu'
WARNING  No operating system detected, VM performance may suffer. Specify an OS with --os-variant for optimal results.

Starting install...
Domain creation completed.

# -n:c01,虚拟机名称
# -r:128,内存128M
# --disk:硬盘情况
# --network:网络情况
# --boot:从硬盘启动,也可以使用hd,network
# --noautoconsole:默认不弹出启动窗口

# 查看安装情况
[root@localhost ~]# virsh 
Welcome to virsh, the virtualization interactive terminal.

Type:  'help' for help with commands
       'quit' to quit

virsh # list --all
 Id    Name                           State
----------------------------------------------------
 2     c01                            running

virsh # console 2
Connected to domain c01
Escape character is ^]
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
...
=== datasource: None None ===
=== cirros: current=0.3.3 uptime=261.20 ===
  ____               ____  ____
 / __/ __ ____ ____ / __ \/ __/
/ /__ / // __// __// /_/ /\ \ 
\___//_//_/  /_/   \____/___/ 
   http://cirros-cloud.net


login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root.
cirros login: 

# 创建一个centos7虚拟机

[root@localhost data]# qemu-img create -f qcow2 centos7-1.qcow2 10G
Formatting 'centos7-1.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off 
[root@localhost data]# virt-install -n centos7-1 \
-r 512 \
--disk path=/data/centos7-1.qcow2,format=qcow2 \
--network=default \
--cdrom=/data/centos7.iso \
--graphics vnc,password=123456,listen=0.0.0.0 \
--noautoconsole

# qemu-img 创建一个虚拟机使用的硬盘;
# --cdrom 为虚拟机增加一个光驱,注意iso格式,还需要调整这个iso的权限
# --graphics 图形界面,默认vnc

3.virsh管理虚拟机(简)

# 列出所有虚拟机
virsh # list --all
 Id    Name                           State
----------------------------------------------------
 2     c01                            running

# 温柔得关闭虚拟机
virsh # shutdown 2
Domain 2 is being shutdown

virsh # list --all
 Id    Name                           State
----------------------------------------------------
 -     c01                            shut off

# 启动虚拟机
virsh # start c01
Domain c01 started

virsh # list --all
 Id    Name                           State
----------------------------------------------------
 4     c01                            running

# 强行关闭虚拟机
virsh # destroy c01
Domain c01 destroyed

virsh # list --all
 Id    Name                           State
----------------------------------------------------
 -     c01                            shut off

# 删除虚拟机,不会删除虚拟机的磁盘文件
virsh # undefine c01
Domain c01 has been undefined

virsh # list --all
 Id    Name                           State
----------------------------------------------------