kvm 是虚拟化技术的一个典型实现,功能非常强大,使用很方便。kvm 本身主要实现对 CPU 的虚拟化,内存和IO的虚拟化使用了开源软件 qemu,qemu 是纯软件层面的虚拟化,其实就是个模拟器。kvm 要求 cpu 必须支持硬件虚拟化,可以通过 Linux 命令查看。

说到 kvm 必须提及 libvirt 程序集,它是用来管理 kvm 虚拟机的,当然其实也可以管理 xen 等其它虚拟化的虚拟机。libvirt 包括三部分:(1). libvirtd是后台服务程序;(2). libvirt 是管理虚拟机的 API 接口,可以通过 python c java 等语言来编写程序管理虚拟机,比较典型的 virt-manager 就是使用 python 写的可视化工具;(3). virsh 等命令行管理工具。

一、准备工作

1. 实验环境

操作系统:CentOS 6.4 x86_64 mini
宿主机:vmware workstation 虚拟机

2. 检查宿主机处理器是否支持虚拟化

[root@kvm ~]# egrep -o 'vmx | svm' /proc/cpuinfo | wc -l

如果显示数值是 0,则表示该 CPU 不支持虚拟化。

3. 配置或设置宿主机

CPU:2-4 core  开启 cpu 虚拟化(bios 设置 或 vmware 设置)
内存:4-8 GB
硬盘:100 GB

4. 关闭 iptables 和 selinux

关闭 iptables 服务:

[root@kvm ~]# service iptables stop
[root@kvm ~]# chkconfig iptables off

关闭 selinux:

[root@kvm ~]# setenforce
[root@kvm ~]# vi /etc/selinux/config
SELINUX=disabled

二、安装和配置 kvm 环境

1. 安装 kvm 虚拟化相关软件包

[root@kvm ~]# yum install -y kvm virt-* libvirt bridge-utils qemu-img

2. 查看 kvm 模块是否加载到内核

[root@kvm ~]# lsmod | grep kvm_intel
kvm_intel
kvm kvm_intel

如果没有加载,可以尝试执行命令:modprobe kvm_intel ,不行的话,试试重启宿主机。

3. 设置相关网络

设置方式一:网桥模式。

[root@kvm ~]# cd /etc/sysconfig/network-scripts/
[root@kvm ~]# cp ifcfg-eth0 ifcfg-br0
[root@kvm ~]# vi ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
BRIDGE=br0 [root@kvm ~]# vi ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.1.8
PREFIX=
GATEWAY=172.16.1.1
DNS1=114.114.114.114
NAME=br0 # 重启网络
[root@kvm ~]# service network restart

设置方式二:NAT 模式。

暂 略。

4. 启动 libvirtd 相关服务

[root@kvm ~]# /etc/init.d/libvirtd start
[root@kvm ~]# /etc/init.d/messagebus restart

遇到错误:

[root@vip ~]# /etc/init.d/libvirtd start
libvirtd: relocation error: libvirtd: ... version ... libdevmapper.so.1.02 [失败]

解决:

[root@kvm ~]# yum upgrade device-mapper-libs

结果:

