浅析DIX与DIF(T10 PI)

文章目录

    • 概述
      • DIF与DIX
      • 端到端数据保护
    • DIF
      • DIF保护类型
    • SCSI设备支持DIF
      • Standard INQUIRY Data
      • Extended INQUIRY Data VPD page
        • SPT字段
        • GRD_CHK、APP_CHK、REF_CHK字段
      • READ CAPACITY(16)响应信息
    • SCSI命令请求
      • 读命令请求
      • 写命令请求
    • DIF盘格式化
    • 相关参考

概述

DIF与DIX

DIF(Data Integrity Field),也称T10 PI(T10 Protection Information),主要用来防止和检测静态数据破坏,包括数据通道上的硬件故障和软件bug导致的数据破坏,以及磁盘不可检测和纠正的数据错误等。DIF通过在主机适配器和存储设备之间增加额外的数据保护信息,确保传输过程中数据的完整性。

DIF设计用来对主机适配器到存储介质的数据进行保护,但是数据从主机应用下发到主机适配器的过程中,也有可能会出现错误,为了解决这个问题,出现了DIX(Data Integrity Extension)。DIX对应用下发的IO请求也加上了额外的保护信息,从而实现对应用到主机适配器之间数据的保护。

端到端数据保护

DIX保护了从主机应用到主机适配器HBA的数据完整性,T10 PI保护了从主机适配器HBA到存储介质的数据完整性,DIX和T10 PI一起组成了从主机应用到存储介质的端到端数据完整性保护。
在这里插入图片描述

DIF

通常磁盘会被格式化成512B(或4096B)的扇区,但在物理上,扇区长度要更大一些,多出来的部分可以用来存储扇区数据的保护信息。
在这里插入图片描述

  • Guard Tag:16位值,通常是存放扇区数据的CRC校验和;
  • Application Tag:16位值,由应用或者操作系统定义使用;
  • Reference Tag:32位值,通常记录写入扇区LBA地址的低32位,用于确保数据写入了正确的物理扇区。

DIF保护类型

T10 DIF定义的保护类型如下:

  • Type 0:Type 0表示不对传输过程中的数据进行完整性保护检查等动作;
  • Type 1:只会对Guard Tag和Reference Tag字段进行检查;
  • Type 2:很少使用;
  • Type 3:只对Guard Tag字段进行检查;

当设备被格式化成支持保护信息后,所有能正常访问设备的命令会依据CDB中携带的相关字段,包括RDPROTECT/WRPROTECT/VRPROTECT/ORPROTECT字段,来确定在传输数据过程中是否也会传输保护信息。
在这里插入图片描述
通常:

  • 对于写命令,支持DIF的主机适配器会生成8字节的保护信息,并将其追加到上层下发的512B扇区数据后,发送到存储设备;
  • 对于读命令,主机适配器从存储设备接受520B的数据,校验保护信息后,返回512B的扇区数据到上层。

SCSI设备支持DIF

Standard INQUIRY Data

标准INQUIRY数据中PROTECT字段指示设备是否支持PI。
在这里插入图片描述

Extended INQUIRY Data VPD page

Extended INQUIRY Data VPD page中SPT、GRD_CHK、APP_CHK、REF_CHK指示了设备支持的DIF保护类型。
在这里插入图片描述

SPT字段

SPT(Supported Protection Type)表示设备支持的保护类型,这个字段的含义取决于具体的设备类型,设备类型由PERIPHERAL DEVICE TYPE字段指示。如果PROTECT字段设置为0,说明设备不支持T10 PI,则SPT字段保留不使用;当PROTECT字段设置为1时,根据PERIPHERAL DEVICE TYPE字段决定SPT字段的含义,如下:

  • PERIPHERAL DEVICE TYPE字段设置为00h,SPT字段定义如下:
    在这里插入图片描述

  • PERIPHERAL DEVICE TYPE字段设置为01h,SPT字段定义如下:
    在这里插入图片描述

  • PERIPHERAL DEVICE TYPE字段值不为00h或者01h,SPT字段保留。

GRD_CHK、APP_CHK、REF_CHK字段

GRD_CHK\APP_CHK\REF_CHK字段指示了设备在传输数据是否会对保护信息中的对应字段进行检查。

  • GRD_CHK
    在这里插入图片描述

  • APP_CHK
    在这里插入图片描述

  • REF_CHK
    在这里插入图片描述

