如何更改 KVM Libvirt 默认存储池位置

[ad_1]

本指南解释了什么是 Libvirt 中的存储池和卷,以及如何使用更改 KVM libvirt 默认存储池位置 维什 程序, 虚拟机管理器座舱 在 Linux 中。

内容

  1. Libvirt 中的存储池和卷
  2. 存储池的类型
  3. 1. 更改 KVM Libvirt 默认存储池位置
    1. 1.1. 使用 virsh 程序更改 KVM Libvirt 默认存储池位置
    2. 1.2. 使用 Virt-manager 更改 KVM Libvirt 默认存储池位置
    3. 1.3. 使用 Cockpit 更改 KVM Libvirt 默认存储池位置
    4. 故障排除
      1. 结论

Libvirt 中的存储池和卷

Libvirt 通过存储池和卷在 KVM 主机系统上提供存储管理。

存储池是分配在 KVM 主机上供虚拟机使用的一定数量的存储空间。 存储池分为多个存储卷,并作为块设备分配给 VM。

换句话说,存储池是 KVM 主机系统上可用于存储卷的存储资源。 而存储卷是可以分配给虚拟机的存储设备。

存储卷可以是块设备,例如分区、逻辑卷或文件。 虚拟硬盘、cd/dvd/软盘设备和附加到来宾计算机的 ISO 映像是存储卷的示例。

没有存储池,您就无法拥有存储卷。 首先,您需要创建一个存储池,然后在池中创建存储卷。

默认情况下,所有使用 libvirt 创建的虚拟机都存储在 /var/lib/libvirt/images/ 地点。 这是 Libvirt VM 映像的默认存储池。

存储池的类型

存储池可以是以下类型之一:

  1. 目录池 – 使用目录作为托管图像文件的池。 这些文件可以是有效的卷格式类型之一,例如 raw、qcow、qcow2、dmg、vmdk、vpc 或 ISO 映像。
  2. 文件系统池 – 使用块设备(例如分区或 LVM 组)作为池,而不是现有挂载文件系统上的 using 目录。
  3. 网络文件系统池 – 使用网络文件系统(例如 cifs, glusterfs, nfs 等)作为存储存储卷的池。 它不需要目录或块设备,它需要网络主机和共享目录的路径。
  4. 逻辑卷池 – 使用 LVM 卷组作为存储卷的池。
  5. 磁盘池 – 使用物理磁盘作为池。 可以通过向磁盘添加分区来创建卷。
  6. iSCSI 池 – 使用 iSCSI 目标来存储卷。 所有卷都应在 iSCSI 服务器上预先分配。
  7. iSCSI 直接池 – 这是 iSCSI 池的变体。 它不使用 iscsiadm,而是使用 libiscsi. 它需要一个主机、一个作为目标 IQN 的路径和一个启动器 IQN。
  8. SCSI 池 – 以与 iSCSI 目标几乎相同的方式使用 SCSI 主机总线适配器。
  9. 多路径池 – 目前不支持多路径。
  10. RBD 池 – 此存储驱动程序提供了一个池,其中包含 RADOS 池中的所有 RBD 映像。 RBD(RADOS 块设备)是 Ceph 分布式存储项目的一部分。
  11. Sheepdog pool – 使用 Sheepdog Cluster 作为存储卷的池。
  12. Gluster 池 – 使用 Gluster 分布式文件系统作为池。
  13. ZFS 池 – 使用 ZFS 文件系统作为池。
  14. Vstorage pool – 使用 Virtuozzo 分布式软件定义存储作为池。

出于本指南的目的,我们将使用 Directory pool.

1. 更改 KVM Libvirt 默认存储池位置

如前所述,所有 KVM/Libvirt 映像都存储在 /var/lib/libvirt/images/ 默认位置。 由于该位置位于 rootfs 分区,您可能希望将其移动到其他位置,例如 $HOME 目录。

我们可以使用以下命令更改 KVM Libvirt VM 映像的默认位置 virsh 命令行程序及其图形前端称为 虚拟机管理器,并且 座舱 网络控制台。

首先,我们将看到如何使用更改 Libvirt 默认存储池路径 virsh 程序。

1.1. 使用 virsh 程序更改 KVM Libvirt 默认存储池位置

1.1.1. 登录到您的 KVM 主机系统并关闭所有正在运行的访客。

要查找正在运行的 VM 列表,只需执行以下操作:

$ virsh list --all

如果有任何 VM 正在运行,请关闭。

$ virsh shutdown

1.1.2. 列出 KVM 主机中所有配置的存储池:

