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.