1. 安装环境

# yum install qemu-kvm libvirt virt-install virt-manager virt-viewer -y
# systemctl start libvirtd
# virt-host-validate

授予 qemu 用户访问某个目录的权限:

# setfacl -R -m u:qemu:rwx YOUR_DIRECTORY

2. VM相关操作

从 ISO 文件启动 VM

# 创建一个虚拟磁盘
# qemu-img create -f raw -o size=10G ./ubuntu16.img # 在虚拟磁盘上安装操作系统
# virt-install --name ubuntu16-server --ram 1024 --disk path=./ubuntu16.img --vcpus 2 \
--os-variant ubuntu16.04 --network bridge=virbr0 \
--cdrom ./ubuntu-16.04.7-server-amd64.iso

查看 os-variant:  osinfo-query os

从磁盘映像启动 VM

# virt-install --name ubuntu16 --ram 1024 --disk path=./ubuntu16.img --vcpus 2 \
--os-variant ubuntu16.04 --network bridge=virbr0 --import

从 xml 文件启动 VM:

virsh define vm1.xml
virsh start vm1

等同于如下命令:

virsh create vm1.xml

查看 VM

# 查看有哪些 VM 及其状态
# virsh list --all # 查看某个 VM 的详细信息(数字表示 vm id)
# virsh dominfo 6 # 查看 vm1 的xml定义文件
# virsh dumpxml vm1

启停 VM:

# 关机
# virsh shutdown 6 # 强制关机
# virsh destroy 6 # 删除:再也查看不到,但不删除磁盘映像
# virsh undefine ubuntu16-server # 启动
# virsh start ubuntu16 # 重启
# virsh reboot ubuntu16 # 自动启动:随 hypervisor 的启动而启动
# virsh autostart ubuntu16 # 取消自动启动:随 hypervisor 的启动而启动
# virsh autostart --disable ubuntu16

启动 virt-manager

# virt-manager

通过控制台连接 VM

# 在 ubuntu16 vm 中执行
sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service # 在宿主机上执行
virsh console 8

ps1:需要按一次回车键才会显示登陆。

ps2:centos vm设置方法参考 https://www.cnblogs.com/heiguu/p/10121084.html

按 ctrl+] 退出控制台连接。

3. 虚拟磁盘相关操作

创建虚拟磁盘

# qemu-img create -f raw -o size=2G ./disk1.img

磁盘格式转换

# qemu-img convert -f raw -O qcow2 ./disk1.img ./disk1.qcow2

查看磁盘信息

# qemu-img info ./disk1.qcow2

挂载磁盘

# 1 是 vm id;vdb是磁盘在 vm 中的名称
# virsh attach-disk 1 /home/ming/kvm/disk1.img vdb --live --config

查看 vm 挂载了哪些块设备

# virsh domblklist 1

卸载磁盘

# virsh detach-disk 1 vdb

创建快照

# qemu-img snapshot -c s1 disk1.qcow2 

ps:不支持 raw 格式。

查看快照

# qemu-img snapshot -l disk1.qcow2

从快照中恢复

# qemu-img snapshot -a s1 disk1.qcow2

删除快照

# qemu-img snapshot -d s1 disk1.qcow2

4. 存储池相关操作

定义存储池:基于目录

# virsh pool-define-as --name pool1 --type dir --target /home/ming/kvm/pool1/

定义、构建存储池:基于 LVM

# virsh pool-define-as --name pool2 --type logical --source-dev /dev/sdb1 --source-name pool2_vg --target /dev/vgs
# virsh pool-build pool2

# 可以看到 pool2_vg
# vgdisplay

定义并启动存储池:需要 pool-build 的不适合此用法

# virsh pool-create-as --name pool1 --type dir --target /home/ming/kvm/pool1/

启停存储池:

# 启动
# virsh pool-start pool1 # 停止
# virsh pool-destroy pool1 # 删除源设备
# virsh pool-delete pool1 # 取消定义
# virsh pool-undefine pool1 # 自动启动
# virsh pool-autostart pool1 # 取消自动启动
# virsh pool-autostart --disable pool1

查看存储池:

# 罗列存储池
# virsh pool-list --all # 查看某个存储池的详细信息
# virsh pool-info pool1 # 查看 xml 定义文件
# virsh pool-dumpxml pool1