$ virsh pool-list 

示例输出:

 Name      State    Autostart
 default   active   no

如您所见,我只有一个存储池,即 default. 当我们安装时它会自动创建 kvm/libvirt.

1.1.3. 让我们使用命令查看默认存储池的详细信息:

$ virsh pool-info default 

示例输出:

 Name:           default
 UUID:           76f47a3c-7656-4c34-9ab5-c87e5136d532
 State:          running
 Persistent:     yes
 Autostart:      no
 Capacity:       369.22 GiB
 Allocation:     65.60 GiB
 Available:      303.62 GiB
显示 libvirt 默认存储池的详细信息

上面的输出列出了存储池的名称、UUID、状态、持久性、自动启动、容量、存储池的已分配空间和剩余可用空间等详细信息。

由于我们要更改存储池的路径,因此我们也需要找到它。

1.1.4. 要显示默认存储池的路径,我们使用 格雷普 命令与 virsh 像下面这样:

$ virsh pool-dumpxml default | grep -i path

示例输出:

<path>/var/lib/libvirt/images</path>

正如你在上面的输出中看到的,默认的存储池是 /var/lib/libvirt/images/. 我们将在后续步骤中更改它。

1.1.5. 使用以下命令列出存储在默认存储池中的所有现有 VM 映像 virsh 像下面这样:

$ virsh vol-list default | grep "/var/lib/libvirt/images/"

示例输出:

archlinux.img   /var/lib/libvirt/images/archlinux.img

我在默认存储池中有一个 Arch Linux 虚拟机映像。

1.1.6. 使用以下命令停止并取消定义默认存储池:

$ virsh pool-destroy default
$ virsh pool-undefine default

1.1.7. 使用以下命令编辑默认存储池:

$ virsh pool-edit default 

这将在默认编辑器中打开 VM 的 XML 文件。

找到读取的行 "<path>/var/lib/libvirt/images</path>" 在下面 target 指令并将其更改为您选择的新路径。

就我而言,我已经改变了 <path> 元素来自 /var/lib/libvirt/images/home/sk/.local/share/libvirt/images.

<pool type="dir">
  <name>default</name>
  <uuid>76f47a3c-7656-4c34-9ab5-c87e5136d532</uuid>
  <capacity unit="bytes">396452147200</capacity>
  <allocation unit="bytes">71178977280</allocation>
  <available unit="bytes">325273169920</available>
  <source>
  </source>
  <target>
    <path>/home/sk/.local/share/libvirt/images</path>
    <permissions>
      <mode>0755</mode>
      <owner>1000</owner>
      <group>1000</group>
      <label>unconfined_u:object_r:svirt_home_t:s0</label>
    </permissions>
  </target>
</pool>
使用 virsh 命令更改 KVM Libvirt 默认存储池位置

只要确保新路径存在。 如果存在,只需创建它并为新路径目录分配足够的权限。 Save 文件和 close 它。

提示:

如果由于某种原因没有默认存储池存在,您可以创建一个如下所示:

$ virsh pool-define-as --name default --type dir --target /home/sk/.local/share/libvirt/images/

将存储路径替换为您自己的。

1.1.8. 最后,启动默认存储池:

$ virsh pool-start default

1.1.9. 将存储池设置为在系统启动时自动启动:

$ virsh pool-autostart default

1.1.10. 使用以下命令验证 libvirt 存储池路径是否已更改:

$ virsh pool-dumpxml default | grep -i path

您现在应该看到新路径。

     /home/sk/.local/share/libvirt/images

从现在开始,虚拟映像将保存在新的存储池中。

1.1.11. 检查存储池状态:

$ virsh pool-list 
 Name      State    Autostart
-------------------------------
 default   active   yes

1.1.12. 重启 libvirtd 服务:

$ sudo systemctl restart libvirtd

1.1.13. 我们需要做最后一件事。 将所有 VM 映像从旧存储路径复制到新存储路径:

$ sudo mv /var/lib/libvirt/images/archlinux.qcow2 /home/sk/.local/share/libvirt/images/

全部完成!

这就是我们如何使用命令行将 KVM Libivrt 默认存储池位置更改为新的位置 Virsh 程序。 如您所见,更改 KVM/Libvirt 来宾的默认存储路径相当容易!

现在让我们看看如何使用名为的图形应用程序更改 Libvirt 默认存储池路径 Virt-manager.

1.2. 使用 Virt-manager 更改 KVM Libvirt 默认存储池位置