[root@kvm ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 .000c29181c75 no eth0
virbr0 .525400c207c7 yes virbr0-nic

三、安装虚拟机

1. 创建虚拟机镜像

关于虚拟机镜像,有很多种类型:raw、qcow2、vmdk等,我们推荐使用 qcow2 格式的镜像,因为 qcow2 格式的镜像支持快照,使用的比较广泛。在创建虚拟机之前需要手动去创建 qcow2 格式的镜像磁盘文件,以供安装虚拟机时使用。按照如下命令进行创建:

qemu-img create -f qcow2 -o preallocation=metadata /data/kvm/liwei01.qcow2 50G

2. 执行虚拟机的安装

安装方式一:通过网络镜像安装,文本控制台,无vnc支持。

virt-install --name liwei01 --ram  --vcpus  \
-f /data/kvm/liwei01.qcow2 --os-type linux \
--os-variant rhel6 --network bridge=br0 \
--graphics none --console pty,target_type=serial \
--location 'http://mirrors.163.com/centos/6.8/os/i386/' \
--extra-args 'console=ttyS0,115200n8 serial'

安装方式二:通过网络镜像安装,支持 vnc ,默认无文本控制台。

virt-install --name liwei01 --ram  --vcpus  \
-f /data/kvm/liwei01.qcow2 --os-type linux \
--os-variant rhel6 --network bridge=br0 \
--graphics vnc,listen=0.0.0.0,port= \
--location 'http://mirrors.163.com/centos/6.8/os/i386/'

安装方式三:通过 iso 镜像实现本地安装,支持 vnc ,无文本控制台。

virt-install --name liwei01 --ram  --vcpus  \
-f /data/kvm/liwei01.qcow2 --os-type linux \
--os-variant rhel6 --network bridge=br0 \
--cdrom CentOS-6.8-i386-minimal.iso \
--graphics vnc,listen=0.0.0.0,port=

安装方式四:通过基础镜像模板快速安装(拷贝)

创建镜像文件:

[root@kvm ~]# qemu-img create -f qcow2 /data/kvm/liwei.qcow2 50G
# 通过 liwei.qcow2 安装虚拟机 ... 安装完毕.
[root@kvm ~]# cp /data/kvm/liwei.qcow2 /data/kvm/liwei01.qcow2

安装命令:

# 以拷贝的 liwei01.qcow2 为模板进行安装,安装方式是从 liwei01.qcow2 镜像启动
[root@kvm ~]# virt-install --name liwei01 --ram --vcpus= \
--disk /data/kvm/liwei01.qcow2,format=qcow2,bus=virtio \
--network bridge=br0 --graphics vnc,listen=0.0.0.0,port= \
--boot hd

说明:

本方式创建 img 镜像的时候没有指定 preallocation=metadata 选项,这样存储文件空间显示比较小,方便拷贝,不加这个选项时,在 virt-install 时候需要在 --disk 选项后边加上 bus=virtio,如果不加在安装操作系统的时候似乎是识别不出来磁盘空间,会提示磁盘空间不足。采用这种方式安装的速度非常快,其实就是从已经存在的操作系统镜像启动虚拟机并 define 一个新的虚拟机 liwei01,可以通过脚本快速创建出多个相同配置的虚拟机。当然可以在基础镜像中安装公共的软件包和设置相同的配置,这样后续基于这个 img 安装的虚拟机都有类似的配置,省去重复安装软件包的麻烦。

安装方式五:通过基础镜像模板快速安装(共享)

创建镜像:

[root@kvm ~]# qemu-img create -f qcow2 -o preallocation=metadata /data/kvm/liwei.qcow2 50G
# 通过 liwei.qcow2 安装虚拟机 ... 安装完毕.
# 以 liwei.qcow2 镜像为模板创建 liwei01.qcow2 镜像
[root@kvm ~]# qemu-img create -f qcow2 -o backing_file=liwei.qcow2 liwei01.qcow2 10G

安装命令:

[root@kvm ~]# virt-install --name liwei01 --ram  --vcpus= \
--disk /data/kvm/liwei01.qcow2,format=qcow2,bus=virtio \
--network bridge=br0 --graphics vnc,listen=0.0.0.0,port= \
--boot hd

说明:

在创建镜像 liwei01.qcow2 指定了 backing_file=liwei.qcow2 选项,表示以 liwei.qcow2 为后端镜像,以后对虚机 liwei01 的所有的写操作都会记录到 liwei01 镜像,实际操作系统是在 liwei.qcow2 镜像中,liwei.qcow2 镜像是只读的。也就是说后续以 liwei.qcow2 镜像为后端的虚机都共享这个镜像,而具体某个虚机的写操作内容都要记录到对应自己的镜像文件中去。注意和方式4的区别。

3. 通过 vnc 或 文本控制台进行系统安装

方式一:通过文本控制台进行管理安装  virsh console liwei01 后续也能用此方式进行登陆管理虚拟机。
方式二:通过 vnc 客户端进行连接,    virsh vncdisplay liwei01 :20 客户端通过url: 172.16.1.8:20 进行连接。
方式三:同方式二一样,具体安装过程与普通操作系统安装过程一样,过程略。

四、kvm 虚拟机常见的基础操作命令

开机:virsh start vm
关机:virsh shutdown vm 如果不生效,需要在 vm 中执行:yum install -y acpid
强关:virsh destroy vm
删除:virsh undefine vm
定义:virsh define vm
挂起:virsh suspend vm
恢复:virsh resume vm

虚拟机列表:virsh list
包含关机的虚机:virsh list --all
设置自动启动:virsh autostart vm
关闭自动启动:virsh autostart --disable vm
登陆虚机控制台:virsh console vm  # 只对指定了console的虚机才管用,方式一
退出虚机控制台:ctrl + ]