READ CAPACITY(16)响应信息

通过READ CAPACITY(16)命令,也可以查询设备的DIF配置信息。
在这里插入图片描述

其中,PT_TYPE和PROT_EN字段指示了设备支持的DIF保护类型。
在这里插入图片描述

SCSI命令请求

通过INQUIRY信息,可以知道设备支持T10 PI的情况,但设备是否会传输保护信息,还要SCSI读写命令指示。

读命令请求

这里以READ (10)命令说明,其它读命令字类似。READ (10)的CDB中包含了RDPROTECT字段,RDPROTECT字段指示了主机在下发读请求时,设备是否会传输保护信息以及检查。如果设备没有格式化成支持PI,主机下发命令请求时,RDPROTECT字段应当设置成全0,否则,设备会返回错误,表明这是一个不合法的命令请求。
在这里插入图片描述

写命令请求

这里以WRITE (10)命令说明,其它写命令字类似。WRITE (10)的CDB中包含了WRPROTECT字段,WRPROTECT字段指示了主机在下发读请求时,设备是否会检查保护信息。
在这里插入图片描述

DIF盘格式化

对于DIF/DIX的支持,可使用sg_utils工具对不同类型的DIF硬盘进行格式化。

  • 检查是否支持DIF:sg_vpd --page=ei --long /dev/sda | grep SPT
  • 格式化盘为DIF TYPE1:sg_format --format --fmtpinfo=2 /dev/sda
  • 格式化盘为DIF TYPE3:sg_format --format --fmtpinfo=3 --pfu=1 /dev/sda
  • 恢复成正常盘:sg_format -F -s 512 /dev/sda

相关参考

  • 《存储技术原理分析——基于Linux 2.6内核源码》
  • 《SCSI Block Commands – 5 (SBC-5)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/44791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习6】数据预处理(三)——处理类别数据(有序数据和标称数据)

处理类别数据 🌱简要理解处理类别数据的重要性☘️类别数据的分类☘️方便研究——用pandas创建包含多种特征的数据集🍀映射有序特征🍀标称特征标签编码🍀标称特征的独热编码🌱独热编码的优缺点 🌱简要理解…

ListNode相关

目录 2. 链表相关题目 2.1 合并两个有序链表(简单):递归 2.2 删除排序链表中的重复元素(简单):一次遍历 2.3 两链表相加(中等):递归 2.4 删除链表倒数第N个节点&…

MySQL 索引为什么使用 B+ 树,而不使用红黑树 / B 树 ?

面试官问 :索引为什么使用 B 树,而不使用 B 树,不使用红黑树呢 首先 B 树和 B 树 都是多叉搜索树,然后我们先来观察一下 B 树和 B 树的数据结构: B 树的数据结构实现 >> B 树的数据结构实现 >> 【B 树相…

2023国赛数学建模思路 - 案例:FPTree-频繁模式树算法

文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模式树算法&#xff0c…

代码随想录算法训练营day39 | 62. 不同路径,63. 不同路径 II

目录 62. 不同路径 63. 不同路径 II 62. 不同路径 类型:动态规划 难度:medium 思路: 应用二维数组的动态规划,到达某个方格的方法数目,为这个方格的上一个方格和左一个方格的方法数目和。 需要先初始化第一行和第一…

08.SpringBoot请求相应

文章目录 1 请求1.1 Postman1.2 简单参数1.2.1 原始方式1.2.2 SpringBoot方式1.2.3 参数名不一致 1.3 实体参数1.3.1 简单实体对象1.3.2 复杂实体对象 1.4 数组集合参数1.4.1 数组1.4.2 集合 1.5 日期参数1.6 JSON参数1.7 路径参数 2 响应2.1 ResponseBody注解2.2 统一响应结果…

GAN!生成对抗网络GAN全维度介绍与实战

目录 一、引言1.1 生成对抗网络简介1.2 应用领域概览1.3 GAN的重要性 二、理论基础2.1 生成对抗网络的工作原理2.1.1 生成器生成过程 2.1.2 判别器判别过程 2.1.3 训练过程训练代码示例 2.1.4 平衡与收敛 2.2 数学背景2.2.1 损失函数生成器损失判别器损失 2.2.2 优化方法优化代…

