跳转到主内容

什么是 SCSI 预留和 SCSI 持久预留?

Views:
1,590
Visibility:
Public
Votes:
20
Category:
clustered-data-ontap-8
Specialty:
san
Last Updated:

适用场景

  • 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 Release命令或通过SCSI总线重置来释放。因此、由于错误恢复而执行的SCSI总线重置将对要释放的预留执行发生原因。
  • SCSI-3主命令规范提供了一种现代的预留方法、称为永久性预留。永久性预留可以使预留持久存在、即使总线已重置以进行错误恢复也是如此。这些值可通过SCSI 持久预留出和持久预留入命令来设置。尽管SPC-2既支持预留预留预留预留、又支持释放和持久预留、但这两种机制是互斥的。
  • 如果在设备上放置了经典预留、则在执行经典版本之前、所有后续的永久性预留请求都将失败。较新的SPC-3规范弃用了传统的预留和释放机制、而改用永久性预留。
  • SCSI 协议 规范 提供了有关预留的更多详细信息。

SCSI-3持久预留如何工作?

  • SCSI-3持久预留支持多个节点访问一个设备、同时阻止对其他节点的访问。SCSI-3永久性预留也支持从主机到磁盘的多个路径、而SCSI-2预留则不支持、并且只能使用单个LUN路径。
  • SCSI-3永久性预留使用注册和预留的概念。对于参与的系统、请向LUN注册密钥。每个系统都注册自己的密钥。之后、注册的系统可以建立预留。使用此方法、阻止写入访问就像从设备中删除注册一样简单。希望弹出另一个系统的系统可能会注册、清除或抢占已注册的其他启动程序。这种方法可以有效地避免脑裂情况。
  • 永久性预留允许多个客户端(启动程序)通过跟踪多个启动程序到目标的关系(称为I_T nexuses)与目标进行通信。I_T Nexus是指SCSI目标中给定LUN的特定SCSI启动程序端口和SCSI目标端口之间的关系。 
  • 设置永久性预留的第一步是注册预留密钥。预留密钥特定于每个I_T Nexus、它包含必要的信息、用于对I_T Nexus设备进行身份验证、以控制预留。

永久性预留有两个命令:

  • persistent reserve in:由启动程序用来读取有关目标的现有预留和注册信息。
  • persistent reserve out:由启动程序用于注册、设置和更改其预留以及中断预留以进行错误恢复。

SCSI永久性预留命令还可以使用称为服务操作的子命令来执行特定功能、例如保留和释放预留。以下示例说明了如何使用 persistent reserve out 服务操作设置持久预留:

 

SCSI预留和SCSI永久性预留

 

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] 命令。 
  • NetApp高可用性(High Availability、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 resettarget 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发出的命令。

 

示例:

解决主机中的SCSI-2预留冲突

 

SCSItarget reset or lun reset 命令是否会清除SCSI-2预留?
    是

lun reset target reset 命令是否会影响SCSI-3持久预留? 
    否

是否可以 lun reset  从可查看此LUN的任何主机上的任何启动程序发出SCSI命令?
    是但是、该 lun reset 命令需要发送到特定的LUN。

SCSI是否会 lun reset 影响登录到特定LUN的任何其他启动程序? 
    是映射到特定LUN的所有启动程序都将收到 LUN RESET 通知。 

SCSI target reset命令是否会影响登录到 目标LUN的所有启动程序中的所有LUN?
    NetApp SCSI目标上的目标重置仅会重置映射到发送target reset命令的启动程序的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主机上,在 “计算机管理”>“磁盘管理”中,磁盘也可以显示为 Unknown/Unreadable
  • 可以通过清除SCSI预留来解决此问题。

 

 

建议使用基于主机的软件清除这些预留。

如果不起作用、可由 NetApp 全球支持部门的升级工程师(如有必要、可从存储系统)完成。

解决 NetApp 存储系统中SCSI-3持久预留的冲突- 在尝试清除NetApp 存储系统中的任何预留之前、请联系NetApp支持部门。

 

NetApp provides no representations or warranties regarding the accuracy or reliability or serviceability of any information or recommendations provided in this publication or with respect to any results that may be obtained by the use of the information or observance of any recommendations provided herein. The information in this document is distributed AS IS and the use of this information or the implementation of any recommendations or techniques herein is a customer's responsibility and depends on the customer's ability to evaluate and integrate them into the customer's operational environment. This document and the information contained herein may be used solely in connection with the NetApp products discussed in this document.