跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 虚拟化指南 / 使用 libvirt 管理虚拟机 / 高级存储主题
适用范围 SUSE Linux Enterprise Server 15 SP6

13 高级存储主题

本章介绍有关从 VM 主机服务器的角度操作存储设备的高级主题。

13.1 使用 virtlockd 锁定磁盘文件和块设备

锁定块设备和磁盘文件可以防止从不同的 VM Guest 并发向这些资源写入数据。它可以防范启动同一个 VM Guest 两次,或者将同一个磁盘添加到两个不同的虚拟机。这样就会减少由于配置错误导致虚拟机磁盘映像损坏的风险。

锁定操作由名为 virtlockd 的守护程序控制。由于此守护程序独立于 libvirtd 守护程序运行,在 libvirtd 崩溃或重启动后,锁将会保留。甚至在更新 virtlockd 本身期间,锁也仍会保留,因为此守护程序能够自行重新执行。这可以确保当 virtlockd 更新后,无需重启动 VM Guest。KVM、QEMU 和 Xen 支持 virtlockd

13.1.1 启用锁定

SUSE Linux Enterprise Server 上默认未启用锁定虚拟磁盘的功能。要启用锁定并在系统重引导时自动启动锁定,请执行以下步骤:

  1. 编辑 /etc/libvirt/qemu.conf 并设置

    lock_manager = "lockd"
  2. 使用以下命令启动 virtlockd 守护程序:

    > sudo systemctl start virtlockd
  3. 使用以下命令重启动 libvirtd 守护程序:

    > sudo systemctl restart libvirtd
  4. 确保引导系统时自动启动 virtlockd

    > sudo systemctl enable virtlockd

13.1.2 配置锁定

virtlockd 默认配置为自动锁定为 VM Guest 配置的所有磁盘。默认设置使用直接锁空间,在这种情况下,系统会根据与 VM Guest <disk> 设备关联的实际文件路径获取锁。例如,如果 VM Guest 包含以下 <disk> 设备,将直接针对 /var/lib/libvirt/images/my-server/disk0.raw 调用 flock(2)

<disk type='file' device='disk'>
 <driver name='qemu' type='raw'/>
 <source file='/var/lib/libvirt/images/my-server/disk0.raw'/>
 <target dev='vda' bus='virtio'/>
</disk>

可以通过编辑 /etc/libvirt/qemu-lockd.conf 文件来更改 virtlockd 配置。此文件还包含详细注释及其他信息。确保通过重新加载 virtlockd 来激活配置更改:

> sudo systemctl reload virtlockd

13.1.2.1 启用间接锁空间

virtlockd 的默认配置使用直接锁空间。这意味着,系统会根据与 <disk> 设备关联的实际文件路径来获取锁。

如果磁盘文件路径不可供所有主机访问,可将 virtlockd 配置为允许间接锁空间。这意味着,系统会使用磁盘映像路径的哈希在间接锁空间目录中创建一个文件。然后,将在这些哈希文件而不是实际的磁盘文件路径中存放锁。如果包含磁盘文件的文件系统不支持 fcntl() 锁,也可以使用间接锁空间。使用 file_lockspace_dir 设置指定间接锁空间:

file_lockspace_dir = "/MY_LOCKSPACE_DIRECTORY"

13.1.2.2 在 LVM 或 iSCSI 卷上启用锁定

如果您要锁定由多个主机共享的 LVM 或 iSCSI 卷上的虚拟磁盘,则需要按 UUID 而不是路径(默认使用路径)执行锁定。此外,需将锁空间目录放在可供共享该卷的所有主机访问的共享文件系统上。为 LVM 和/或 iSCSI 设置以下选项:

lvm_lockspace_dir = "/MY_LOCKSPACE_DIRECTORY"
iscsi_lockspace_dir = "/MY_LOCKSPACE_DIRECTORY"

13.2 联机调整 Guest 块设备的大小

