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 上默认未启用锁定虚拟磁盘的功能。要启用锁定并在系统重引导时自动启动锁定,请执行以下步骤:
编辑
/etc/libvirt/qemu.conf
并设置lock_manager = "lockd"
使用以下命令启动
virtlockd
守护程序:>
sudo
systemctl start virtlockd使用以下命令重启动
libvirtd
守护程序:>
sudo
systemctl restart libvirtd确保引导系统时自动启动
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.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 磁盘的大小,请执行以下步骤:
在 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在主机上,将容纳 Guest 磁盘
/dev/vda
的逻辑卷调整到所需大小,例如 200 GB。#
lvresize -L 200G /dev/mapper/vg00-home Extending logical volume home to 200 GiB Logical volume home successfully resized在主机上,调整与 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检查 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.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 文档。