五、虚拟机的克隆

将虚拟机 liwei01 克隆为虚拟机 liwei02

[root@kvm ~]# virt-clone --original liwei01 --name liwei02 --file /data/kvm/liwei02.qcow2

注意:克隆前需要先关闭虚拟机;克隆完毕,一般需要设置虚拟机的网络。

六、创建虚拟机的快照

1. 创建快照的条件

  • 虚拟机是关机状态。
  • 虚拟机镜像格式是 qcow2。

2. 创建快照

[root@kvm ~]# virsh snapshot-create liwei

3. 查看快照列表

[root@kvm ~]# virsh snapshot-list liwei
# 可以通过 qemu-img 查看镜像的快照信息
[root@kvm ~]# qemu-img info /data/kvm/liwei.img

4. 切换快照

[root@kvm ~]# virsh snapshot-revert liwei 

5. 查看当前快照

[root@kvm ~]# virsh snapshot-current liwei

6. 删除快照

[root@kvm ~]# virsh snapshot-delete liwei 

7. 快照文件存储位置

/var/lib/libvirt/qemu/snapshot

七、虚拟机磁盘扩容和添加磁盘

1. 虚拟机扩容磁盘,给现有磁盘增加容量

[root@kvm ~]# qemu-img resize /data/kvm/liwei.qcow2 +5G
# 重启虚拟机 reboot虚机不生效
[root@kvm ~]# virsh destroy liwei
[root@kvm ~]# virsh start liwei

在虚拟机中使用 fdisk -l 查看,通过观察block 块 id 可以发现存储空间多了,还必须将多余部分分区、格式化使用,默认使用 lvm 。

2. 给虚拟机添加磁盘

按照如下步骤:

  • 关闭虚拟机
  • 使用 qemu-img 创建磁盘镜像
  • 使用 virsh edit liwei 编辑虚机配置文件,添加一条磁盘记录,适当修改信息
  • 虚拟机开机 -> fdisk -> 格式化 -> ok.

注:可以尝试不分区直接格式化,也可以尝试使用 lvm 。

八、使用虚拟磁盘恢复虚拟机

思路:首先得有镜像文件(已有) + xml 配置文件

[root@kvm ~]#  virsh dumpxml liwei > /etc/libvirt/qemu/liwei01.xml
# 编辑配置文件,修改为适当的值
# 添加定义
virsh define /etc/libvirt/qemu/liwei01.xml
virsh list --all #即可查到该虚拟机

九、调整CPU、内存规格

如果要调整的 cpu 核数和内存超过安装虚机时指定的最大值,则需要关闭虚机来修改最大值,动态调整的值不能超过设置最大值,擦,一般使用值和最大值都是保持一致,一起修改。所以在线动态修改没什么意义,推荐直接修改配置文件就 OK。

[root@kvm ~]# virsh edit liwei01
<memory unit='KiB'></memory>
<currentMemory unit='KiB'></currentMemory>
<vcpu placement='static'></vcpu>

重启虚机 liwei01 就ok.

十、调整虚拟机网卡

