13.3.6.3. 在客户机中添加基于 SCSI LUN 的存储
可以通过多种方式向客户机公开主机 SCSI LUN。将 SCSI LUN 公开给客户机提供了在客户机上直接向 LUN 执行 SCSI 命令的能力。这可很有用,作为在客户机间共享 LUN 的方法,并在主机之间共享光纤通道存储。
有关基于 SCSI LUN 的存储的详情,请参考使用 SCSI 设备 的基于 vHBA 的存储池。
重要
可选的
sgio
属性控制是否为 device='lun'
磁盘过滤非特权 SCSI Generical I/O(SG_IO)命令。sgio
属性可以指定为 'filtered'
或 'unfiltered'
,但必须设置为 'unfiltered'
以允许 SG_IO ioctl 命令在持久预留中通过客户端传递命令。
除了设置
sgio='unfiltered'
外,必须将 <shareable>
元素设置为在客户机间共享 LUN。如果没有指定 sgio
属性,则默认为 'filtered'
。
<disk>
XML 属性 device='lun'
可用于以下客户机磁盘配置:
type='block'
for<source dev=
'/dev/disk/by-{path|id|uuid|label}'
/><disk type='block' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source dev='/dev/disk/by-path/pci-0000\:04\:00.1-fc-0x203400a0b85ad1d7-lun-0'/> <target dev='sda' bus='scsi'/> <shareable/> </disk>
注意<source>
设备名称中的冒号前的反斜杠是必需的。type='network'
for<source protocol='iscsi'... />
<disk type='network' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-net-pool/1'> <host name='example.com' port='3260'/> <auth username='myuser'> <secret type='iscsi' usage='libvirtiscsi'/> </auth> </source> <target dev='sda' bus='scsi'/> <shareable/> </disk>
- 当使用 iSCSI 或 NPIV/vHBA 源池作为 SCSI 源池时,
type='volume'
。以下示例 XML 显示使用 iSCSI 源池(名为 iscsi-net-pool)作为 SCSI 源池的客户机:<disk type='volume' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source pool='iscsi-net-pool' volume='unit:0:0:1' mode='host'/> <target dev='sda' bus='scsi'/> <shareable/> </disk>
注意<source>
标签中的mode=
选项是可选的,但如果使用,则必须设置为'host'
,而不是'direct'
。当设置为"host"
时,libvirt 将找到本地主机上设备的路径。当设置为"直接"
时,libvirt 将使用源池的来源主机数据生成到设备的路径。上面示例中的 iSCSI 池(iscsi-net-pool)将具有类似如下的配置:# virsh pool-dumpxml iscsi-net-pool <pool type='iscsi'> <name>iscsi-net-pool</name> <capacity unit='bytes'>11274289152</capacity> <allocation unit='bytes'>11274289152</allocation> <available unit='bytes'>0</available> <source> <host name='192.168.122.1' port='3260'/> <device path='iqn.2013-12.com.example:iscsi-chap-netpool'/> <auth type='chap' username='redhat'> <secret usage='libvirtiscsi'/> </auth> </source> <target> <path>/dev/disk/by-path</path> <permissions> <mode>0755</mode> </permissions> </target> </pool>
要验证 iSCSI 源池中的可用 LUN 的详情,请输入以下命令:# virsh vol-list iscsi-net-pool Name Path ------------------------------------------------------------------------------ unit:0:0:1 /dev/disk/by-path/ip-192.168.122.1:3260-iscsi-iqn.2013-12.com.example:iscsi-chap-netpool-lun-1 unit:0:0:2 /dev/disk/by-path/ip-192.168.122.1:3260-iscsi-iqn.2013-12.com.example:iscsi-chap-netpool-lun-2
- 当使用 NPIV/vHBA 源池作为 SCSI 源池时,
type='volume'
。以下示例 XML 显示使用 NPIV/vHBA 源池(名为 vhbapool_host3)作为 SCSI 源池的客户机:<disk type='volume' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source pool='vhbapool_host3' volume='unit:0:1:0'/> <target dev='sda' bus='scsi'/> <shareable/> </disk>
上例中的 NPIV/vHBA 池(vhbapool_host3)将具有类似的配置:# virsh pool-dumpxml vhbapool_host3 <pool type='scsi'> <name>vhbapool_host3</name> <capacity unit='bytes'>0</capacity> <allocation unit='bytes'>0</allocation> <available unit='bytes'>0</available> <source> <adapter type='fc_host' parent='scsi_host3' managed='yes' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee045d'/> </source> <target> <path>/dev/disk/by-path</path> <permissions> <mode>0700</mode> <owner>0</owner> <group>0</group> </permissions> </target> </pool>
要验证 vHBA 上可用 LUN 的详情,请输入以下命令:# virsh vol-list vhbapool_host3 Name Path ------------------------------------------------------------------------------ unit:0:0:0 /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0 unit:0:1:0 /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016844602198-lun-0
有关在 SCSI 设备中使用 NPIV vHBA 的详情,请参考 第 13.2.3.8 节 “使用 SCSI 设备使用基于 vHBA 的存储池”。
以下流程演示了在客户机中添加基于 SCSI LUN 的存储设备的示例。以上
<disk device='lun'>
客户机磁盘配置都可以使用这个方法附加。根据您的环境替换配置。
过程 13.13. 将基于 SCSI LUN 的存储附加到客户端
- 通过在新文件中写入 <disk> 元素来创建设备文件,并使用 XML 扩展(本例中为 sda.xml)保存此文件:
# cat sda.xml <disk type='volume' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source pool='vhbapool_host3' volume='unit:0:1:0'/> <target dev='sda' bus='scsi'/> <shareable/> </disk>
- 将 sda.xml 中创建的设备与您的虚拟客户机相关联(例如:
# virsh attach-device --config Guest1 ~/sda.xml
注意使用--config
选项运行 virsh attach-device 命令,需要 guest reboot 将设备永久添加到客户端。或者,可以使用--persistent
选项而不是--config
,它也可用于将设备热插到客户机中。
另外,可使用 virt-manager 在客户机中附加或配置基于 SCSI LUN 的存储。要使用 virt-manager 进行配置,请点击 按钮并添加带有所需参数的虚拟磁盘,或者从此窗口中更改现有 SCSI LUN 设备的设置。在 Red Hat Enterprise Linux 7.2 及更高版本中,SGIO 值也可以在 virt-manager 中配置:
图 13.21. 使用 virt-manager 配置 SCSI LUN 存储
硬件失败后重新连接到公开的 LUN
如果因为硬件失败(如主机总线适配器),与公开的光纤通道(FC)LUN 的连接会丢失,则客户机上公开的 LUN 也可能会继续显示为故障,即使硬件故障也是如此。要防止这种情况,请编辑
dev_loss_tmo
和 fast_io_fail_tmo
内核选项:
dev_loss_tmo
控制 SCSI 层在将 SCSI 设备标记为失败前等待的时间。要防止超时,建议将 选项设置为最大值,即2147483647
。fast_io_fail_tmo
控制 SCSI 层在失败的 SCSI 设备失败后等待多久,然后再返回 I/O。为确保内核不忽略dev_loss_tmo
,请将这个选项的值设置为小于dev_loss_tmo
的值的任意数值。
要修改
dev_loss_tmo
和 fast_io_fail
的值,请执行以下操作之一:
- 编辑
/etc/multipath.conf
文件,并在defaults
部分中设置值:defaults { ... fast_io_fail_tmo 20 dev_loss_tmo infinity }
- 在 FC 主机或远程端口级别设置
dev_loss_tmo
和fast_io_fail
,例如:# echo 20 > /sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/fast_io_fail_tmo # echo 2147483647 > /sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/dev_loss_tmo
要验证
dev_loss_tmo
和 fast_io_fail
的新值是否活跃,请使用以下命令:
# find /sys -name dev_loss_tmo -print -exec cat {} \;
如果正确设置了参数,输出将类似如下,使用适当的设备或设备而不是
pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0
:
# find /sys -name dev_loss_tmo -print -exec cat {} \;
...
/sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/dev_loss_tmo
2147483647
...