文章目录

  • 一.GuestOS安装问题解析
  • ⼆.GuestOS升级配置
    • 1.修改配置⽂件
    • 2.创建新的空磁盘卷
    • 3.重新定义:
  • 三.KVM存储
    • 1.存储池管理
    • 2. ⽣产环境存储池使用
    • 3.磁盘格式
  • 四.KVM管理
    • 1.KVM基本管理
    • 2. 虚拟机克隆
    • 3.增量镜像
    • 4.快照

一.GuestOS安装问题解析

  • 问题1:⽤图形安装guest os的时候卡住不动
解决:升级系统
[root@Noviciate ~]# yum upgrade -y
  • 问题2:升级系统后安装guest os的时候还是卡住不动
解决:需要在安装宿主机的时候安装兼容性程序(有的同学就没有安装也可以使⽤,这可能是bug)
  • 如果安装了各种兼容程序之后还是不行

 如果所有问题都排查过后还是安装不上guestos,最后的原因就是在安装宿主机系统的时候各 种兼容性软件没有安装⽽且Yum也没有⾃动处理导致

⼆.GuestOS升级配置

1.修改配置⽂件

(⽐如添加磁盘,那就添加如下配置)

<disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/var/lib/libvirt/images/vm3-1.img'/><target dev='vda' bus='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x16'
function='0x0'/>
</disk> 特别注意:centos8⾥⾯硬盘和⽹卡的添加已经不能修改slot了,要求修改的是bus地址

2.创建新的空磁盘卷

[root@Noviciate ~]# qemu-img create -f qcow2 vm3-1.qcow2 10G

3.重新定义:

[root@Noviciate ~]# virsh define /etc/libvirtd/qemu/vm3.xml

三.KVM存储

概念

 KVM必须要配置⼀个⽬录当作他存储磁盘镜像(存储卷)的⽬录,我们称这个⽬录为存储池

默认存储池

 /var/lib/libvirt/images/

1.存储池管理

1.创建基于⽂件夹的存储池(⽬录)
[root@Noviciate ~]# mkdir -p /data/vmfs2.定义存储池与其⽬录
[root@Noviciate ~]# virsh pool-define-as vmdisk --type dir --target /data/vmfs3.创建已定义的存储池
(1) 创建已定义的存储池
[root@Noviciate ~]# virsh pool-build vmdisk(2) 查看已定义的存储池,存储池不激活⽆法使⽤。
#virsh pool-list --all4.激活并⾃动启动已定义的存储池[root@Noviciate ~]# virsh pool-start vmdisk[root@Noviciate ~]# virsh pool-autostart vmdisk 这⾥vmdisk存储池就已经创建好了,可以直接在这个存储池中创建虚拟磁盘⽂件了。5.在存储池中创建虚拟机存储卷[root@Noviciate ~]# virsh vol-create-as vmdisk oeltest03.qcow2 20G --
format qcow2注1:KVM存储池主要是体现⼀种管理⽅式,可以通过挂载存储⽬录,lvm逻辑卷的⽅式创建存储池,
虚拟机存储卷创建完成后,剩下的操作与⽆存储卷的⽅式⽆任何区别了。注2:KVM存储池也要⽤于虚拟机迁移任务。6.存储池相关管理命令(1)在存储池中删除虚拟机存储卷[root@Noviciate ~]# virsh vol-delete --pool vmdisk oeltest03.qcow2(2)取消激活存储池[root@Noviciate ~]# virsh pool-destroy vmdisk(3)删除存储池定义的⽬录/data/vmfs[root@Noviciate ~]# virsh pool-delete vmdisk(4)取消定义存储池[root@Noviciate ~]# virsh pool-undefine vmdisk

到此KVM存储池配置与管理操作完毕。

2. ⽣产环境存储池使用

添加lvm和远程存储即可

3.磁盘格式

  1. 磁盘镜像⽂件格式
  • raw 原始格式,性能最好
  • qcow 先去⽹上了解⼀下cow(写时拷⻉copy on write) ,性能远不能和raw相⽐,所以很快 夭折了,所以出现了qcow2
  • qcow2 性能上还是不如raw,但是raw不⽀持快照,qcow2⽀持快照。
  • qed 现在默认安装好的⽤的是raw格式,所有做快照要把他转换成qcow2格式

什么叫写时拷贝?

​ raw⽴刻分配空间,不管你有没有⽤到那么多空间

qcow2只是承诺给你分配空间,但是只有当你需要⽤空间的时候,才会给你空间。 最多只给你承诺空间的大小,避免空间浪费
  1. 创建磁盘文件
