将 libvirt 客户虚拟机迁移到同一主机上的新存储目录

将 libvirt 客户虚拟机迁移到同一主机上的新存储目录

我找到了一些相关的问题/文章,但没有一篇是关于简单地将现有虚拟机移动到同一台机器上的新目录的文章。这就是这个问题所涉及的内容。

对于这种情况,我需要将现有的虚拟机存储从移动/var/lib/libvirt/images//var/lib/libvirt/new-dir/

以下是我的理论工作计划:

  1. virsh shutdown my-vm-name

  2. rsync -a /var/lib/libvirt/images/my-vm-name /var/lib/libvirt/new-dir/

  3. virsh edit my-vm-name

    (within edit window)--> :s/\/var\/lib\/libvirt\/images/\/var\/lib\/libvirt\/new-dir/g
    
  4. virsh start my-vm-name

这能行吗?

有没有更干净/更好的方法来做到这一点?

答案1

简而言之,是的,建议的工作计划是正确的。您可以停止虚拟机,复制文件,编辑 XML 以指向新位置,它就会起作用。


但是,请考虑到虚拟机可能正在使用存储池,并且根据最佳实践,您可以使用池来保存/管理虚拟机存储:

  1. 您很可能正在使用default指向 的池/var/lib/libvirt/images。您可以使用 来验证这一点virsh pool-list。因此,创建新目录不会执行任何操作,因为尚未配置任何存储池来指向新目录。

  2. 看看default游泳池的使用效果virsh vol-list default

  3. 最好创建一个新池来保持清洁。

现在你需要做的是:

创建池

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

相关内容