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. django.template.exceptions.TemplateSyntaxError: 'static' is not a registered tag library. Must be one of:

    在访问web页面时报错,详细日志如下: django.template.exceptions.TemplateSyntaxError: 'staticfiles' is not a registere ...

  2. 如何从零开发一个NuGet软件包?

    作者:依乐祝 首发地址:https://www.cnblogs.com/yilezhu/p/14175019.html 我想目前每个.net开发人员都应该知道nuget.org和NuGet软件包吧.但 ...

  3. 1.k8s概述、安装、名词解释、资源清单

    一.k8s概述 1.简介 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernete ...

  4. Windows 系列GVLK密钥

    以下是GVLK密钥版本对照表,可配合KMS服务器进行使用. Windows 系列GVLK密钥 Windows Server 2019 Operating system edition KMS Clie ...

  5. Windows 安装 Go语言开发环境

    Windows 安装 Go语言开发环境   下载安装包 下载地址:http://www.golangtc.com/download   32 位请选择名称中包含 windows-386 的 msi 安 ...

  6. java保持同一时间同一账号只能在一处登录

    //登录页面 login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&qu ...

  7. Failed to process, please exclude the tableName or statementId.--Mybatis-Plus

    多租户多个用户间使用同一套程序,但每个用户之间实现数据隔离 方法一:在 Mapper 的自定义方法上添加注解 @SqlParser(filter = true),在查询的时候不需要添加租户信息 @Sq ...

  8. 超长JVM总结,面试必备

    什么是JVM JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆 和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的交互. ...

  9. spring mvc与mybatis事务整合

    之前公司用的是mybatis,但事务管理这块是用ejb的CMT容器管理的事务.基本原理是ejb请求进来,业务代码会创建一个mybatis的session然后放入当前线程,之后所有的方法操作涉及到数据库 ...

  10. Java学习日报7.26

    package leijia;import java.util.*;public class Sum { public static void main(String[] args) { // TOD ...