有时,您需要更改(扩展或收缩)Guest 系统使用的块设备的大小。例如,当最初分配的磁盘空间不再足够时,便需要增大空间大小。如果 Guest 磁盘驻留在逻辑卷中,您可以在 Guest 系统正在运行时调整该磁盘的大小。与脱机调整磁盘大小相比(请参见 第 19.3 节 “Guestfs 工具” 软件包中的 virt-resize 命令),这是一项巨大的优势,因为 Guest 提供的服务在调整大小期间不会受到干扰。要调整 VM Guest 磁盘的大小,请执行以下步骤:

过程 13.1︰ 联机调整 Guest 磁盘的大小
  1. 在 Guest 系统内部,检查磁盘(例如 /dev/vda)的当前大小。

    # fdisk -l /dev/vda
    Disk /dev/sda: 160.0 GB, 160041885696 bytes, 312581808 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
  2. 在主机上,将容纳 Guest 磁盘 /dev/vda 的逻辑卷调整到所需大小,例如 200 GB。

    # lvresize -L 200G /dev/mapper/vg00-home
    Extending logical volume home to 200 GiB
    Logical volume home successfully resized
  3. 在主机上,调整与 Guest 磁盘 /dev/mapper/vg00-home 相关的块设备的大小。可以使用 virsh list 查找 DOMAIN_ID

    # virsh blockresize  --path /dev/vg00/home --size 200G DOMAIN_ID
    Block device '/dev/vg00/home' is resized
  4. 检查 Guest 是否接受新磁盘大小。

    # fdisk -l /dev/vda
    Disk /dev/sda: 200.0 GB, 200052357120 bytes, 390727260 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

13.3 在主机与 Guest 之间共享目录(文件系统直通)

libvirt 允许使用 QEMU 的文件系统直通(也称为 VirtFS)功能在主机与 Guest 之间共享目录。此类目录还可由多个 VM Guest 同时访问,因此可用于在 VM Guest 之间交换文件。

注意
注意:Windows Guest 和文件系统直通

无法通过文件系统直通在 VM 主机服务器与 Windows Guest 之间共享目录,因为 Windows 缺少挂载共享目录所需的驱动程序。

要使共享目录可在 VM Guest 上使用,请执行以下操作:

  1. 在虚拟机管理器中打开 Guest 的控制台,然后从菜单中选择视图 › 细节,或者在工具栏中单击显示虚拟硬件细节。选择添加硬件 › 文件系统打开文件系统直通对话框。

  2. 可以在驱动程序中选择句柄路径基本驱动程序。默认设置为路径。可以在模式中选择安全模型,这会影响在主机上设置文件权限的方式。有三个选项可用:

    直通(默认设置)

    使用客户端用户的身份凭证直接在文件系统上创建文件。这与 NFSv3 使用的设置相似。

    Squash

    直通相同,但会忽略 chown 等特权操作的失败事件。当以 root 特权之外的身份运行 KVM 时,需要选择此选项。

    已映射

    使用文件服务器的身份凭证 (qemu.qemu) 创建文件。用户身份凭证和客户端用户的身份凭证保存在扩展属性中。当主机和 Guest 域应该隔离时,建议使用此模型。

  3. 使用源路径指定 VM 主机服务器上的目录的路径。在目标路径中输入一个字符串,作为挂载共享目录时使用的标记。此字段中的字符串仅作为标记,不是 VM Guest 上的路径。

  4. 应用设置。如果 VM Guest 当前正在运行,需要将其关闭才能应用新设置(重引导 Guest 是不够的)。

  5. 引导 VM Guest。要挂载共享目录,请输入以下命令:

    > sudo mount -t 9p -o trans=virtio,version=9p2000.L,rw TAG /MOUNT_POINT

    要使共享目录永久可用,请将下面一行添加到 /etc/fstab 文件中:

    TAG   /MOUNT_POINT    9p  trans=virtio,version=9p2000.L,rw    0   0

13.4 通过 libvirt 使用 RADOS 块设备

RADOS 块设备 (RBD) 将数据存储在 Ceph 群集中。这些设备支持快照、复制和数据一致性。您可以像使用其他块设备一样,从 libvirt 管理的 VM Guest 使用 RBD。

有关更多细节,请参见 SUSE Enterprise Storage《Administration Guide》中的“Using libvirt with Ceph”一章。https://documentation.suse.com/ses/ 中提供了 SUSE Enterprise Storage 文档。