kvm磁盘管理

KVM磁盘管理指南

KVM虚拟磁盘类型

image.png


raw

raw为裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输,创建多大的磁盘就占用多大的空间。


qcow2

qcow2(quick copy on wire --写时复制),占用空间小,支持快照,性能比 raw差一些,方便传输,磁盘的实际大小时动态的(当写入数据时宿主机的磁盘占用才会变大)。


qemu-img常用参数

https://mp.weixin.qq.com/s/N8l3p3Bemr3AczqntEr4VA
https://www.cnblogs.com/wshenjin/p/11079469.html
https://www.cnblogs.com/wshenjin/p/11063867.html

# 列出指定虚拟机上的磁盘信息
virsh domblklist vm名

在这里插入图片描述


主要参数:

  • info : 查看镜像的信息;
  • create: 创建镜像;
  • check: 检查镜像;
  • convert: 转化镜像的格式;
  • snapshot :管理镜像的快照;
  • rebase: 在已有的镜像的基础上创建新的镜像;
  • resize: 增加或减小镜像大小

安装qemu-img

# Windows安装
choco install qemu-img -y

# rhel安装
dnf install -y qemu-img

#  Debian安装
apt install -y qemu-utils

查看磁盘信息–info

# 查看磁盘信息
qemu-img info disk_name.raw
qemu-img info disk_name.qcow2

image.png


创建磁盘文件–create

创建的磁盘文件后缀名不用关注,工作中经常会以.img为磁盘文件后缀。

# 创建raw(默认格式)
qemu-img create /data/vm1.raw 1G

image.png

# 创建qcow2
## 不指定参数,默认创建的是raw格式的磁盘文件
## -f 指定磁盘格式
qemu-img create -f qcow2 /data/vm2.qcow2 1G

image.png


磁盘容量调整–resize


热扩容

# 列出指定虚拟机上的磁盘信息
virsh domblklist vm名

# 对虚拟机的磁盘文件进行扩容
## --paht 为vm的磁盘绝对路径
virsh blockresize --path vm实例的磁盘绝对路径 --size 50G vm名

# 登录vm扩容文件系统容量

磁盘增加容量

# 增加10G容量
qemu-img resize /data/vm1.raw +10G

磁盘缩小容量(生产环境下禁止操作)

# raw磁盘缩小容量
qemu-img resize /data/vm2.raw -500M

image.png

# qcow2磁盘缩小容量---不支持缩容
qemu-img resize /data/vm2.qcow2 -500G

!!!qcow2只能加不能减!
image.png


磁盘调整容量到指定大小

# 将磁盘容量调整至1T
qemu-img resize /data/vm2.qcow2 1T

image.png


转换磁盘格式–convert

运行中的VM实例,要先关机后才能转换VM实例的磁盘格式,转换完成后,要执行virsh edit vm实例修改disktypediskpath为正确值才能启动VM实例。

# 1.将vm实例关机
virsh shutdown vm名称

## qemu-img convert如果不-O指定输出格式,默认转换为raw格式
# 将raw磁盘转换为qcow2磁盘
# 转换镜像为qcow2格式
## -f:参数值为源镜像文件的格式。
## -O(大写):参数值分别为输出镜像格式、源镜像文件名称和输出镜像文件名称。
qemu-img convert -f raw -O qcow2 vm1.raw vm2.qcow2

# 修改vm实例的磁盘type和path
virsh edit vm名称

原来的磁盘格式是raw
image.png
修改成qcow2格式磁盘
image.png


转换VMware的vmdk为qcow2

# 转换VMware的vmdk为qcow2
## qemu-img convert如果不-O指定输出格式,默认转换为raw格式
# 将raw磁盘转换为qcow2磁盘
# 转换镜像为qcow2格式
## -f:参数值为源镜像文件的格式。
## -O(大写):参数值分别为输出镜像格式、源镜像文件名称和输出镜像文件名称。
qemu-img convert -f vmdk -O qcow2 source-name.vmdk target-name.qcow2 


# 虚拟机磁盘镜像格式转换(带压缩优化)
# qemu-img convert : QEMU镜像转换命令
# -c : 启用压缩(节省存储空间)
# -f vmdk : 指定输入格式为VMware虚拟磁盘
# -O qcow2 : 指定输出为QEMU Copy-On-Write格式
# source-name.vmdk : 输入的VMDK镜像文件名
# target-name.qcow2 : 输出的qcow2镜像文件名
qemu-img convert -c -f vmdk -O qcow2 source-name.vmdk target-name.qcow2 

在这里插入图片描述
在这里插入图片描述


检查磁盘镜像文件

对磁盘镜像文件进行一致性检查,查找镜像文件中的错误,目前仅支持对qcow2qedvdi格式文件的检查。

