What、Why、Where、How、How much
1. What
持久化预留Persistent Reservations,SCSI命令,允许应用对共享的SCSI设备实现访问控制,类似文件锁。
相关概念
1)SCSI , The Small Computer System Interface, is a set of ANSI standards that define physical interfaces, transport protocols and command sets for communication and data transfer between computers and peripheral devices.
SCSI是一个ANSI标准集合,定义了计算机和外部设备之间用于通信和数据传输的的物理接口、传输协议和命令集。
2) iSCSI is a protocol that describes how SCSI commands are transported over a TCP/IP connection.
iSCSI是一个协议,描述了SCSI命令是如何通过TPC/IP连接进行传输。
3)initiator, 启动器,客户端,
3)Target,目标, 服务端
4)Linux-IO target LIO target, 是Linux内核中一个开源的SCSI Target实现框架,用于在Linux系统上通过软件模拟SCSI存储设备(如磁盘阵列),并通过多种网络协议(如iSCSI、Fibre Channel等)将存储资源提供给客户端(Initiator)。其核心目标是以低成本实现企业级存储功能,无需专用硬件设备。
5)I_T nexus defines a unique relationship (“a binding”) between an initiator and a target.
参考:
Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式 Debian9.5下实现
others
预留密钥是一串16进制的ASCII码,最长8个字节。
预留类型
永久预留一共6种类型,由1、3、5、6、7、8数字表示。包括两种操作类型和三种客户类型,
操作类型包括写排它和所有访问排他,
客户类型包括所有客户端、已注册客户端和所属客户端。
1-> write exclusive,单个预留持有者,只有预留持有者允许修改设备状态,e.g. write, 其他I_T nexuses允许触发不修改设备状态的命令,不管是注册的还是没有注册的。
3-> exclusive access, 单个预留持有者,只有预留持有者允许访问设备,其他I_T nexuses不允许,不管是注册的还是没有注册的。
5-> write exclusive - registrants only,单个预留持有者,所有注册的I_T nexuses对设备有所有的访问权限,未注册的I_T nexuses可以触发不修改设备状态的命令,类似于write exclusive。
6-> exclusive access - registrants only,单个预留持有者,所有注册的I_T nexuses都对设备有所有访问权限,没注册的I_T nexuses的访问权限类似于exclusive access.
7-> write exclusive - all registrants,所有注册的I_T nexuses都是预留持有者,对设备有所有的访问权限,未注册的I_T nexuses的访问权限同write exclusive
8-> exclusive access - all registrants. 所有注册的I_T nexuses都是预留持有者,对设备有所有访问权限,未注册的I_T nexuses的访问权限同exclusive access.
all registrant和registrants only的区别:谁是预留持有者,all registrants是把所有注册的I_T nexus认为是预留持有者,但registrants only只有下发了预留命令的I_T nexus是预留持有者。
预留命令
持久化预留涉及到查询和修改两种命令:1. PERSISTENT RESERVE IN 2. PERSISTENT RESERVE OUT。每种命令有多种服务。
- PERSISTENT RESERVE IN: 用于启动器从target获取预留信息。有四种服务
(1) read keys: 读取所有注册的key;
(2) read reservations: 读取所有预留;
(3) report capabilities: 获取能力信息;
(4) read full status: 读取所有注册和持久化预留的完整信息; - PERSISTENT RESERVE OUT: 用于启动器注册key, 预留lun, 抢占或停止已存在的预留,或者是其他调整SCSI设备预留状态的操作。有8种服务:
(1) REGISTER: 注册或者取消注册设备的key;
(2) RESERVE: 在LUN上创建一个持久化预留;
(3) RELEASE: 释放LUN上一个持久化预留;
(4) CLEAR: 移除LUN上所有I_T nexus的注册和持久化预留;
(5) PREEMPT: 抢占LUN上已存在的持久化预留,也会同时移除LUN上I_T nexus的注册;
(6) PREEMPT AND ABORT: 抢占已存在的预留,移除注册,终止所有被抢占的I_T nexus的未完成的任务。
(7) REGISTER AND IGNORE EXISTING KEY: 注册或者取消注册设备上的key, 可以被I_T nexus用来改变key.
(8) REGISTER AND MOVE: 对设备注册一个预留,把预留权限从原先的IT_nexus移到当前新触发注册预留的IT nexus上来。
RESERVATION KEY: 预留key, 64bit长度。用来标识一个I_T nexus(这句话不准确)。
注册流程
参考
- https://www.dell.com/community/zh/conversations/%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E5%92%8C%E4%BF%9D%E6%8A%A4-%E8%B5%84%E6%96%99%E6%96%87%E6%A1%A3/scsi%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E5%8E%9F%E7%90%86%E4%BB%8B%E7%BB%8D/647f2ebaf4ccf8a8de476b3c