SCSI 中定义的provision

0、简写说明

LB:logic Block

LBA: Logic Block address

LU: Logic unit (对应一个逻辑存储实体)

VPD: Vital Product Data scsi 协议规定的scsi设备产品数据。

1、Provision的等级

两大等级:Full Provison和Logical Block Provision

1)Full Provision就是没有任何供给策略,所有的lb在设备上都有physical block对应。

2)Logical Block Provision 并不是所有的LB在设备上都有Physical block对应。

1.1 Logical Block Provision的两个等级

1)Resource Provison

设备上保证拥有足够的资源支持所有的LBA都映射到Physical block(虽然当前并不是所有的LBA都mapping到了Physical Block,有的LBA可能是unmap或者anchor了)

2)thin Provison

设备不能保证所有的LBA都有足够的资源映射,也就是说LB数量可以大于设备所有Physical Block支持的量。

1.2 Logical Block Provision上LBA对应的状态

1)mapping:LBA有对应的Physical Block对应(可以多个LBA对应一个Physical Block),也就是硬件为LB分配了物理资源

2)anchor:LBA有对应的phyical Block,当时此物理资源类似于暂留的意思。

3)unmapped:LBA没有对应的Physical Block。

2、scsi 命令

2.1 获取是否支持

2.1 .1 获取logical block provison 能力

通过inquiry 命令查询VPD page 0xb2(logical block provision页)。

4个字段:

1)LBPU(logical block provision unmap)

支持scsi命令unmap

2)LBPWS(logical block provision write same)

支持scsi命令write same(16)with unmap bit

3)LBPWS10(logical block provision write same 10)

支持scsi命令write same(10)with unmap bit

注:如果一个设备即支持write same 16 with unmap和write same 10 with unmap,且它支持write same 32,那么它一定得支持write same 32 with unmap

4)lbprz(logical block provision read zero)

从处于provison的logical block读出的数据为0(如果设置为xx1),或者预设值(此字段设置为010b)。

如果lbprz为000,那么设备不能保证从unmap block读取的数据。

5)ANC_SUP(anchor support)

支持anchor命令。

2.1.2 读设备容量的时候获取provison信息

read capacity 16 命令返回时刻,可以反馈当前logical block的provison状态

1)lbpme(logical block provision management enable )

当设置为1时刻,表示支持logical provision

2)lbprz(logical block provsion read zero)

为1表示,当前从provison 的lba读取的数据硬件保障为0或者特定值。

2.2 触发unmap的命令

2.2.1 unmap命令

对指定位置开始的一段lba启动unmap操作。

注:通过unmap命令我们不能期望后续read返回特定的数据值(例如0)。如果需要这样的话应该使用write same with

Unmapped字段。

2.2.2 write same 10 with unmap

write same 10 命令带unmap字段设置为1会将此字段unmap。

2.2.3 write same 16 with unmap

write same16 命令带unmap 字段为1会将此字段unmap。

注:对于write same 16 with unmap和write same 10 with unmap,如果命令数据区域写入的字段将导致unmap操作后,read去读的数据和协议定义不一致的时候,那么这个unmap操作无效,只会执行正常的write same动作。

2.3 获取设备provision status

通过Get LBA Status命令可以获取设备当前指定lba的provision状态(也可以获取所有的provison状态下的LBA)。

LBA status 为0(mapped),1(deallocated),2(anchored)

注:如果此设备(lu)是full provision,那么status为0.

你可能感兴趣的:(SCSI 中定义的provision)