一、远程管理kvm虚机

(2)有些情况下,有一个要配置的地方。 因为 KVM(准确说是 Libvirt)默认不接受远程管理,需要按下面的内容配置被管理宿主机中的两个文件:

vim /etc/default/libvirt-bin
start_libvirtd="yes"
libvirtd_opts="-d -l"

vim /etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
unix_sock_group = "libvirtd"
unix_sock_ro_perms = "0777"
unix_sock_rw_perms = "0770"
auth_unix_ro = "none"
auth_unix_rw = "none"
auth_tcp = "none"

然后重启 Libvirtd 服务就可以远程管理了。
systemctl restart libvirt-bin

二、virsh命令行下管理虚拟机

virsh既有命令行模式,又有交互模式;在命令行直接输入virsh就进入交互模式,virsh后面跟命令参数,则是命令行模式。

  (1)基础命令:

    virsh help:列出命令下的所有参数

    virsh list help : 列出list命令下的所有参数

    virsh list : 列出当前宿主机处于运行状态的虚拟机

    virsh list --all : 列出当前宿主机上所有的虚拟机

    virsh start 虚拟机名 : 开启某一台虚拟机

    virsh shutdown 虚拟机名 : 正常关闭某一台虚拟机

    virsh destroy 虚拟机名 : 强制关闭某一台虚拟机

    virsh autostart 虚拟机名 : 开机自启动虚拟机

    virsh autostart --disable 虚拟机名 : 关闭开机自启动

    virsh edit 虚拟机名 : 编辑某个虚拟机的配置文件

    virsh pool-list : 列出存储池

    virsh define                 从一个 XML 文件定义(但不开始)一个域
    virsh undefine             删除一个虚机域

    

创建一个大小为9G的,格式为qcow2的磁盘镜像
[root@localhost ~]# qemu-img create -f qcow2 -o size=9G /var/lib/libvirt/images/test3.qcow2
Formatting '/var/lib/libvirt/images/test3.qcow2', fmt=qcow2 size= encryption=off cluster_size= lazy_refcounts=off
查看磁盘信息
[root@localhost ~]# qemu-img info /var/lib/libvirt/images/test3.qcow2
image: /var/lib/libvirt/images/test3.qcow2
file format: qcow2 格式
virtual size: .0G ( bytes) 大小
disk size: 196K 使用大小
cluster_size:
Format specific information:
compat: 1.1
lazy refcounts: false 【注意】disk size: 196K 这里不是9G的原因是:这里采用了精简置备(主机像磁盘宣告所需空间大小,随着使用慢慢增长,但是不能超过磁盘提供的最大空间,也就是用多少拿多少)
    与之相对应的就是厚置备(给多少就占多少空间),类似与数据库中的char和varchar;厚置备会浪费资源。
克隆一台虚拟机

[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- 关闭
- test1 关闭 [root@localhost ~]# yum install -y virt*
[root@localhost ~]# virt-clone -o test1 -n test2 -f /var/lib/libvirt/images/test2.qcow2
正在分配 'test2.qcow2' | 9.0 GB :: 成功克隆 'test2'。
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- 关闭
- test1 关闭
- test2 关闭

三、kvm通过 virsh console 进入虚拟机

  开启虚拟机的console功能就可以通过命令在远端进入虚拟机了,这里就不赘述centos7以前的版本了,以下介绍centos7以后版本使用console进入虚拟机。

①查看是否可以连接
[root@localhost ~]# virsh console test1
连接到域 test1
换码符为 ^]
②在虚拟机上进行以下操作并重启
[root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0"
[root@localhost ~]# reboot
③在宿主机上进入虚拟机
[root@localhost ~]# virsh console test1
连接到域 test1
CentOS Linux 7 (Core)
Kernel 3.10.0-514.el7.x86_64 on an x86_64 localhost login: root
密码:
Last login: Tue May 28 19:04:13 on tty1
④退出
ctrl+]

四、kvm虚拟化透传

KVM 虚拟化需要处理器对虚拟化技术的支持,当我们需要进行虚拟机嵌套虚拟机时,我们需要让虚拟机中处理器对 VT 功能的支持达到透传的效果。

nested 虚拟机嵌套( kvm on kvm ):nested 技术,简单的说,就是在虚拟机上跑虚拟机。

KVM 虚拟机嵌套和 VMWare 原理不同, VMWare第一层是用的硬件虚拟化技术,第二层就是完全软件模拟出来的,所以 VMWare 只能做两层嵌套。 KVM 是将物理 CPU 的特性全部传给虚拟机,所有理论上可以嵌套 N 多层。