建⽴qcow2格式磁盘⽂件:
#qemu-img create -f qcow2 test.qcow2 20G建⽴raw格式磁盘⽂件:
#qemu-img create -f raw test.raw 20G查看已经创建的虚拟磁盘⽂件:
#qemu-img info test.qcow2
  1. 挂载磁盘

作为虚拟化环境管理员,你肯定遇到过虚拟机⽆法启动的情况。实施排错时,你需要对虚拟机的内部进 ⾏检查。⽽Libguestfs Linux⼯具集可以在这种情况下为你提供帮助。

利⽤Libguestfs找出损坏的虚拟机⽂件

Libguestfs允许在虚拟机上挂载任何类型的⽂件系统,以便修复启动故障。 使⽤Libguestfs,⾸先需要使⽤Libvirt。Libvirt是⼀个管理接⼝,可以和KVM、Xen和其他⼀些基于 Liunx的虚拟机相互连接。

Libguestfs的功能更加强⼤,可以打开Windows虚拟机上的⽂件。但是⾸先你 需要将虚拟机迁移到libguestfs可⽤的环境当中,也就是Linux环境。

假如你是vmware的ESXI虚拟机,为了将虚拟机迁移到Linux当中,你可以使⽤SSH连接到ESXi主机,这 意味着你⾸先需要启⽤ESXi主机上的SSH访问⽅式。完成之后,在Linux平台上运⾏下⾯的scp命令:

查看磁盘镜像分区信息:
[root@Noviciate ~]# virt-df -h -d vm1Filesystem Size Used Available Use%vm1:/dev/sda1 484M 32M 428M 7%vm1:/dev/sdb1 3.5G 3.5G 0 100%vm1:/dev/VolGroup/lv_root 6.1G 1.1G 4.7G 18%[root@Noviciate ~]# virt-filesystems -d vm1/dev/sda1/dev/sdb1/dev/VolGroup/lv_root挂载磁盘镜像分区:
[root@Noviciate ~]# guestmount -d vm1 -m /dev/vda1 --rw /mnt

注:

mtab⽂件在centos7的启动过程中⾮常有⽤,删掉会导致不能启动

四.KVM管理

1.KVM基本管理

查看 启动 关闭 重启 重置 查看

查看虚拟机:
[root@Noviciate ~]# virsh listId Name State----------------------------------------------------2 vm1 running[root@Noviciate ~]# virsh list --allId Name State----------------------------------------------------2 vm1 running查看KVM虚拟机配置⽂件(X):
[root@Noviciate ~]# virsh dumpxml name将node4虚拟机的配置⽂件保存⾄node6.xml(X):
[root@Noviciate ~]# virsh dumpxml node4 > /etc/libvirt/qemu/node6.xml修改node6的配置⽂件(X):
[root@Noviciate ~]# virsh edit node6 如果直接⽤vim编辑器修改配置⽂件的话,需要重启libvirtd服务
启动:
[root@Noviciate ~]# virsh start vm1
Domain vm1 started暂停虚拟机:
#virsh suspend vm_name 恢复虚拟机:
#virsh resume vm_name 关闭:⽅法1:[root@Noviciate ~]# virsh shutdown vm1Domain vm1 is being shutdown⽅法2(X):[root@Noviciate ~]# virsh destroy vm1Domain vm1 destroyed重启:[root@Noviciate ~]# virsh reboot vm1Domain vm1 is being reboote重置:[root@Noviciate ~]# virsh reset vm1Domain vm1 was reset删除虚拟机[root@Noviciate ~]# virsh undefine vm2Domain vm2 has been undefined注意:虚拟机在开启的情况下undefine是⽆法删除的,但是如果再destroy会直接被删除掉虚拟机开机⾃动启动:
[root@Noviciate ~]# virsh autostart vm1域 vm1标记为⾃动开始
[root@Noviciate ~]# ls /etc/libvirt/qemu/autostart/ //此⽬录默认不存在,在有开机启动的虚拟机时⾃动创建vm1.xml域 vm1取消标记为⾃动开始[root@Noviciate ~]# virsh autostart --disable vm1查看所有开机⾃启的guest os:[root@Noviciate ~]# ls /etc/libvirt/qemu/autostart/[root@Noviciate ~]# virsh list --all --autostart

2. 虚拟机克隆

1.图形界⾯

Applications (左上⻆)-----> System Tools ------>Virtual Machine Manager 关闭要克隆的虚拟机,右键点击虚拟机选择Clone

2.字符终端,命令克隆

