什么是 SCSI 预留和 SCSI 持久预留?
适用场景
- ONTAP 9
- 集群模式 Data ONTAP 8
- Data ONTAP 7 及更早版本
- FlexPod
问题和答案
什么是 SCSI 预留和 SCSI-3 持久预留?
- SCSI 预留用于控制对共享 SCSI 设备(例如磁盘或磁带驱动器)的访问。
- 启动程序会对 LUN 设置预留,以防止其他启动程序更改 LUN 。这与文件锁定概念类似。SCSI 预留始终由主机启动程序设置。理想情况下,同一个启动程序将在受影响的 LUN 上执行 SCSI 版本。
- SCSI 预留的机制在 SCSI 协议中指定。按照这些协议中的说明、预留用于控制对设备的访问。
- 最初的 SCSI 预留机制称为 SCSI 预留和发布(也称为 SCSI-2 预留)。在此机制下、启动程序将使用 SCSI reserve 命令设置预留。此预留可通过发出 SCSI 释放命令的所属主机或通过 SCSI 总线重置释放。因此,由于错误恢复而执行 SCSI 总线重置会导致预留释放。
- SCSI-3 主命令规范提供了一种现代的预留方法,称为持久性预留。永久保留增加了保留的能力、即使总线被重置为错误恢复也可以保留。这些设置使用命令中的 SCSI 持久性保留空间 out 和持久性保留空间进行设置。虽然 SPC-2 支持保留和释放保留以及持续保留,但这两种机制是互斥的。
- 如果在设备上放置了经典保留,则所有后续的持续保留请求都将失败,直到执行经典发行版为止。较新的 SPC-3 规范将传统的保留和发布机制弃之于永久保留。
- SCSI 协议规范提供了有关预留的更多详细信息。
SCSI-3 永久保留如何工作?
- SCSI-3 持久性预留支持多个节点访问设备,同时阻止对其他节点的访问。SCSI-3 永久保留还支持从主机到磁盘的多条路径、而 SCSI-2 预留不支持、并且只能与单个 LUN 路径配合使用。
- SCSI-3 永久保留使用注册和预留的概念。要参与的系统、请在 LUN 中注册密钥。每个系统都注册自己的密钥。之后、注册系统可以建立预留。使用此方法、阻止写入访问就像从设备删除注册一样简单。希望弹出另一个系统的系统可能会注册、清除或抢占其他已注册启动程序。这种方法有效地避免了脑分裂情况。
- 永久保留允许多个客户端(启动程序)通过跟踪多个启动程序到目标的关系(称为 I_T Nexuses )与目标进行通信。i_T Nexus 是 SCSI 目标内特定 SCSI 启动程序端口与指定 LUN 的 SCSI 目标端口之间的关系。
- 设置永久保留的第一步是注册保留密钥。预留密钥特定于每个 I_T 关系、并包含必要的信息、允许对 I_T Nexus 设备进行身份验证以控制预留。
永久保留有两个命令:
persistent reserve in
:由启动程序用于读取有关现有预留和注册的目标的信息。persistent reserve out
:由启动程序用于注册、设置和更改其预留以及中断用于错误恢复的预留。
SCSI 持久性预留命令还使用称为 service actions 的子命令来执行特定功能,例如保留和释放预留。以下是如何使用persistent reserve out
服务操作设置持久性预留的示例:
reservation conflict
当响应从目标发送到启动程序时、冲突的启动程序将需要重试reserve
该请求。主机启动程序的操作系统将按reserve
重试请求的时间间隔进行控制。冲突主机将继续从reservation conflict
目标获取状态、直至发生以下事件之一:
- 控制主机发送
release
命令。 - SCSI 总线设备重置是从任何启动程序发出的。
注:在目标设备的整个电源周期内, SCSI-3 持久预留可能会保留。此行为由启动程序在使用reserve
APTPL 标志将预留请求发送到目标时确定。
NetApp 存储系统使用 SCSI 预留的原因如下:
- 在 SAN 环境中、 NetApp 光纤连接存储系统将为启动程序请求的 LUN 设置并遵守经典版本 / 保留和永久保留。
- 在磁带备份环境中、可以将存储系统配置为使用 SCSI 预留空间在动态驱动器共享环境中保留磁带驱动器。
- 在 7.1.1 之前的 Data ONTAP 版本中、 SCSI 保留 / 发布预留由
options tape.persistent_reservations [on | off]
命令控制。 - Data ONTAP 7.1.1 及更高版本增加了设置 SCSI 保留 / 发布或 SCSI 永久保留的功能。
options tape.persistent_reservations
该命令已过时并已替换options tape.reservations [scsi | persistent]
为命令。
- 在 7.1.1 之前的 Data ONTAP 版本中、 SCSI 保留 / 发布预留由
- NetApp 高可用性( HA )存储控制器使用 SCSI 预留来控制磁盘访问。
- 对于使用硬件磁盘所有权的 HA 对、 SCSI 预留仅在 CF 接管期间使用。
- 对于使用软件磁盘所有权的 HA 对、无论系统是否处于 CF 接管中、都将使用 SCSI 预留。
- 在磁盘架的整个电源周期中,它们不会持续存在。因此,接管的节点将在磁盘架断电或驱动器重置时定期重新恢复预留。
- 虽然可以看到预留存在、但无法确定哪个节点设置预留。
- 使用 Sanown (软件磁盘所有权)的主动 - 主动集群合作伙伴使用 SCSI-3 永久保留来控制磁盘所有权。
- 无论 HA 对是否在 CF 接管中、都将使用这些预留。这些预留在重新引导后会持续存在。
- 拥有预留的节点完全控制磁盘、包括读取和写入功能。
- SCSI-3 永久保留每 30 秒重新进行一次。
解决主机上的 SCSI-2 预留冲突
lun reset
命令和命令target reset
如何影响 SCSI-2 预留?
- 使用基于主机的软件是清除 SCSI 预留的最佳方法。通常, LUN 映射到单个主机。但是,在主机集群中、相同的 LUN 通常映射到所有集群节点。
- 在某些情况下、主机可能需要清除未启动的保留。 这是通过使用
lun reset
和target reset
SCSI 命令来完成的。
存储系统在收到lun reset
或target reset
命令时如何响应?
- 收到重置时将记录以下消息:
Mon Jan 5 18:19:40 CST [storage1: scsitarget.ispfct.lunReset:notice]: FCP Target 5a: LUN 0 was Reset by the Initiator at Port Id: 0x74001f (WWPN 5001438002210a3e)
Mon Jan 5 18:18:01 CST [storage1: scsitarget.ispfct.targetReset:notice]: FCP Target 6a: Target was Reset by the Initiator at Port Id: 0x1d3600 (WWPN 500508b200b65d52)
发出target reset
命令时是否必须使用特定的 LUN ?
target reset
该命令可以由启动程序发送而无需指定特定 LUN 的地址、但lun reset
需要将寻址到特定 LUN 。
警告:目标重置将中止所有映射到发出此命令的启动程序的 LUN 上的所有命令。 它还会中止来自其他启动程序的命令到启动程序访问的 LUN ,并从启动程序启动中止。 |
示例:
SCSItarget reset or lun reset
命令是否会清除 SCSI-2 预留?
是
lun reset
或target reset
命令是否会影响 SCSI-3 持久保留?
否
是否可以lun reset
从对该 LUN 具有可见性的任何主机上的任何启动程序发出 SCSI 命令?
是但是lun reset
,需要将该命令寻址到特定 LUN 。
SCSIlun reset
是否会影响登录到特定 LUN 的任何其他启动程序?
是所有映射到特定 LUN 的启动程序都将收到LUN RESET
通知。
SCSI 目标重置命令是否会影响所有已登录到目标 LUN 的启动程序的所有 LUN ?
NetApp SCSI 目标上的目标重置仅重置映射到发送目标重置命令的启动程序的 LUN 。
与 SCSI 预留冲突相关的 SnapDrive 错误
- 尝试使用 SnapDrive 连接到 LUN 时,可能会出现以下错误:
Unable to locate a LUN to perform requested operation.
The LUN has SCSI reservation but has not been mapped.
- 在 Windows 主机上、在 Computer Management (计算机管理) > Disk Management (磁盘管理)中、磁盘也可以显示为
Unknown/Unreadable
。 - 可以通过清除 SCSI 预留空间来解决此问题。
建议使用基于主机的软件清除这些预留。
如果此操作不起作用,则可由 NetApp 全球支持的升级工程师在必要时从存储系统执行此操作。
解决 NetApp 存储系统中 SCSI-3 持久预留的冲突— 在尝试从 NetApp 存储系统中清除任何预留之前,请联系 NetApp 支持部门。