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 的存储附加到客户端

  1. 通过在新文件中写入 <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>
  2. sda.xml 中创建的设备与您的虚拟客户机相关联(例如:
    # virsh attach-device --config Guest1 ~/sda.xml
    注意
    使用 --config 选项运行 virsh attach-device 命令,需要 guest reboot 将设备永久添加到客户端。或者,可以使用 --persistent 选项而不是 --config,它也可用于将设备热插到客户机中。
另外,可使用 virt-manager 在客户机中附加或配置基于 SCSI LUN 的存储。要使用 virt-manager 进行配置,请点击 Add Hardware 按钮并添加带有所需参数的虚拟磁盘,或者从此窗口中更改现有 SCSI LUN 设备的设置。在 Red Hat Enterprise Linux 7.2 及更高版本中,SGIO 值也可以在 virt-manager 中配置:

图 13.21. 使用 virt-manager 配置 SCSI LUN 存储

使用 virt-manager 配置 SCSI LUN 存储

硬件失败后重新连接到公开的 LUN

如果因为硬件失败(如主机总线适配器),与公开的光纤通道(FC)LUN 的连接会丢失,则客户机上公开的 LUN 也可能会继续显示为故障,即使硬件故障也是如此。要防止这种情况,请编辑 dev_loss_tmofast_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_tmofast_io_fail 的值,请执行以下操作之一:
  • 编辑 /etc/multipath.conf 文件,并在 defaults 部分中设置值:
    defaults {
    ...
    fast_io_fail_tmo     20
    dev_loss_tmo    infinity
    }
    
  • 在 FC 主机或远程端口级别设置 dev_loss_tmofast_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_tmofast_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
...
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.