[root@Noviciate ~]# virt-clone -o vm1 --auto-cloneWARNING 设置图形设备端⼝为⾃动端⼝,以避免相互冲突。正在分配 'vm1-clone.qcow2' | 6.0 GB 00:00:05成功克隆 'vm1-clone'。-o origin[root@Noviciate ~]# virt-clone -o vm1 -n vm2 --auto-cloneWARNING 设置图形设备端⼝为⾃动端⼝,以避免相互冲突。正在分配 'vm2.qcow2' | 6.0 GB 00:00:06成功克隆 'vm2'。[root@Noviciate ~]# virt-clone -o vm1 -n vm2 -f
/var/lib/libvirt/images/vm2.img正在克隆vm1.img | 8.0 GB 01:03
Clone 'vm2' created successfully

3.增量镜像

1、概述

实验目的

通过⼀个基础镜像(node.img),⾥⾯把各个虚拟机都需要的环境都搭建好,然后基于这个 镜像建⽴起⼀个个增量镜像,每个增量镜像对应⼀个虚拟机,虚拟机对镜像中所有的改变都记 录在增量镜像⾥⾯,基础镜像始终保持不变。

功能

节省磁盘空间,快速复制虚拟机。

环境:

基本镜像⽂件:node.img 虚拟机ID:node

增量镜像⽂件:node4.img 虚拟机ID:node4

要求

以基本镜像⽂件node.img为基础,创建⼀个镜像⽂件node4.img,以此创建⼀个虚拟机 node4,虚拟机node4的改变将存储于node4.img中

2、创建增量镜像文件

[root@Noviciate ~]# qemu-img create -b node.img -f qcow2 node4.img[root@Noviciate ~]# qemu-img info node4.img
image: node4.img
file format: qcow2
virtual size: 20G (21495808000 bytes)
disk size: 33M
cluster_size: 65536
backing file: node.img (actual path: node.img)

注:该实验只是针对qcow2格式的镜像⽂件,未测试raw格式的镜像⽂件是否可⾏。

3、创建虚拟机node4的XML配置文件

[root@Noviciate ~]# cp /etc/libvirt/qemu/node.xml
/etc/libvirt/qemu/node4.xml[root@Noviciate ~]# vim /etc/libvirt/qemu/node4.xml
<domain type='KVM'>
<name>node4</name> #node4的虚拟机名,须修改,否则与基本虚拟机冲突
<uuid>4b7e91eb-6521-c2c6-cc64-c1ba72707fe4</uuid> #node4的UUID,必须修改,否则与基本虚拟机冲突
<memory>524288</memory>
<currentMemory>524288</currentMemory>
<vcpu cpuset='0-1'>2</vcpu>
<os><type arch='x86_64' machine='rhel5.4.0'>hvm</type><boot dev='hd'/>
</os>
<features><acpi/>
<apic/><pae/>
</features>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices><emulator>/usr/libexec/qemu-KVM</emulator><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/virhost/KVM_node/node4.img'/> #将原指向/virhost/KVM_node/node.img改为node4.img<target dev='vda' bus='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x05'
function='0x0'/></disk><interface type='bridge'><mac address='54:52:00:69:d5:f4'/> #修改⽹卡MAC,防⽌冲突<source bridge='br0'/><model type='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x03'
function='0x0'/></interface>
='9216' heads='1'/><address type='pci' domain='0x0000' bus='0x00' slot='0x02'
function='0x0'/></video><memballoon model='virtio'><address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x0'/></memballoon>
</devices>
</domain>

4、根据xml配置定义虚拟机node4

[root@Noviciate ~]#virsh define /etc/libvirt/qemu/node4.xml
[root@Noviciate ~]#virsh start node4

5、测试

[root@Noviciate ~]# du -h node.img
6.3G node.img[root@Noviciate ~]# du -h node4.img
33M node4.img[root@Noviciate ~]# dd if=/dev/zero of=test bs=1M count=200 #在虚拟机node4
上增量200M⼤⼩⽂件
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 1.00361 seconds, 209 MB/s[root@Noviciate ~]# du -h node.img #基本镜像⽂件node.img⼤⼩未变
6.3G node.img[root@Noviciate ~]# du -h node4.img #增量镜像⽂件node4.img增加200M了
234M node4.img

4.快照

为虚拟机vm8创建⼀个快照

[root@Noviciate ~]# virsh snapshot-create-as vm8 vm8.snap
error: unsupported configuration: internal snapshot for disk vda
unsupported for storage type raw

raw

