kvm实战
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实战的更多相关文章
- <Mastering KVM Virtualization>:第二章 KVM内部原理
在本章中,我们将讨论libvirt.QEMU和KVM的重要数据结构和内部实现.然后,我们将深入了解KVM下vCPU的执行流程. 在这一章,我们将讨论: libvirt.QEMU和KVM的内部运作方式. ...
- 《Linux企业应用案例精解》一书配套视频发布
<Linux企业应用案例精解>一书配套视频发布(每周更新视频教程),通过读者平台账号,可以在平台下载AVI格式.所有读者都能获得本书中涉及的软件资料,轻松搭建你的学习环境. 当当购书地址: ...
- Linux运维工程师应具备哪些技能?
对于我们这些刚入门的运维小白来说,极强的好奇心总会驱使我们去涉猎各种技术,弄到最后很可能该学的知识半懵半解,知识体系混乱,学习毫无章法.因此,我们学习 时要有一个明确的目标和知识体系(也是我学习的 ...
- 2019年最新老男孩高性能Web架构与自动化运维架构视频教程
课程目录L001-老男孩架构15期-Web架构之单机时代L002-老男孩架构15期-Web架构之集群时代L003-老男孩架构15期-Web架构之dnsL004-老男孩架构15期-Web架构之缓存体系L ...
- 【原创】Linux虚拟化KVM-Qemu分析(一)
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...
- 云计算之KVM虚拟化实战
1 基础环境规划 1.1 主机环境规划 系统版本 主机名 IP地址 内存 磁盘 CentOS6.9 kvm-node1 10.0.0.200 2G 20G CentOS6.9 kvm-node2 10 ...
- KVM+Qemu+Libvirt实战
上一篇的文章是为了给这一篇文件提供理论的基础,在这篇文章中我将带大家一起来实现在linux中虚拟出ubuntu的server版来 我们需要用KVM+Qemu+Libvirt来进行kvm全虚拟化,创建虚 ...
- Linux实战教学笔记54:开源虚拟化KVM(二)管理虚拟存储
五,管理虚拟存储 5.1 虚拟磁盘概述 5.1.1 虚拟化项目中存储的注意事项 [x] 存储的性能几乎总是虚拟化的瓶颈 [x] 通过多个硬盘驱动以分布磁盘I/O来实现存储解决方案 [x] 考虑部署集中 ...
- Linux实战教学笔记55:开源虚拟化KVM(三)管理虚拟网络
六,管理虚拟网络 [x] Linux网桥基本概念 [x] qemu-kvm支持的网络 [x] 向虚拟机添加虚拟网络连接 [x] 基于NAT的虚拟网络 [x] 基于网桥的虚拟网络 [x] 用户自定义的隔 ...
随机推荐
- 为什么Python多线程无法利用多核
1.全局解释锁 如题: Python的多线程为什么不能利用多核处理器? 全局解释器锁(Global Interpreter Lock)是计算机程序设计语言解释器用于同步线程的一种机制,它使得任何时刻仅 ...
- C# 中国日历 农历 阳历 星座 二十四节气 二十八星宿 节日 天干地支
using System; namespace DotNet.Utilities { /// <summary> /// 农历属性 /// </summary> public ...
- Asp.net webapi 判断请求参数是否为空简易方法 Model Validation 判断请求参数是否为空
通常情况下,对于那些经常为别人提供数据接口的开发人员来说,对于调用方传递过来的参数都会有验证处理.例如: if (string.IsNullOrEmpty(entity.Name)) { //当姓名为 ...
- sqlserver varchar和Nvarchar区别
sql server中的varchar和Nvarchar有什么区别? 答:varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 ...
- IIS安装 URL Rewrite Module 2.1
短地址http://www.iis.net/extensions/URLRewrite 下载页面https://www.iis.net/downloads/microsoft/url-rewrite# ...
- 【Objective-C】1.oc点语法
在Java中,我们可以通过"对象名.成员变量名"来访问对象的公共成员变量,这个就称为"点语法".比如: 1.在Student类的第2行定义了一个公共的成员变量a ...
- linux yum install
作为一名新手,学习Linux已经一个月了,其间遇到了不少问题,而今天笔者遇到的问题是 #yum install pam-devel #This system is not registered to ...
- GraduateDesign-给APP添加获取位置信息和天气预报的功能(json)
首先,我的app需要通过网络来获取当前所在的位置.这里我找到了一个json来获取本地位置信息. http://int.dpool.sina.com.cn/iplookup/iplookup.php?f ...
- Java学习日报9.22
/* * 信1905-2班 * 杨传伟 * 2020.9.22 * 20194074 * 账号密码默认 666666 */package atm; import java.util.*;public ...
- 第三章 IP地址规划设计技术(很重要)
知识重点: 选择题考点 IP基础(网络地址.子网掩码) 网络地址转换 NAT 的原理 CIDR (计算方法) IPv6 地址表示 综合题 IP地址的分类与计算 VLSM 地址规划 3.1 基础知识 3 ...