创建存储卷:

# virsh vol-create-as pool1 vol1 1G

挂载卷:

virsh attach-disk vm1 /home/ming/kvm/pool1/vol1 vdb --live --config

查看卷信息:

# 罗列存储卷
# virsh vol-list --pool pool1 # 查看详细信息
# virsh vol-info --pool pool1 vol1 # 查看 xml 定义文件
# virsh vol-dumpxml --pool pool1 vol1 # 查看卷的路径
# virsh vol-path --pool pool1 vol1 # 根据卷路径查看所在的存储池
# virsh vol-pool /home/ming/kvm/pool1/vol1 # 根据卷路径查看卷名
# virsh vol-name /home/ming/kvm/pool1/vol1

擦除卷:

virsh vol-wipe --pool pool1 vol1

修改卷大小:

# 指定增量
# virsh vol-resize --pool pool1 vol1 --delta +1G
# virsh vol-resize --pool pool1 vol1 --delta -1G --shrink # 直接指定大小
# virsh vol-resize --pool pool1 vol1 2G

5. 网络相关操作(使用 ovs)

创建网络配置文件

# cat net1.xml
<network>
<name>net1</name>
<forward mode="bridge"/>
<bridge name="br0"/>
<virtualport type="openvswitch"/>
</network>

定义网络

# virsh net-define net1.xml

启动网络

# virsh net-start net1

创建网络:(定义并启动)

virsh net-create net1.xml

终止网络

# virsh net-destroy net1

删除网络

# virsh net-undefine net1

查看网络

# virsh net-list --all
# virsh net-info net1

# 查看 xml 定义文件
virsh net-dumpxml net1

网络自启动

# virsh net-autostart net1

# 取消自启动
# virsh net-autostart --disable net1

创建 ovs 网桥,设置 vm 使用指定的网络

# ovs-vsctl add-br br0

# virt-install --name vm1 --ram 512 --disk path=./ubuntu16-1.img --vcpus 1 \
--os-variant ubuntu16.04 --network bridge=virbr0 --import
# virt-install --name vm2 --ram 512 --disk path=./ubuntu16-2.img --vcpus 1 \
--os-variant ubuntu16.04 --network network=net1 --import # ovs-vsctl show
98c62161-cb7e-44e9-a94d-8bc0b01e60af
Bridge "br0"
Port "vnet0"
Interface "vnet0"
Port "vnet1"
Interface "vnet1"
Port "br0"
Interface "br0"
type: internal

配置 vm 的 IP地址

# vm1
root@ubuntu:~# ip addr add 10.0.0.3/24 dev ens3 # vm2
root@ubuntu:~# ip addr add 10.0.0.4/24 dev ens3 # vm2
root@ubuntu:~# ping 10.0.0.3
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=2.21 ms

参考资料

https://www.cnblogs.com/zrp2013/p/4529820.html

https://blog.csdn.net/s7799653/article/details/106024674

https://blog.csdn.net/wuliangtianzu/article/details/81870551

