我找到了一些相关的问题/文章,但没有一篇是关于简单地将现有虚拟机移动到同一台机器上的新目录的文章。这就是这个问题所涉及的内容。
对于这种情况,我需要将现有的虚拟机存储从移动/var/lib/libvirt/images/
到/var/lib/libvirt/new-dir/
以下是我的理论工作计划:
virsh shutdown my-vm-name
rsync -a /var/lib/libvirt/images/my-vm-name /var/lib/libvirt/new-dir/
virsh edit my-vm-name
(within edit window)--> :s/\/var\/lib\/libvirt\/images/\/var\/lib\/libvirt\/new-dir/g
virsh start my-vm-name
这能行吗?
有没有更干净/更好的方法来做到这一点?
答案1
简而言之,是的,建议的工作计划是正确的。您可以停止虚拟机,复制文件,编辑 XML 以指向新位置,它就会起作用。
但是,请考虑到虚拟机可能正在使用存储池,并且根据最佳实践,您可以使用池来保存/管理虚拟机存储:
您很可能正在使用
default
指向 的池/var/lib/libvirt/images
。您可以使用 来验证这一点virsh pool-list
。因此,创建新目录不会执行任何操作,因为尚未配置任何存储池来指向新目录。看看
default
游泳池的使用效果virsh vol-list default
。最好创建一个新池来保持清洁。
现在你需要做的是:
创建池
virsh pool-define-as new-dir dir - - - - "/var/lib/libvirt/new-dir"
创建目录
mkdir -p "/var/lib/libvirt/new-dir"
确保权限设置正确。
chown qemu:qemu "/var/lib/libvirt/new-dir"
如果你在基于 RHEL 的系统上运行,则需要运行 restorecon 进行 SELinux 重新标记
restorecon -vvRF /var/lib/libvirt/new-dir
现在让我们建造游泳池
virsh pool-build new-dir
启动池
virsh pool-start new-dir
如果你希望池在下次重启时自动启动,你需要运行
virsh pool-autostart new-dir
最后运行
virsh pool-list && virsh pool-info new-dir
将虚拟机迁移到新池
将图像复制到新目录
cp -a /var/lib/libvirt/images/my-vm-name /var/lib/libvirt/new-dir/
现在将my-vm-name
定义转储到 xml
virsh dumpxml my-vm-name > new-vm-name
将位置(正如您在问题中提到的)更改为新位置
sed -i 's/images/new-dir/g;s/my-vm-name/new-vm-name/' new-vm-name
..最后定义新的虚拟机并启动它
virsh define new-vm-name && virsh start new-vm-name