①查看一层虚拟机是否支持VT
[root@localhost ~]# egrep "(vmx|svm)" /proc/cpuinfo
[root@localhost ~]#
②在宿主机上为嵌套虚拟机做准备---cpu虚拟化透传
[root@localhost ~]# cat /etc/modprobe.d/kvm-nested.conf
options kvm_intel nested=1 #在宿主机上启用kvm_intel的嵌套虚拟化功能,并使透传永久起效
③重新加载kvm模块
[root@localhost ~]# modprobe -r kvm_intel
modprobe: FATAL: Module kvm_intel is in use.
原因是虚拟机没有关机
[root@localhost ~]# modprobe -r kvm_intel
[root@localhost ~]# lsmod | grep kvm
[root@localhost ~]# modprobe kvm_intel
[root@localhost ~]# lsmod | grep kvm
kvm_intel
kvm kvm_intel
irqbypass kvm
④验证是否加载成功
[root@localhost ~]# cat /sys/module/kvm_intel/parameters/nested
Y #Y表示虚拟化透传功能开启
⑤编辑需要做虚拟化透传的虚拟机配置文件
[root@localhost ~]# virsh edit <cpu mode='host-passthrough'/>
⑥在虚拟机中查看cpu是否透传成功
[root@localhost ~]# lsmod | grep kvm
kvm_intel             170181  0
kvm                   554609  1 kvm_intel
irqbypass              13503  1 kvm
⑦在一层虚拟机中查看是否支持虚拟化
[root@localhost ~]# grep vmx /proc/cpuinfo
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap xsaveopt

五、kvm存储虚拟化

  1.介绍    

    KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的。

    Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种型;

    Volume 是在 Storage Pool 中划分出的一块空间,宿主机将 Volume 分配给虚拟机,Volume 在虚拟机中看到的就是一块硬盘。

   2.目录类型的storage pool

    文件目录是最常用的 Storage Pool 类型。KVM 将宿主机目录 /var/lib/libvirt/images/ 作为默认的 Storage Pool

    Volume 是该目录下面的文件,一个文件就是一个 Volume。

   3.创建volume卷,

在虚拟机查看添加的卷

    4.创建存储池pool

kvm默认/var/lib/libvirt/images目录为存储池。

那 KVM 是怎么知道要把 /var/lib/libvirt/images 这个目录当做默认 Storage Pool 的呢?
实际上 KVM 所有可以使用的 Storage Pool 都定义在宿主机的 /etc/libvirt/storage 目录下,每个 Pool 一个 xml 文件,

存储池的配置文件存放的位置
[root@localhost ~]# cd /etc/libvirt/storage
[root@localhost storage]# cat default.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh pool-edit default
or other application using the libvirt API.
--> <pool type='dir'>
<name>default</name>
<uuid>623b2eaa-3f05-4c50-b5b8-bdd52f16a936</uuid>
<capacity unit='bytes'></capacity>
<allocation unit='bytes'></allocation>
<available unit='bytes'></available>
<source>
</source>
<target>
<path>/var/lib/libvirt/images</path>
</target>
</pool>
虚拟机的配置文件存放的位置
[root@localhost qemu]# ls
003.xml  networks  test1.xml  test2.xml
[root@localhost qemu]# pwd
/etc/libvirt/qemu

六、虚拟机的删除与恢复