使⽤⽂件来模拟实际的硬盘(当然也可以使⽤⼀块真实的硬盘或⼀个分区)。由于原⽣的裸格式,不⽀持 snapshot也是很正常的。但如果你使⽤LVM的裸设备,那就另当别论。说到LVM还是⼗分的犀利的⽬前 来LVM的snapshot、性能、可扩展性⽅⾯都还是有相当的效果的。⽬前来看的话,备份的话也问题不 ⼤。就是在虚拟机迁移⽅⾯还是有很⼤的限制。但⽬前虚拟化的现状来看,真正需要热迁移的情况⽬前 需求还不是是否的强烈。虽然使⽤LVM做虚拟机镜像的相关公开资料⽐较少,但⽬前来看牺牲⼀点灵活 性,换取性能和便于管理还是不错的选择。

qcow2

现在⽐较主流的⼀种虚拟化镜像格式,经过⼀代的优化,⽬前qcow2的性能上接近raw裸格式的性能, 这个也算是redhat的官⽅渠道了

对于qcow2的格式,⼏点还是⽐较突出的,qcow2的snapshot,可以在镜像上做N多个快照:

•更⼩的存储空间

•Copy-on-write support

•⽀持多个snapshot,对历史snapshot进⾏管理

•⽀持zlib的磁盘压缩

•⽀持AES的加密

查看镜像⽂件格式:

[root@Noviciate ~]# qemu-img info /var/lib/libvirt/images/vm8.img
image: /var/lib/libvirt/images/vm8.img
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 10G

格式转换: 把raw格式转换成qcow2格式

[root@Noviciate ~]# qemu-img convert -f raw -O qcow2
/var/lib/libvirt/images/vm8.img /var/lib/libvirt/images/vm8_qcow2.img[root@Noviciate ~]# ls -l /var/lib/libvirt/images/
total 28381680
-rw-------. 1 qemu qemu 10737418240 Aug 16 01:09 vm8.img
-rw-r--r--. 1 root root 3076521984 Aug 16 01:09 vm8_qcow2.img[root@Noviciate ~]# qemu-img info /var/lib/libvirt/images/vm8_qcow2.img
image: /var/lib/libvirt/images/vm8_qcow2.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 2.9G
cluster_size: 65536

将虚拟机的硬盘指向转换后的qcow2.img

在虚拟机中创建⼀个⽬录,但⽬录中是空的

[root@Noviciate ~]# mkdir /test
[root@Noviciate ~]# ls /test

给虚拟机vm8创建第⼀个快照vm8.snap1

[root@Noviciate ~]# virsh snapshot-create-as vm8 vm8.snap1[root@Noviciate ~]# qemu-img info /var/lib/libvirt/images/vm8_qcow2.img
image: /var/lib/libvirt/images/vm8_qcow2.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 3.1G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 vm8.snap1 229M 2013-08-16 01:25:39 00:03:58.995

在虚拟机中,给 /test 中复制2个⽂件

[root@Noviciate ~]# cp install.log anaconda-ks.cfg /test
[root@Noviciate ~]# ls /test
anaconda-ks.cfg install.log

给虚拟机vm8创建第⼆个快照vm8.snap2

[root@Noviciate ~]# virsh snapshot-create-as vm8 vm8.snap2
Domain snapshot vm8.snap2 created
[root@Noviciate ~]# virsh snapshot-list vm8

关闭虚拟机,恢复到第⼀个快照

[root@Noviciate ~]# virsh shutdown vm8
[root@Noviciate ~]# virsh snapshot-revert vm8 vm8.snap1

在虚拟机中,发现 /test ⽬录为空

[root@Noviciate ~]# ls /test

关闭虚拟机,恢复到第⼆个快照

[root@Noviciate ~]# virsh shutdown vm8
[root@Noviciate ~]# virsh snapshot-revert vm8 vm8.snap2

在虚拟机中,发现 /test 有拷⻉的2个⽂件

[root@Noviciate ~]# ls /test
anaconda-ks.cfg install.log

查看虚拟机快照

[root@Noviciate ~]# virsh snapshot-list vm8

删除虚拟机快照

[root@Noviciate ~]# virsh snapshot-delete --snapshotname vm8.snap2 vm8
[root@Noviciate ~]# virsh snapshot-list vm8

