跳转到内容跳转到页面导航:上一页 [访问键 p]/下一页 [访问键 n]
适用于 openSUSE Leap 15.5

12 高级存储主题 编辑源文件

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

12.1 使用 virtlockd 锁定磁盘文件和块设备 编辑源文件

锁定块设备和磁盘文件可以防止不同的 VM Guest 同时写入这些资源。它提供了防止两次启动相同的 VM Guest 或将相同的磁盘添加到两个不同虚拟机的保护。这降低了由于错误的配置导致虚拟机磁盘镜像损坏的风险。

锁定由一个名为 virtlockd 的守护程序控制。由于它独立于 libvirtd 守护程序运行,因此锁定可以承受崩溃或 libvirtd 的重启。即使在 virtlockd 本身更新期间,锁定仍然存在,因为它能够重新执行自身。这确保了 VM Guest 在 virtlockd 更新时 不需要 重启。 virtlockd 支持 KVM、QEMU 和 Xen。

12.1.1 启用锁定 编辑源文件

openSUSE Leap 上默认情况下未启用磁盘锁定。要启用并在重新启动时自动启动它,请执行以下步骤

  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

12.1.2 配置锁定 编辑源文件

默认情况下,virtlockd 配置为自动锁定为 VM Guest 配置的所有磁盘。默认设置使用 直接 lockspace,其中锁定针对与 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

12.1.2.1 启用间接 lockspace 编辑源文件

virtlockd 的默认配置使用 直接 lockspace。这意味着锁定针对与 <disk> 设备关联的实际文件路径获取。

如果磁盘文件路径对所有主机不可访问,则可以配置 virtlockd 以允许 间接 lockspace。这意味着磁盘镜像路径的哈希用于在间接 lockspace 目录中创建一个文件。然后,锁定在这些哈希文件上保持,而不是实际的磁盘文件路径。间接 lockspace 在包含磁盘文件的文件系统不支持 fcntl() 锁时也很有用。使用 file_lockspace_dir 设置指定间接 lockspace

file_lockspace_dir = "/MY_LOCKSPACE_DIRECTORY"

12.1.2.2 在 LVM 或 iSCSI 卷上启用锁定 编辑源文件

当想要锁定由多个主机共享的 LVM 或 iSCSI 卷上的虚拟磁盘时,需要通过 UUID 进行锁定,而不是通过路径(默认情况下使用)。此外,lockspace 目录需要放置在所有共享卷的主机都可以访问的共享文件系统上。为 LVM 和/或 iSCSI 设置以下选项

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

12.2 来宾块设备的在线调整大小 编辑源文件

有时需要更改—扩展或缩小—来宾系统使用的块设备的大小。例如,当最初分配的磁盘空间不再足够时,就该增加其大小了。如果来宾磁盘位于 逻辑卷 上,可以在来宾系统运行时调整其大小。这是优于离线磁盘调整大小(请参阅 第 18.3 节,“Guestfs 工具” 包中的 virt-resize 命令)的优点,因为来宾提供的服务不会被调整大小过程中断。

过程 12.1: 来宾磁盘的在线调整大小
  1. 在来宾系统中,检查磁盘的当前大小(例如 /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. 在主机上,将包含来宾的 /dev/vda 磁盘的逻辑卷调整为所需的大小,例如 200 GB。

    # lvresize -L 200G /dev/mapper/vg00-home
    Extending logical volume home to 200 GiB
    Logical volume home successfully resized
  3. 在主机上,调整与磁盘 /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. 检查来宾是否接受了新的磁盘大小。

    # 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

12.3 在主机和来宾之间共享目录(文件系统直通) 编辑源文件

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

Note
注意:Windows 来宾和文件系统直通

通过文件系统直通在 VM 主机服务器和 Windows 来宾之间共享目录不起作用,因为 Windows 缺少安装共享目录所需的驱动程序。

要使共享目录在 VM Guest 上可用,请按以下步骤操作

  1. 在虚拟化管理器中打开来宾控制台,选择菜单中的 查看 › 详细信息,或单击工具栏中的 显示虚拟硬件详细信息。选择 添加硬件 › 文件系统 以打开 文件系统直通 对话框。

  2. 驱动程序 允许您在 句柄路径 基本驱动程序之间进行选择。默认设置是 路径模式 允许您选择安全模型,该模型会影响主机上设置文件权限的方式。有三个选项可用

    直通 (默认)

    文件系统上的文件直接使用客户端用户的凭据创建。这类似于 NFSv3 的使用方式。

    Squash

    直通 相同,但特权操作(如 chown)失败将被忽略。当 KVM 未以 root 权限运行时,这是必需的。

    Mapped

    文件使用文件服务器的凭据(qemu.qemu)创建。用户凭据和客户端用户的凭据保存在扩展属性中。建议在应使主机和来宾域隔离时使用此模型。

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

  4. 应用 设置。如果 VM 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

12.4 使用 RADOS 块设备与 libvirt 编辑源文件

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

打印此页面