26 Xen 中的块设备 #
26.1 将物理存储设备映射到虚拟磁盘 #
域配置文件中 Xen 域的磁盘指定方式非常直接,如以下示例所示:
disk = [ 'format=raw,vdev=hdc,access=ro,devtype=cdrom,target=/root/image.iso' ]
此命令基于 /root/image.iso
磁盘映像文件定义一个磁盘块设备。Guest 将该磁盘视为 hdc
,只能对它进行只读 (ro
) 访问。设备类型为 cdrom
,格式为 raw
。
下面的示例定义了相同的设备,但使用的是简化的位置语法:
disk = [ '/root/image.iso,raw,hdc,ro,cdrom' ]
您可在同一行中包含更多磁盘定义,每个定义需以逗号分隔。如果未指定某个参数,系统会采用其默认值:
disk = [ '/root/image.iso,raw,hdc,ro,cdrom','/dev/vg/guest-volume,,hda','...' ]
- target
源块设备或磁盘映像路径。
- format
映像文件的格式。默认值为
raw
。- vdev
Guest 看到的虚拟设备。支持的值为 hd[x]、xvd[x]、sd[x] 等。有关更多细节,请参见
/usr/share/doc/packages/xen/misc/vbd-interface.txt
。此参数是必需的。- access
提供给 Guest 的块设备处于只读模式还是读写模式。支持的值为
ro
或r
(只读访问)以及rw
或w
(读写访问)。对于devtype=cdrom
,默认值为ro
;对于其他设备类型,默认值为rw
。- devtype
限定虚拟设备类型。支持的值为
cdrom
。- backendtype
要使用的后端实现。支持的值为
phy
、tap
和qdisk
。一般不应指定此选项,因为系统会自动确定后端类型。- script
指定
target
不是常规的主机路径,而是要由可执行程序解释的信息。如果指定的脚本文件不指向绝对路径,将在/etc/xen/scripts
中查找该文件。这些脚本通常名为block-<script_name>
。
有关指定虚拟磁盘的详细信息,请参见 /usr/share/doc/packages/xen/misc/xl-disk-configuration.txt
。
26.2 将网络存储设备映射到虚拟磁盘 #
与映射本地磁盘映像(请参见第 26.1 节 “将物理存储设备映射到虚拟磁盘”)类似,您也可以将网络磁盘映射为虚拟磁盘。
下面的示例说明如何映射一个启用了多个 Ceph 监视器和 cephx 身份验证的 RBD(RADOS 块设备):
disk = [ 'vdev=hdc, backendtype=qdisk, \ target=rbd:libvirt-pool/new-libvirt-image:\ id=libvirt:key=AQDsPWtW8JoXJBAAyLPQe7MhCC+JPkI3QuhaAw==:auth_supported=cephx;none:\ mon_host=137.65.135.205\\:6789;137.65.135.206\\:6789;137.65.135.207\\:6789' ]
下面是 NBD(网络块设备)磁盘映射示例:
disk = [ 'vdev=hdc, backendtype=qdisk, target=nbd:151.155.144.82:5555' ]
26.3 基于文件的虚拟磁盘和回写设备 #
当虚拟机正在运行时,其每个基于文件的虚拟磁盘都会占用主机上的一个回写设备。默认情况下,主机最多允许占用 64 个回写设备。
要在主机上同时运行更多基于文件的虚拟磁盘,可以通过将以下选项添加到主机的 /etc/modprobe.conf.local
文件,来增加可用回写设备的数量。
options loop max_loop=x
其中,x
是要创建的回写设备的最大数量。
重新装载模块后,更改即会生效。
输入 rmmod loop
和 modprobe
loop
可以卸载和重新装载模块。如果 rmmod
不起作用,请卸载所有现有循环设备,或重引导计算机。
26.4 调整块设备的大小 #
尽管您始终都可以向 VM Guest 系统添加新的块设备,但有时更合适的做法是增加现有块设备的大小。如果在部署 VM Guest 期间已经规划了此类系统修改,则应该注意多个基本事项:
使用可以增加大小的块设备。通常使用 LVM 设备和文件系统映像。
不要将 VM Guest 内部的设备分区,而是直接使用主设备来应用文件系统。例如,直接使用
/dev/xvdb
,而不是在/dev/xvdb
中添加分区。确保要使用的文件系统可调整大小。有时(例如,使用 Ext3 时),必须关闭某些功能才能调整文件系统的大小。其中一个可以联机调整大小并挂载的文件系统是
XFS
。增加底层块设备的大小后,使用xfs_growfs
命令调整该文件系统的大小。有关XFS
的详细信息,请参见man 8 xfs_growfs
。
调整指派给 VM Guest 的 LVM 设备的大小后,VM Guest 会自动获悉新的大小。您无需执行其他操作告知 VM Guest 块设备的新大小。
使用文件系统映像时,将使用一个循环设备向 Guest 挂接映像文件。有关调整该映像的大小以及为 VM Guest 刷新大小信息的详细信息,请参见第 28.2 节 “稀疏映像文件和磁盘空间”。
26.5 用于管理高级存储方案的脚本 #
可以借助脚本来管理高级存储方案,例如 dmmd
(“设备映射程序 — 多磁盘”)提供的磁盘环境,包括构建在软件 RAID 集基础之上的 LVM 环境,或者构建在 LVM 环境基础之上的软件 RAID 集。这些脚本包含在 xen-tools 软件包中。安装后,可以在 /etc/xen/scripts
中找到它们:
block-dmmd
block-drbd-probe
block-npiv
借助这些脚本,可以在将块设备提供给 Guest 之前使用外部命令执行这些设备的特定操作或一系列操作。
以前,只能使用磁盘配置语法 script=
将这些脚本与 xl
或 libxl
结合使用。现在,可以通过在磁盘的 <source>
元素中指定块脚本的基本名称,将这些脚本与 libvirt 结合使用。例如:
<source dev='dmmd:md;/dev/md0;lvm;/dev/vgxen/lv-vm01'/>