QEMU-KVM基本操作

  本文主要介绍KVM虚拟机的一些基本实践操作。对KVM虚拟机的管理操作主要是基于libvirt的命令行工具virsh进行的。
 
一、安装与启动
1. KVM模块检查
(1)查看当前Linux系统核心是否包含KVM模块(Linux内核2.6.20及以上版本包含KVM模块):
1
2
3
4
5
uname -r
#或
cat /proc/version
#或
dmesg | grep Linux
(2)检查当前Linux系统是否已加载KVM核心模块:
1
lsmod | grep kvm
2. 安装libvirt,qemu-kvm
1
yum install libvirt libvirt-devel qemu-kvm

3. 启动libvirtd

1
2
systemctl start libvirtd
systemctl enable libvirtd

 

二、连接配置
1. 本地控制配置
libvirt安装后默认配置就可以连接到本地libvirtd。
测试是否可用:
1
virsh list
不可用重启试试:
1
systemctl restart libvirtd
2. 远程控制配置
只需修改服务端配置项,客户端保持默认配置即可。
(1)修改服务端配置文件/etc/libvirt/libvirtd.conf
1
2
3
4
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
(2)修改服务端/etc/sysconfig/libvirtd
1
LIBVIRTD_ARGS="--listen"
(3)重启服务端libvirtd服务
1
systemctl restart libvirtd
(4)客户端保持默认配置,连接服务端的libvirtd服务执行命令
示例:
1
virsh -c qemu+tcp://root@192.168.2.102:16509/system list --all
此命令连接到服务端192.168.2.102的libvirtd服务,执行命令 virsh list --all。
这里使用的是tcp连接,也可使用其它连接方式,如TLS、ssl等,但配置文件需要做相应修改。
 
三、日志配置
libvirtd的日志文件一般为:/var/log/libvirt/libvirtd.log
若没有这个文件,需要修改libvirtd服务的日志级别和日志文件配置,配置文件:/etc/libvirt/libvirtd.conf。
配置示例:
1
2
log_level = 1
log_outputs = "1:file:/var/log/libvirt/libvirtd.log"
然后重启libvirtd:
1
systemctl restart libvirtd
在日志文件 /var/log/libvirt/libvirtd.log 中可查看每次执行virsh命令输出的info、debug等信息。
另外,目录 /var/log/iibvirt/qemu/ 下保存了每个虚拟机具体的日志信息,log文件名称与虚拟机名称相关。
 
四、网络配置
1. 默认网络配置
查看libvirt的默认网络配置:
1
virsh net-list
默认网络配置文件为:/etc/libvirt/qemu/networks/default.xml,其内容示例如下:
其中配置项“bridge”、“mac”和“ip”分别定义了宿主机用于与虚拟机通信的网桥名称、mac地址和ip地址,libvirtd服务启动的时候会自动创建并启动该网桥,“dhcp”则配置了libvirt启动的虚拟机的ip地址范围。
“forward”配置的是网络模式,kvm虚拟机支持两种网络模式:
(1)NAT(网络地址转换):虚拟系统通过网络地址转换,将虚拟机地址映射到宿主机地址上,通过宿主机进行网络访问。这样虚拟机就可访问外网和局域网内的其他主机,但是局域网内的其他主机不能访问虚拟机,相当于单向访问。
(2)Bridge(桥接):双向访问。每个虚拟机都具有一个独立的局域网ip地址,虚拟机与局域网其他主机可相互访问。
2. 自定义网络配置
用户可参考libvirt的默认网络配置文件添加自定义网络配置。
(1)创建网络xml配置文件,然后创建新网络:
1
virsh net-define net-name.xml
此命令会将网络配置文件移至/etc/libvirt/qemu/networks/目录下。
查看/导出网络配置:
1
virsh net-dumpxml net-name
(2)启动网络:
1
virsh net-start net-name
(3)设置开机自启动:
1
virsh net-autostart net-name
此命令会在 /etc/libvirt/qemu/networks/autostart/ 目录下创建 /etc/libvirt/qemu/networks/ 目录下网络配置文件的软链接。
3. 删除网络
(1)关闭网络:
1
virsh net-destroy my-net
(2)删除网络:
1
virsh net-undefine my-net
此命令会将网络配置文件从/etc/libvirt/qemu/networks/目录下删除,若/etc/libvirt/qemu/networks/autostart/目录下存在对应软连接也一并删除。
4. 修改网络配置
修改libvirt网络配置有两种方式。
(1)virsh net-edit
修改网络配置文件:
1
virsh net-edit my-net
重启网络才能生效:
1
2
virsh net-destroy my-net
virsh net-start my-net
(2)virsh net-update
1
virsh net-update my-net add-last ip-dhcp-host "<host mac='' name='' ip='' />" --live --config --parent-index 0
virsh net-edit需要重启网络,对线上系统不友好,而virsh net-update可动态修改运行中的网络,不会影响线上系统,但有些修改无法使用virsh net-update进行。
 