# 检查磁盘文件
qemu-img check vm2.qcow2

磁盘快照

默认会把磁盘快照的配置文件存储到/var/lib/libvirt/qemu/snapshot/虚拟机名称/快照名称.xml


创建磁盘快照

# -c:表示创建磁盘快照
qemu-img snapshot -c 快照名 磁盘镜像文件路径

查看磁盘快照

# -l:查看磁盘文件的快照列表
qemu-img snapshot -l /kvm/images/centos7.qcow2

回滚到磁盘快照

# -a:应用磁盘快照,将磁盘恢复到做快照那一刻
qemu-img snapshot -a 快照名 磁盘镜像文件路径

删除磁盘快照

# -d:删除磁盘快照
qemu-img snapshot -l /kvm/images/centos7.qcow2 

在线附加和卸载VM磁盘

在这里插入图片描述


附加磁盘到vm实例–attach-disk

附件磁盘热生效的,通过virsh attach-disk添加硬盘时,只能是虚拟机运行时才能添加,而且是即时生效的。

# 将磁盘挂载到vm实例--立即且永久生效
## --live 热生效,但不保存到配置文件
## --config 写入到配置文件永久生效
virsh attach-disk vm名称 [--source] /data/raw/disk02.qcow2 sdb --subdriver=qcow2 --live --config

# 查看指定虚拟机的磁盘是否增加
virsh domblklist vm名
virsh附加磁盘 / 卸载磁盘vm名称vm磁盘路径vm中块设备名指定vm磁盘格式(可选参数)其他参数(可选参数)
virshattach-diskvm1/data/raw/disk02.qcow2vdb–subdriver=qcow2–live --config

从vm实例中分离磁盘–detach-disk

附加的磁盘一定要在虚拟机运行时卸载,
vm关机卸载磁盘会报错,但也能把该磁盘卸载掉。

# 从vm实例中删除磁盘--立即且永久生效
virsh detach-disk vm名称 –target vdb --live --config

# 查看指定虚拟机的磁盘是否减少
virsh domblklist vm名
virsh附加磁盘 / 卸载磁盘vm名称–targetvm中块设备名其他参数(可选参数)
virshdetach-diskvm1–targetvdb–live --config

存储池管理

https://blog.youkuaiyun.com/omaidb/article/details/130972546

