如何更改 KVM Libvirt 默认存储池位置 – 数字指南

33.6K

本指南解释了 Libvirt 中的存储池和卷以及如何使用更改 KVM libvirt 默认存储池位置 处女座 程序, 虚拟经理座舱 在 Linux.

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

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

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

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

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

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

存储池的类型

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

  1. 目录池——使用目录作为存放图像文件的池。 这些文件可以是有效的卷格式类型之一,例如 raw、qcow、qcow2、dmg、vmdk、vpc 或 ISO 映像。
  2. 文件系统池——使用块设备(例如分区或 LVM 组)作为池而不是现有已安装文件系统上的使用目录。
  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 Block Device)是 Ceph 分布式存储项目的一部分。
  11. Sheepdog 池——使用 Sheepdog Cluster 作为存储卷的池。
  12. Gluster 池——使用 Gluster 分布式文件系统作为池。
  13. ZFS 池——使用 ZFS 文件系统作为池。
  14. vstorage 池——使用 Virtuozzo 分布式软件定义存储作为池。

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

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

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

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

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

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

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

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

$ 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. 要显示默认存储池的路径,我们使用 grep 命令与 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

我有一个拱门 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 默认存储池位置

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

提示:

如果由于任何原因不存在默认存储池,您可以创建一个如下所示:

$ 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 连接详情

您也可以点击 编辑-> 连接细节 从 Virt-manager 界面。

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

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 的服务器管理工​​具,用于监视和管理 Linux 服务器通过网络浏览器。

1.3.1 打开您的 Web 浏览器并通过导航到 Cockpit 控制台登录 https://localhost: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

故障排除

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

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。 希望你觉得这个有用。

资源:

特色图片来自 穆罕默德·哈桑皮克斯.

发表评论

您的电子邮件地址不会被公开, 必填字段已标记 *