kvm实战的更多相关文章

  1. <Mastering KVM Virtualization>:第二章 KVM内部原理

    在本章中,我们将讨论libvirt.QEMU和KVM的重要数据结构和内部实现.然后,我们将深入了解KVM下vCPU的执行流程. 在这一章,我们将讨论: libvirt.QEMU和KVM的内部运作方式. ...

  2. 《Linux企业应用案例精解》一书配套视频发布

    <Linux企业应用案例精解>一书配套视频发布(每周更新视频教程),通过读者平台账号,可以在平台下载AVI格式.所有读者都能获得本书中涉及的软件资料,轻松搭建你的学习环境. 当当购书地址: ...

  3. Linux运维工程师应具备哪些技能?

      对于我们这些刚入门的运维小白来说,极强的好奇心总会驱使我们去涉猎各种技术,弄到最后很可能该学的知识半懵半解,知识体系混乱,学习毫无章法.因此,我们学习 时要有一个明确的目标和知识体系(也是我学习的 ...

  4. 2019年最新老男孩高性能Web架构与自动化运维架构视频教程

    课程目录L001-老男孩架构15期-Web架构之单机时代L002-老男孩架构15期-Web架构之集群时代L003-老男孩架构15期-Web架构之dnsL004-老男孩架构15期-Web架构之缓存体系L ...

  5. 【原创】Linux虚拟化KVM-Qemu分析(一)

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...

  6. 云计算之KVM虚拟化实战

    1 基础环境规划 1.1 主机环境规划 系统版本 主机名 IP地址 内存 磁盘 CentOS6.9 kvm-node1 10.0.0.200 2G 20G CentOS6.9 kvm-node2 10 ...

  7. KVM+Qemu+Libvirt实战

    上一篇的文章是为了给这一篇文件提供理论的基础,在这篇文章中我将带大家一起来实现在linux中虚拟出ubuntu的server版来 我们需要用KVM+Qemu+Libvirt来进行kvm全虚拟化,创建虚 ...

  8. Linux实战教学笔记54:开源虚拟化KVM(二)管理虚拟存储

    五,管理虚拟存储 5.1 虚拟磁盘概述 5.1.1 虚拟化项目中存储的注意事项 [x] 存储的性能几乎总是虚拟化的瓶颈 [x] 通过多个硬盘驱动以分布磁盘I/O来实现存储解决方案 [x] 考虑部署集中 ...

  9. Linux实战教学笔记55:开源虚拟化KVM(三)管理虚拟网络

    六,管理虚拟网络 [x] Linux网桥基本概念 [x] qemu-kvm支持的网络 [x] 向虚拟机添加虚拟网络连接 [x] 基于NAT的虚拟网络 [x] 基于网桥的虚拟网络 [x] 用户自定义的隔 ...

随机推荐

  1. 5行Python代码就能实现刷爆全网的动态条形图!

    说起动态图表,最火的莫过于动态条形图了. 在B站上搜索「数据可视化」这个关键词,可以看到很多与动态条形图相关的视频. 好多视频都达到了上百万的播放量,属实厉害. 目前网上实现动态条形图现成的工具也很多 ...

  2. 物联网、5G世界与大数据管理

    物联网带动中国产业转型.推动社会经济发展的时代已经到来.什么是物联网?物联网又给数据管理带来了哪些挑战?面对挑战,我们有怎样的解决方案?本文中我们将一一为您揭晓.     01 物联网时代的到来   ...

  3. ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库

    1.MySQL存储过程   1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if  while)等等 的sql语句   1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...

  4. [leetcode]29. Divide Two Integers不用除法实现除法

    思路是不断将被除数分为两部分,每次分的一部分都是尽量大的除数的倍数,然后最后的商就是倍数加上剩下的部分再分,知道不够大. 递归实现 剩下的难点就是,正负号(判断商正负后将两个数都取绝对值),数太大(将 ...

  5. java有关静态代理及动态代理的实现

    引言: 代理是基本的设计模式之一,它为你提供额外的或不同的操作而插入的用来代替实际对象的对象(委托对象).这些对象通常涉及到与实际对象的通信,因此代理通常充当中间人的角色.--JAVA编程思想 相关的 ...

  6. haproxy 支持 websocket

    haproxy支持websocket feat 通过嗅探http请求中的Connection: Upgrade Upgrade: websocket头部,来自动识别是否是websocket连接,识别成 ...

  7. spark-streaming获取kafka数据的两种方式

    简单理解为:Receiver方式是通过zookeeper来连接kafka队列,Direct方式是直接连接到kafka的节点上获取数据 一.Receiver方式: 使用kafka的高层次Consumer ...

  8. 强大生产力工具Alfred

    今天要给大家介绍的工具是Alfred,一款Mac下的高效生产力产品.它能做什么呢?简单的说就是:让你能够通过打几个字,就可以完成原本需要一顿操作的事情.举一个简单的栗子:如果我们要在Google搜索一 ...

  9. 手把手教你用C语言编写一个哈希表

    原文链接:https://www.swack.cn/wiki/001558681974020669b912b0c994e7090649ac4846e80b2000/001572849111298ae3 ...

  10. Petalinux和Vivado的安装

    Petalinux和Vivado的安装 背景 我是搞软件的, FPGA这块不太了解.由于机缘巧合,最近有接触到这块的开发.所以先挖一坑. 先声明我不是专业搞这块的,所以对这块的内容理解可能会有偏差,以 ...