常见做法是通过SFTP/rsync或直接在控制台使用wget/curl下载镜像。首选格式为qcow2(支持稀疏文件与快照),也可使用raw格式以提高I/O性能。上传后建议放置在标准路径如/var/lib/libvirt/images并校验校验和(sha256sum)。
管理镜像时,推荐用qemu-img查看信息:运行qemu-img info 镜像文件查看格式与虚拟大小;用qemu-img convert -O qcow2 源.img 目标.qcow2进行格式转换。对于权限与SELinux问题,确保文件属主为libvirt或相关用户,并设置合适的文件权限(chown/chmod)。
常见格式包括qcow2、raw、vmdk与vdi。建议在台湾VPS上优先使用qcow2以便启用内置快照与稀疏分配;对高吞吐场景可考虑raw以减少额外开销。
1) 使用rsync -avzP 上传镜像并保证传输可断点续传;2) 校验sha256sum确保完整性;3) 使用qemu-img info确认格式;4) 将镜像注册到libvirt xml并重载virsh定义。
上传过程中遇到磁盘配额或inode限制时,可先压缩或分段传输;若主机使用LVM,建议将镜像导入逻辑卷以提高性能。
KVM有两类快照:外部qcow2快照(推荐)与libvirt内部快照。使用virsh snapshot-create-as可以创建快照,例如:virsh snapshot-create-as <虚拟机名> 快照名 --disk-only --atomic --no-metadata。列出快照用virsh snapshot-list <虚拟机名>,还原使用virsh snapshot-revert <虚拟机名> <快照名>。
对于qcow2链式快照,qemu-img info 可查看backing file关系;若使用磁盘外部快照,需在创建前确保虚拟机处于一致状态(建议先暂停或使用guest agent协调flush)。
磁盘仅快照(--disk-only)适合在线备份;完整快照(包含内存)可用于快速回滚测试环境,但会占用更多空间且可能影响性能。
创建外部快照:virsh snapshot-create-as vm1 snap1 --disk-only --diskspec vda,file=/var/lib/libvirt/images/vm1-snap1.qcow2。还原时先停止或暂停虚拟机以确保数据一致性,或者使用应用层工具进行一致性快照(如数据库flush或xfs freeze)。
不要长期保留大量链式快照,定期合并并清理。合并可用qemu-img rebase或qemu-img commit,但操作前请务必备份原始镜像。
使用qemu-img convert可以在格式间转换并同时压缩,例如qemu-img convert -O qcow2 -c 源.img 目标.qcow2(-c启用压缩)。压缩对随机写密集型系统可能影响性能,因此在备份或长期冷备时较为合适。
若需进一步减少占用,可先使用virt-sparsify或virt-sysprep处理镜像以清理空闲数据与敏感信息。对多台虚拟机相同基线的情况,可使用基镜像+差异镜像(backing file)来节省空间。
压缩会在文件层面压缩数据以节省空间,稀疏化(sparse)则释放文件内未使用的块。qcow2天然支持稀疏和压缩(需在创建时指定)。
1) 停机或确保文件系统清理:fstrim或零填充空闲空间;2) 使用virt-sparsify --compress 源.qcow2 目标.qcow2;3) 验证目标文件并替换原始镜像(保留备份)。
压缩和转换大镜像时会占用大量CPU与临时空间,建议在低峰时段进行并监控IO与磁盘使用。请先在测试环境验证应用性能影响。
常用方案包括rsync、scp或基于增量快照的工具(如qemu-img的增量导出)结合差异同步。对于大镜像,推荐使用rsync --inplace或基于块的传输工具(如btrfs send/receive、zfs send/receive)以减少网络开销。
若使用qcow2链式快照,可导出快照增量:qemu-img convert -f qcow2 -O qcow2 -t none --output-format=qcow2 -p -o backing_file=... 等方式结合差异文件传输实现增量复制。
保证网络带宽与延迟可接受,使用压缩与分片传输(例如rsync -z --partial)可提高效率;对敏感数据应启用传输加密(SSH)。
1) 在主节点创建一个一致性快照(或暂停服务);2) 导出或拷贝快照文件到备份节点(rsync);3) 在备份端验证并注册为备份镜像;4) 定期测试从备份恢复。
备份必须定期演练恢复流程,保证备份镜像可引导。记录版本管理与保留策略,避免跨站点同时发生损坏。
备份策略应包含频率(如每日/每周)、保留周期(例如7日增量、4周全量)、一致性要求(应用层还是文件系统层),并结合监控告警。自动化可用shell脚本或Ansible、Bacula等工具实现。关键步骤:创建快照->导出/同步->验证->清理旧备份->告警。
示例简单脚本流程:1) 使用virsh snapshot-create-as生成磁盘快照;2) rsync将快照文件传输到备份服务器;3) virsh snapshot-delete清理本地快照;4) 在备份端运行qemu-img check或mount进行完整性验证;5) 将日志与状态上报到监控系统(如Prometheus+Webhook或邮件通知)。
可在root或备份用户下创建crontab任务:0 2 * * * /usr/local/bin/kvm_backup.sh >> /var/log/kvm_backup.log 2>&1。脚本中需处理锁文件、防止并发运行,并记录每次操作结果。
实现按日期命名并结合find命令删除超过保留期限的备份,例如:find /backup/vm1 -type f -mtime +30 -name "*.qcow2" -exec rm {} \\;。同时保留少量长期归档(如月度快照)。
监控备份任务状态、传输速率与磁盘使用率。出现失败应触发告警并自动重试或切换到备用方案,确保备份可靠性。