①先将虚拟机的配置文件复制下来,以防以后有用到的时候
[root@localhost qemu]# cp -a test1.xml /root
②删除虚拟机
[root@localhost qemu]# virsh undefine test1
域 test1 已经被取消定义 [root@localhost qemu]# virsh list --all
Id 名称 状态
----------------------------------------------------
running
- test2 关闭 [root@localhost ~]# ls
test1.xml
③磁盘文件还保存在/var/lib/libvirt/images下
[root@localhost ~]# vim test1.xml <source file='/var/lib/libvirt/images/test1.qcow2'/>
④恢复虚拟机,重新定义虚拟机配置文件即可
[root@localhost ~]# virsh define test1.xml
定义域 test1(从 test1.xml)
⑤查看已恢复
[root@localhost ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 -     003                            关闭
 -     test1                          关闭
 -     test2                          关闭

七、冷迁移与热迁移

冷迁移:机器关机状态进行迁移

①将虚拟机的配置文件和磁盘文件发送到远程主机上
[root@localhost ~]# scp .xml 192.168.42.140:/root
The authenticity of host '192.168.42.140 (192.168.42.140)' can't be established.
ECDSA key fingerprint is a9:9d:::6c::bd:b6::1d:cf:df:5e:5a:8f:bb.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.42.140' (ECDSA) to the list of known hosts.
root@192.168.42.140's password:
.xml % .3KB/s :
[root@localhost ~]# vim .xml
[root@localhost ~]# cd /var/lib/libvirt/images/
[root@localhost images]# ls
.qcow2
[root@localhost images]# scp .qcow2 192.168.42.140:/root
root@192.168.42.140's password:
001.qcow2                                                                              100% 9218MB  27.4MB/s   05:37 ②在远程主机查看配置文件并重新定义虚拟机,查看即可
[root@localhost ~]# ls
001.qcow2 
001.xml   
[root@localhost ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 -     003                            关闭
 -     test1                          关闭
 -     test2                          关闭 [root@localhost ~]# virsh define 001.xml
定义域 001(从 001.xml) [root@localhost ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 -     001                            关闭
 -     003                            关闭
 -     test1                          关闭
 -     test2                          关闭

热迁移:机器在开机状态进行迁移

kvm的使用(2)的更多相关文章

  1. [原] KVM 虚拟化原理探究(1)— overview

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

  2. 基于本地存储的kvm虚拟机在线迁移

    基于本地存储的kvm虚拟机在线迁移 kvm虚拟机迁移分为4种(1)热迁移基于共享存储(2)热迁移基于本地存储(3)冷迁移基于共享存储(4)冷迁移基于本地存储 这里介绍的是基于本地存储的热迁移 动态块迁 ...

  3. [原] KVM 虚拟化原理探究 —— 目录

    KVM 虚拟化原理探究 -- 目录 标签(空格分隔): KVM KVM 虚拟化原理探究(1)- overview KVM 虚拟化原理探究(2)- QEMU启动过程 KVM 虚拟化原理探究(3)- CP ...

  4. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化

    KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...

  5. [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化

    KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...

  6. [原] KVM 虚拟化原理探究(4)— 内存虚拟化

    KVM 虚拟化原理探究(4)- 内存虚拟化 标签(空格分隔): KVM 内存虚拟化简介 前一章介绍了CPU虚拟化的内容,这一章介绍一下KVM的内存虚拟化原理.可以说内存是除了CPU外最重要的组件,Gu ...

  7. [原] KVM 虚拟化原理探究(3)— CPU 虚拟化

    KVM 虚拟化原理探究(3)- CPU 虚拟化 标签(空格分隔): KVM [TOC] CPU 虚拟化简介 上一篇文章笼统的介绍了一个虚拟机的诞生过程,从demo中也可以看到,运行一个虚拟机再也不需要 ...

  8. [原] KVM 虚拟化原理探究(2)— QEMU启动过程

    KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...

  9. [原] KVM虚拟机网络闪断分析

    背景 公司云平台的机器时常会发生网络闪断,通常在10s-100s之间. 异常情况 VM出现问题时,表现出来的情况是外部监控系统无法访问,猜测可能是由于系统假死,OVS链路问题等等.但是在出现网络问题的 ...

  10. [原] KVM 环境下MySQL性能对比

    KVM 环境下MySQL性能对比 标签(空格分隔): Cloud2.0 [TOC] 测试目的 对比MySQL在物理机和KVM环境下性能情况 压测标准 压测遵循单一变量原则,所有的对比都是只改变一个变量 ...

随机推荐

  1. centos6下yum安装mariadb数据库的解决方法

    在centos6下Yum安装mariadb数据库时老是提示无法正常安装,看错误日志才发现,是没有mariadb release源文件在/etc/yum.repos.d/中,为此,我特意在新建文件: # ...

  2. SAP笔记

    1,负数的表示增强 负号从数字后更改到数字前面 适用于字符型字段: CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT' CHANGING VALUE = gt_table-c ...

  3. C/C++小课之数组名是什么

    我们今天讨论数组名是什么东西,理解它有助于我们进一步理解和使用指针. 因为它涉及到了内存地址. 问题 数组名是什么?含义是什么? 思路 前提 一个值+1之后的变化可以反映出它的意义/含义. 前提的证明 ...

  4. 一次完整的HTTP请求所经历的7个步骤【转】

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1. 建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该 ...

  5. vue项目和django项目交互补充,drf介绍,restful规范

    目录 一.vue项目与django项目的交互 二.drf(Django-restframework) 1. drf主要知识点 2. drf框架安装 3. web接口(WEB API) 4. restf ...

  6. Acwing-166-数独(搜索)

    链接: https://www.acwing.com/problem/content/168/ 题意: 数独是一种传统益智游戏,你需要把一个9 × 9的数独补充完整,使得图中每行.每列.每个3 × 3 ...

  7. 【51nod 1847】奇怪的数学题

    题目描述 给出 N,K ,请计算下面这个式子: \(∑_{i=1}^N∑_{j=1}^Nsgcd(i,j)^k\) 其中,sgcd(i, j)表示(i, j)的所有公约数中第二大的,特殊地,如果gcd ...

  8. java mybaits 调用存储过程

    @Override public BaseResultMessage saveOrderConfirm(String billNo) { BaseResultMessage rm = Utils.re ...

  9. JavaScript基础之变量的自增与自减

    一.自增(++) ⑴什么是自增? 通过自增运算符可以使变量在自身的基础上加一: 对于一个变量自增以后,原变量的值会立即自增一: 示例: <!DOCTYPE html> <html l ...

  10. asp.net上传超大文件解决方案

    ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...