手把手教你玩转KVM虚拟机--KVM管理虚拟机相关推荐

  1. 手把手教你玩转OpenWRT路由器系统,视频教程合集

    手把手教你玩转OpenWRT路由器系统,视频教程合集 以NewifiD2(新三)路由器为基础,录制了OpenWRT系列视频教程,欢迎观看. <[视频教程]手把手教你用虚拟机安装ubuntu操作系 ...

  2. android 自动化 微信,C#手把手教你玩微信自动化

    原标题:C#手把手教你玩微信自动化 转自:初久的私房菜 cnblogs.com/MrChuJiu/p/13959383.html 介绍 本文主要讲的内容是 C# + Appium 自动化玩微信. Ap ...

  3. echarts formatter_手把手教你玩转echarts(二)折线图

    茫茫人海中与你相遇 相信未来的你不会很差 作者:婷酱Yaaa 来源:https://juejin.im/post/5f0292d35188252e5a5dbed0 前言 哈喽,everybody,我又 ...

  4. 手把手教你玩转SOCKET模型之重叠I/O篇(下)

    http://blog.csdn.net/PiggyXP/archive/2004/09/23/114908.aspx 四.     实现重叠模型的步骤 作了这么多的准备工作,费了这么多的笔墨,我们终 ...

  5. 手把手教你玩转SOCKET模型:完成例程(Completion Routine)篇

    本文假设你已经对重叠I/O的机制已有了解,否则请先参考本系列的前一篇<手把手教你玩转SOCKET模型之重叠I/O篇>: 目录: 1.完成例程的优点 2.完成例程的基本原理 3.关于完成例程 ...

  6. 手把手教你玩转SOCKET模型:完成端口(Completion Port)详解

    这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口 ...

  7. 手把手教你玩转网络编程模型之完成例程(Completion Routine)

    前  言 记得写这个系列的上一篇文章的时候已经是四年前了,准确的说是四年半以前了,翻开我尘封已久的IO模型里面的"完成例程"的实现方式及示例代码. 本文凝聚着笔者心血,如要转载,请 ...

  8. 手把手教你玩转ARP包(一)

    原文地址:http://blog.csdn.net/piggyxp/article/details/19606 前   言 首先要感谢网络安全资深专家卢湖川博士以及VC网络版的limin朋友提供的资料 ...

  9. vscode angular智能提示_【线下活动】手把手教你玩转 VS Code 插件开发

    感谢 Google Developer Group 的邀请,3 月 30 号下午,韩老师将手把手带你玩转 VS Code 插件开发. Angular 使用了 TypeScript,VS Code 使用 ...

  10. 手把手教你玩转网络编程模型之完成例程(Completion Routine)篇(下)-转

    续 手把手教你玩转网络编程模型之完成例程(Completion Routine)篇(上) 四.         完成例程的实现步骤 基础知识方面需要知道的就是这么多,下面我们配合代码,来一步步的讲解如 ...

最新文章

  1. 20个精美图表,教你玩转 Pyecharts 可视化
  2. 【MySQL】面试官:如何添加新数据库到MySQL主从复制环境?
  3. Tricks(四十九)—— 按 batch 访问越界的解决办法
  4. win2003禁止web等目录执行exe,bat,com的方法
  5. luogu P2679——子串
  6. 问题解决: 此文件来自其他计算机,可能被阻止以帮助保护该计算机
  7. angularjs中的数据绑定
  8. graphics | 基础绘图系统(三)——添加文本标注、坐标轴线和图例
  9. JavaScript 简介 1
  10. 【影像学基本知识】T1, T2 and PD weighted imaging
  11. parsley.js自定义验证规则之大小写
  12. SAP 货币类型和公司代码的货币设置
  13. 雅思核心词拾遗02----Family+ Law
  14. WIN10 下的erlang + rabbitmq安装,以及遇到的问题
  15. 【毕业设计】基于STM32及OpenMV的云台追踪装置
  16. 【自翻】光线追踪的简介:创作3D图片的简单方法
  17. 为什么大家都喜欢使用宝塔面板?
  18. Field ‘browser‘ doesn‘t contain a valid alias configuration
  19. benchmark datasets是什么
  20. 【分库分表】企业级分库分表实战方案与详解(MySQL专栏启动)

热门文章

  1. 计算机打数据执行保护删除不掉,XP老是出现“数据执行保护”怎么办?教你方法轻松解决此问题...
  2. android 不卡 华为,明明安卓不卡了,但是为什么还比不过苹果?
  3. 高端门诊提示预约体检短信怎么发?
  4. ORA-19511 ANS1017E (RC-50) Session rejected: TCP/IP connection failure
  5. windows系统下,如何将dmg文件转化为cdr文件
  6. win7删除桌面计算机图标怎么删除,Win7桌面图标箭头怎么去掉?去掉桌面图标箭头的方法...
  7. 统计并输出数字、大写字母、小写字母
  8. JS将阿拉伯数字翻译成中文的大写数字、JS将数字转换为大写金额(整理)
  9. android自动亮度流程,Android 亮度自动调节是如何实现的?
  10. 51ditu maps API 使用——显示所有信息——点击链接显示对应标记浮窗[修]