1. 添加虚拟机网卡

# 临时命令生效
[root@kvm ~]# virsh attach-interface liwei --type bridge --source br0 # 修改虚机配置文件
[root@kvm ~]# virsh dumpxml liwei > /etc/libvirt/qemu/liwei.xml
[root@kvm ~]# virsh define /etc/libvirt/qemu/liwei.xml

2. 删除虚拟机网卡

[root@kvm ~]# virsh detach-interface liwei --type bridge --mac :::::cf

3. 指定网卡类型

网卡默认类型是 rtl 品牌的网卡,这里设置为 intel 网卡 e1000 系列。修改如下配置文件即可。

<interface type='bridge'>
<mac address='52:54:00:b5:68:a4'/>
<source bridge='br0'/>
<model type='e1000'/> # 添加设置字段
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

使用 virsh 重启虚拟机,在虚拟机中查看:

[root@localhost ~]# lspci | grep "Ethernet"
:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev )

十一、虚拟机的迁移

几个步骤:

1.关闭虚拟机
2.拷贝镜像文件
3.拷贝配置文件
4.virsh define vm

待更新......

kvm 使用入门详解的更多相关文章

  1. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  2. SQL注入攻防入门详解

    =============安全性篇目录============== 本文转载 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机 ...

  3. SQL注入攻防入门详解(2)

    SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱 ...

  4. Quartz 入门详解

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

  5. Redis快速入门详解

    Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis ...

  6. [转]SQL注入攻防入门详解

    原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============ ...

  7. [置顶] xamarin android toolbar(踩坑完全入门详解)

    网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...

  8. 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

    原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...

  9. webpack入门详解

    webpack入门详解(基于webpack 3.5.4  2017-8-22) webpack常用命令: webpack --display-error-details    //执行打包 webpa ...

随机推荐

  1. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  2. Unity3d入门 - 关于unity工具的熟悉

    上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...

  3. 关于 Chrome 浏览器中 onresize 事件的 Bug

    我在写插件时用到了 onresize 事件,在反复地测试后发现该事件在 Chrome 及 Opera(内核基本与 Chrome 相同,以下统称 Chrome)浏览器打开时就会执行,这种情况也许不能算作 ...

  4. 微软发布正式版SQL Server 2016

    微软于今天在SQL 官方博客上宣布 SQL Server 数据库软件的正式发布版本(GA),历时一年多,微软为该软件发布了多个公共预览版和候选版本,而今天最终版本终于上线了.在博客中,微软数据集团的企 ...

  5. 浅谈WEB页面提速(前端向)

    记得面试现在这份工作的时候,一位领导语重心长地谈道——当今的世界是互联网的世界,IT企业之间的竞争是很激烈的,如果一个网页的加载和显示速度,相比别人的站点页面有那么0.1秒的提升,那也是很大的一个成就 ...

  6. TODO:Laravel增加验证码

    TODO:Laravel增加验证码1. 先聊聊验证码是什么,有什么作用?验证码(CAPTCHA)是"Completely Automated Public Turing test to te ...

  7. 最长回文子串-LeetCode 5 Longest Palindromic Substring

    题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

  8. ASP.NET Core 中文文档目录

    翻译计划 五月中旬 .NET Core RC2 如期发布,我们遂决定翻译 ASP.NET Core 文档.我们在 何镇汐先生. 悲梦先生. 张仁建先生和 雷欧纳德先生的群中发布了翻译计划招募信息,并召 ...

  9. Java程序:从命令行接收多个数字,求和并输出结果

    一.设计思想:由于命令行接收的是字符串类型,因此应先将字符串类型转化为整型或其他字符型,然后利用for循环求和并输出结果 二.程序流程图: 三.源程序代码:   //王荣荣 2016/9/23     ...

  10. Android listview和gridview以及view的区别

    GridView 可以指定显示的条目的列数. listview一般显示的条目的列数都是一列 如果是列表(单列多行形式)的使用ListView,如果是多行多列网状形式的优先使用GridView andr ...