# 查看所有Storage Pool 
virsh pool-list --all
<think>首先,用户的问题是:“我想配置KVM虚拟机的磁盘IO悬挂 请问KVM虚拟机磁盘IO悬挂配置方法”。用户提到了“磁盘IO悬挂”,这似乎是一个拼写错误或误解。标准术语是“磁盘IO悬挂”,但更常见的是“IO悬挂”或“IO错误处理”。在引用[1]中,提到了“virtio-blk磁盘磁盘IO悬挂配置”,它使用了参数如`werror=retry,rerror=retry,retry_interval=2000,retry_timeout=10000`。这表明“磁盘IO悬挂”可能指的是磁盘IO错误的处理策略,比如重试机制。 在KVM虚拟化中,配置磁盘IO错误处理通常涉及QEMU/KVM的命令行参数。引用[1]提供了一个示例配置,使用`-device`选项为virtio-blk设备设置错误处理参数。 我的回答需要: - 使用中文。 - 结构清晰,逐步解决问题。 - 确保真实可靠。 - 遵循LaTeX格式:行内数学表达式用`$...$`,独立公式用`$$...$$`。 - 生成相关问题。 - 在引用的段落末尾添加引用标识,如[^1]。 参考引用: - [^1]: 关于virtio-blk的IO悬挂配置。 - [^2]: 关于MMU和内存管理,但不太相关。 - [^3]: 关于服务器硬件,不直接相关。 用户的问题焦点在KVM虚拟机的磁盘IO配置,所以我主要参考[^1]。 步骤: 1. **理解问题**:用户想配置KVM虚拟机的磁盘IO悬挂。从上下文看,这涉及处理磁盘IO错误,如读写错误时的重试策略。 2. **提供配置方法**:基于引用[1],解释如何配置virtio-blk设备的错误处理参数。 - 关键参数:`werror`(写错误处理)、`rerror`(读错误处理)、`retry_interval`(重试间隔)、`retry_timeout`(重试超时)。 - 示例:`werror=retry,rerror=retry,retry_interval=2000,retry_timeout=10000` 3. **逐步指导**:解释如何将这些参数添加到KVM启动命令中。通常通过`qemu-system-x86_64`命令或libvirt配置。 4. **确保真实可靠**:基于标准KVM/QEMU文档。virtio-blk是常见的虚拟磁盘设备。 5. **添加引用**:在解释配置时,自然地添加引用标识,如[^1]。 6. **生成相关问题**:在回答末尾,添加“§§相关问题§§”部分,列出2-3个相关问题。 7. **LaTeX格式**:如果有数学表达式,使用正确的格式。但这个问题可能不涉及数学,所以可能不需要。如果有变量或参数,用行内LaTeX,如`$retry_interval$`。 回答结构: - 开头:确认问题并简要解释“磁盘IO悬挂”。 - 主体:提供配置步骤和示例。 - 结尾:总结并生成相关问题。 生成相关问题: 1. 如何监控KVM虚拟机的磁盘IO性能? 2. virtio-blk设备与其他虚拟磁盘接口的优缺点是什么? 3. 如何处理KVM虚拟机中的其他硬件错误? 完整回答: - 用中文。 - 清晰分段。</think>### KVM虚拟机磁盘IO悬挂配置方法 您好!您提到的“磁盘IO悬挂”在KVM虚拟化环境中通常指磁盘输入输出(IO)错误的处理机制,例如当虚拟机读写磁盘时发生错误(如设备故障或超时),系统如何响应。这能提高虚拟机的稳定性和数据可靠性[^1]。配置主要通过QEMU/KVM的命令行参数实现,核心是使用`virtio-blk`设备驱动(一种高性能虚拟磁盘接口),并设置错误处理策略如重试(retry)、忽略(ignore)或停止(stop)。以下我将一步步解释配置方法,基于标准KVM/QEMU文档和引用示例。 #### 步骤1: 理解关键配置参数 在KVM启动命令中,为`virtio-blk`设备添加错误处理参数。主要参数包括: - `werror`:处理写错误,可选值如`retry`(重试)、`ignore`(忽略)、`stop`(停止虚拟机)。 - `rerror`:处理读错误,选项与`werror`类似。 - `retry_interval`:重试间隔时间(单位毫秒),例如`2000`表示2秒。 - `retry_timeout`:重试总超时时间(单位毫秒),例如`10000`表示10秒后放弃重试。 这些参数确保在IO错误时,系统自动重试操作,避免数据丢失或虚拟机崩溃[^1]。 #### 步骤2: 配置命令行示例 使用QEMU启动虚拟机时,在命令行中添加磁盘设备配置。以下是完整示例(基于引用[^1]的格式): ```bash qemu-system-x86_64 \ -drive file=/path/to/your/disk.img,format=raw,if=none,id=drive-virtio-disk0,cache=none,aio=native \ -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0, \ write-cache=on,werror=retry,rerror=retry,retry_interval=2000,retry_timeout=10000 ``` **解释**: - `-drive`:定义磁盘文件路径(如`/path/to/your/disk.img`),设置格式(`format=raw`或qcow2)、缓存策略(`cache=none`提升性能)和异步IO(`aio=native`)。 - `-device`:附加`virtio-blk-pci`设备,指定PCI总线位置,并启用错误处理: - `werror=retry,rerror=retry`:读写错误时自动重试。 - `retry_interval=2000`:每2秒重试一次。 - `retry_timeout=10000`:10秒后超时,停止重试。 - **重要提示**:参数如`retry_interval`和`retry_timeout`的值需根据实际磁盘性能调整。例如,高性能SSD可设置较短间隔(如500ms),而HDD可能需要更长(如3000ms)[^1]。 #### 步骤3: 通过Libvirt配置(可选) 如果使用Libvirt(如virsh或virt-manager),可以编辑XML配置文件: 1. 打开虚拟机XML文件:`virsh edit <vm-name>`。 2. 在`<disk>`部分添加`<driver>`和`<address>`子元素: ```xml <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='native' error_policy='retry' retry_interval='2000' retry_timeout='10000'/> <source file='/path/to/your/disk.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> ``` **说明**:`error_policy='retry'`对应命令行中的`werror`和`rerror`,`retry_interval`和`retry_timeout`含义相同。保存后重启虚拟机生效。 #### 注意事项 - **性能影响**:重试机制会增加IO延迟,尤其在错误频发时。建议监控虚拟机IO指标(如使用`iostat`工具)。 - **兼容性**:此配置适用于KVM/QEMU版本2.0+。确保主机内核支持virtio(运行`modinfo virtio_blk`检查)。 - **最佳实践**:结合磁盘缓存设置(如`write-cache=on`)可提升性能,但需权衡数据一致性风险。对于关键生产环境,建议添加监控告警。 - **错误处理策略**:`retry`是默认推荐值;若需严格容错,可设为`stop`(错误时停止VM),但可能导致服务中断[^1]。 通过以上步骤,您可以有效配置KVM虚拟机的磁盘IO悬挂机制,提升系统健壮性。如果您有具体虚拟机环境细节(如磁盘类型或QEMU版本),我可以进一步优化建议。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值