虚拟机管理器,Virtual Machine Manager 的缩写,是一个图形用户界面应用程序,用于通过 libvirt. 换句话说,Virt-manager 只是一个图形化的前端 libvirt.

1.2.1. 打开 Virt-manager 应用程序。 右键单击 QEMU/KVM 并单击 细节 选项。

查看 KVM 连接详情查看 KVM 连接详情

你也可以点击 编辑-> 连接详细信息 从 Virt-manager 界面。

1.2.2. 在下面 贮存 部分,您将看到默认存储池位置。

KVM Libvirt 默认存储池位置KVM Libvirt 默认存储池位置

1.2.3. 点击 停止池 进而 删除池 左下窗格中的选项。

停止和删除 KVM Libvirt 默认存储池停止和删除 KVM Libvirt 默认存储池

这将停用并删除默认池。

1.2.4. 点击 加号 (+) 在左下窗格上签名以创建供虚拟机使用的新存储池。

Enter 存储池的名称(例如 default 在我的情况下)。 选择池的类型。 在我们的例子中,我选择了 文件系统目录. 指定目标位置并单击完成。

创建新的 KVM Libvirt 存储池创建新的 KVM Libvirt 存储池

1.2.5. 现在新的存储处于活动状态。 检查 自动开启 框以在系统启动时自动启动新的存储池。

新的 KVM Libvirt 存储池位置新的 KVM Libvirt 存储池位置

1.2.6. 将所有 VM 映像从旧存储目录移动到新存储目录。

$ sudo mv /var/lib/libvirt/images/archlinux.qcow2 /home/sk/.local/share/libvirt/images/

1.2.7. 最后,重启 libvirtd 服务:

$ sudo systemctl restart libvirtd

1.3. 使用 Cockpit 更改 KVM Libvirt 默认存储池位置

座舱 是一个免费的基于 Web 的服务器管理工​​具,用于通过 Web 浏览器监控和管理 Linux 服务器。

1.3.1 打开您的 Web 浏览器并通过导航到 Cockpit 控制台登录 https://本地主机:9090 或者 https://IP 地址:9090 从地址栏。

登录 Cockpit Web 控制台登录 Cockpit Web 控制台

1.3.2. 点击 虚拟机 左侧窗格中的选项卡。 在右侧,单击 存储池 选项。

转到 Cockpit 中的存储池部分转到 Cockpit 中的存储池部分

1.3.3. 在存储池部分下,您将看到默认存储池。 单击小箭头展开存储池选项卡,然后单击 停用删除 纽扣。

在 Cockpit 中停用和删除默认存储池在 Cockpit 中停用和删除默认存储池

笔记: 由于我已经更改了默认存储位置,因此它显示了新路径。 在您的系统中,它将显示旧的默认路径,即 /var/lib/libvirt/images.

1.3.4. Enter 存储池名称、类型和目标路径,然后单击 创建. 确保选中启动复选框。

在 Cockpit 中创建新的 KVM Libvirt 存储池在 Cockpit 中创建新的 KVM Libvirt 存储池

1.3.5. 点击 启用 按钮启动池。

在 Cockpit 中激活 KVM Libvirt 存储池在 Cockpit 中激活 KVM Libvirt 存储池

1.3.6. 将所有 VM 映像从旧存储目录移动到新存储目录。

$ sudo mv /var/lib/libvirt/images/archlinux.qcow2 /home/sk/.local/share/libvirt/images/

1.3.7. 重启 libvirtd 服务:

$ sudo systemctl restart libvirtd

故障排除

更改存储池路径后,启动VM时可能会遇到以下错误:

Failed to start domain 'Archlinux_default' error: Cannot access storage file '/home/sk/.local/share/libvirt/images/Archlinux_default.img' (as uid:107, gid:107): Permission denied.

这是因为 qemu 用户可能没有存储目录​​的读取权限。 要修复它,请参考以下链接:

  • [Solved] 无法访问存储文件,KVM Libvirt 中的权限被拒绝错误

结论

在本指南中,我们讨论了一个重要的 KVM/Libvirt 主题 – 存储池. 我们学习了什么是存储池和卷,然后如何使用三个程序更改 kvm libvirt 默认存储池位置,即 VIrsh、Virt-manager 和 Cockpit。 希望您觉得这个有帮助。

资源:

  • Libvirt 存储文档

特色图片由 mohamed Hassan 在Pixabay上提供。

更改kvm libvirt存储路径Cockpit基于内核的虚拟机KVMKvm管理libvirtLinux存储池存储卷VirshVirt-manager

[ad_2]

Related Posts