kvm 使用入门详解
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 使用入门详解的更多相关文章
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- SQL注入攻防入门详解
=============安全性篇目录============== 本文转载 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机 ...
- SQL注入攻防入门详解(2)
SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱 ...
- Quartz 入门详解
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...
- Redis快速入门详解
Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis ...
- [转]SQL注入攻防入门详解
原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============ ...
- [置顶]
xamarin android toolbar(踩坑完全入门详解)
网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...
- 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权
原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...
- webpack入门详解
webpack入门详解(基于webpack 3.5.4 2017-8-22) webpack常用命令: webpack --display-error-details //执行打包 webpa ...
随机推荐
- Vue.js 和 MVVM 小细节
MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...
- ASP.NET是如何在IIS下工作的
ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的不同,导致ASP.NET的工作原理也发生了相应的变化. IIS6(IIS7的经典模式)与IIS7的集成模式的不同 IIS6 ...
- TODO:搭建Laravel VueJS SemanticUI
TODO:搭建Laravel VueJS SemanticUI Laravel是一套简洁.优雅的PHP开发框架(PHP Web Framework).可以让你从面条一样杂乱的代码中解脱出来:它可以帮你 ...
- [C#] C# 知识回顾 - 委托 delegate
C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...
- ASP.NET 5 RC1 升级 ASP.NET Core 1.0 RC2 记录
升级文档: Migrating from DNX to .NET Core Migrating from ASP.NET 5 RC1 to ASP.NET Core 1.0 RC2 Migrating ...
- <译>通过PowerShell工具跨多台服务器执行SQL脚本
有时候,当我们并没有合适的第三方工具(大部分需要付费)去管理多台数据库服务器,那么如何做最省力.省心呢?!Powershell一个强大的工具,可以很方便帮到我们处理日常的数据库维护工作 .简单的几步搞 ...
- 使用github远程仓库
经过几天对github的研究,终于把自己想完成的给解决了,发现google真的有很多解释,但是很多也会出现一些bug,对于初学者真的很多烦恼,所以整理一份,能给初识github的你有所帮助 一,首先, ...
- SharePoint 2013管理中心里【管理服务器上的服务】不见了
打开管理中心,准备配置Managed Metadata Service,发现"管理服务器上的服务"不见了 那我自己拼url直接访问:http://xxxx/_admin/Serve ...
- 在 SharePoint Server 2016 本地环境中设置 OneDrive for Business
建议补丁 建议在sharepoint2016打上KB3127940补丁,补丁下载地址 https://support.microsoft.com/zh-cn/kb/3127940 当然不打,也可以用O ...