收集的一些比较好的git网址

1、民间故事 https://github.com/folkstory/lingqiu/blob/master/%E4%BC%A0%E8%AF%B4%E9%83%A8%E5%88%86/%E4%BA%BA%E7%89%A9%E4%BC%A0%E8%AF%B4/%E2%80%9C%E6%B5%B7%E5%BA%95%E6%8D%9E%E6%9C%88%E2%80%9D%E7%9A%84%E6%AD%A6%E4%B8%BE.md 2、童话故事 https://gutenberg.org/c…

12. Docker可视化工具

目录 1、前言 2、Docker UI 2.1、部署Docker UI 2.2、管理容器 3、Portainer 3.1、部署Portainer 3.2、管理容器 3.3、添加远程Docker 4、Shipyard 1、前言 Docker 提供了命令行工具来管理 Docker 的镜像和运行 Docker 的容器。我们也可以使用图形工具来管理 Docker。…

C# 观察者模式

一、概述 观察者模式是一种常用的设计模式,它属于行为型模式。在C#中,观察者模式通过定义一种一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式可以实现松耦合,…

Ribbon负载均衡

Ribbon与Eureka的关系 Eureka的服务拉取与负载均衡都是由Ribbon来实现的。 当服务发送http://userservice/user/xxxhtt://userservice/user/xxx请求时,是无法到达userservice服务的,会通过Ribbon会把这个请求拦截下来,通过Eureka-server转换…

常见排序集锦-C语言实现数据结构

目录 排序的概念 常见排序集锦 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 hoare 挖坑法 前后指针法 非递归 7.归并排序 非递归 排序实现接口 算法复杂度与稳定性分析 排序的概念 排序 :所谓排序,就是使一串记录&#…

排名前 6 位的数学编程语言

0 说明 任何对数学感兴趣或计划学习数学的人,都应该至少对编程语言有一定的流利程度。您不仅会更有就业能力,还可以更深入地理解和探索数学。那么你应该学习什么语言呢? 1.python 对于任何正在学习数学的人来说,Python都是一门很棒…

【Linux从入门到精通】动静态库的原理与制作详解

本篇文章主要是围绕动静态库的原理与制作进行展开讲解的。其中涉及到了inode的概念引入和软硬连接的讲解。会结合实际操作对这些抽象的概念进行解释,希望会对你有所帮助。 文章目录 一、inode 概念 二、软硬链接 2、1 软连接 2、2 硬链接 三、动静态库概念 3、1 静态…

编织梦想:SpringBoot AOP 教程与自定义日志切面完整实战

什么是 AOP AOP 是指通过预编译方式和运行期动态代理的方式,在不修改源代码的情况下对程序进行功能增强的一种技术。AOP 不是面向对象编程(OOP)的替代品,而是 OOP 的补充和扩展。它是一个新的维度,用来表达横切问题&a…

常见前端基础面试题(HTML,CSS,JS)(三)

JS 中如何进行数据类型的转换? 类型转换可以分为两种,隐性转换和显性转换 显性转换 主要分为三大类:数值类型、字符串类型、布尔类型 三大类的原始类型值的转换规则我就不一一列举了 数值类型(引用类型转换) Numbe…

设计模式之状态模式(State)的C++实现

1、状态模式的提出 在组件功能开发过程中,某些对象的状态经常面临变化,不同的状态,其对象的操作行为不同。比如根据状态写的if else条件情况,且这种条件变化是经常变化的,这样的代码不易维护。可以使用状态模式解决这…

如何在window下cmd窗口执行linux指令?

1.Git:https://git-scm.com/downloads(官网地址) 2.根据自己的实际路径,添加两个环境变量 3.重启电脑

删除有序链表中重复的元素-II(链表)

乌!蒙!山!连!着!山!外!山! 题目: 思路: 双指针,slow和fast,并且增加标记flag初始为1。 如果slow指向节点值等于fast指向节点值&…

Servlet 初步学习

文章目录 Servlet1 简介2 快速入门3 执行流程4 生命周期5 方法介绍6 体系结构7 urlPattern配置8 XML配置 Servlet 1 简介 Servlet是JavaWeb最为核心的内容,它是Java提供的一门 动态 web资源开发技术。 使用Servlet就可以实现,根据不同的登录用户在页面…