五、KVM虚拟机管理操作
1. 创建虚拟机
(1)从xml配置文件创建虚拟机但是不启动
1
virsh define vm-name.xml
(2)从xml配置文件创建虚拟机并启动,但不会持久化,虚拟机关机后就消失了
1
virsh create vm-name.xml
创建虚拟机后,在 /etc/libvirt/qemu/ 路径下自动生成一份虚拟机的xml配置文件,该配置文件在virsh undefine删除虚拟机的时候会自动删除。
虚拟机的xml配置文件主要配置了虚拟机名称、内存大小、vcpu数量、镜像文件路径、网桥等信息。
查看/导出虚拟机xml文件:
1
virsh dumpxml vm-name
xml文件修改:
1
virsh edit vm-name
修改后重启虚拟机才能生效:
1
virsh reboot vm-name
登录虚拟机:
1
virsh console vm-name

创建示例:

  准备好虚拟机镜像文件,在虚拟机 xml 配置文件中配置好镜像文件的路径:

然后通过 virsh 命令创建虚拟机:

1
virsh define vm-name.xml

2. 启动虚拟机

(1)启动:
1
virsh start vm-name
(2)重启:
1
virsh reboot vm-name
3. 查看虚拟机列表
(1)运行状态的虚拟机列表
1
virsh list
(2)所有的虚拟机列表
1
virsh list --all

4. 关闭虚拟机
(1)正常关闭
1
virsh shutdown vm-name
(2)下电,强制立即关闭
1
virsh destroy vm-name
5. 删除虚拟机
1
virsh undefine vm-name
将非运行状态的虚拟机从virsh列表中删除,无法删除运行状态的虚拟机。
undefine命令会将虚拟机配置文件 /etc/libvirt/qemu/vm-name.xm 删除,但不会删除镜像文件。
6. 虚拟机挂起与恢复
(1)挂起
1
virsh suspend vm-name
只有运行状态(running)的虚拟机才能被挂起。
挂起状态的虚拟机无法被登录,也无法关闭。
(2)恢复
1
virsh resume vm-name
只有挂起状态(paused)的虚拟机才能被恢复。
7. 设置虚拟机在宿主机启动时自动启动
1
virsh autostart vm-name
8. 查看虚拟机
(1)查看虚拟机状态
1
virsh domstate vm-name
(2)查看虚拟机信息
1
virsh dominfo vm-name

9. 虚拟机磁盘管理操作
(1)查看磁盘列表
1
virsh domblklist vm-name

(2)查看磁盘信息

1
virsh domblkinfo vm-name block-name

(3)扩容磁盘

1
virsh blockresize --domain vm-name --path block-name --size 10G
(4)动态设置磁盘qos
1
virsh blkdeviotune vm-name block-name --read-bytes-sec 1024 --write-bytes-sec 1024 --read-iops-sec 1000 --write-iops-sec 1024 --live
(5)持久化挂载rbd
1
virsh attach-device vm-name rbd.xml --persistent
10. 内存、CPU管理操作
(1)动态设置CPU个数
1
virsh setvcpus vm-name --count 4 --config --live
(2)动态设置内存大小
1
virsh setmem vm-name --size 1024 --config --live
(3)设置最大内存大小
1
virsh setmaxmem vm-name --size 102400 --config
11. 网卡管理操作
(1)查看网卡列表
1
virsh domiflist vm-name

(2)添加持久化网卡

1
virsh attach-interface --domain vm-name --type bridge --source br111 --model virtio --mac '00.00.00.00.00.01'- -live --config --persistent
(3)删除持久化网卡

 

posted @   疯一样的狼人  阅读(1576)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2015-05-21 网页授权——扫二维码获取openid
2015-05-21 删除自定义菜单
2015-05-21 创建自定义菜单
2015-05-21 微信公众平台开发接口PHP SDK
点击右上角即可分享
微信分享提示