浅析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 思路: 应用二维数组的动态规划,到达某个方格的方法数目,为这个方格的上一个方格和左一个方格的方法数目和。 需要先初始化第一行和第一…

a元素使用

a元素 超链接元素,href属性中指定的网址如果不是以https或者http开头的,那么都是一个相对网址,他的绝对路径目录是当前网址的绝对路径的目录部分 href – hyper(超级的) reference(引用) – 跳转地址,他可以跳转如下几个位置&…

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。…

【华为OD机试】GPU算力【2023 B卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目解析 为了充分发挥GPU算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组, 数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。 假设GPU最多一次执行n个任务,一次执行耗时…

计算之魂思考题1.4赛跑问题

一、问题 假设由25名短跑者争夺比赛前三名,赛场上有5条赛道,一次可以有5名选手同时比赛。比赛不计时,只看相应名次。假设选手发挥稳定,也就是说如果约翰比张三跑得快,张三比凯莉跑得快,那么约翰一定比凯莉…

Three.js之几何体、高光材质、渲染器设置、gui

参考资料 阵列立方体和相机适配体验Threejs常见几何体简介…gui.js库(可视化改变三维场景) 知识点 注:基于Three.jsv0.155.0 长方体:oxGeometry球体:SphereGeometry圆柱:CylinderGeometry矩形平面:PlaneGeometry圆…

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 静态…

【类和对象】

class 类 类存在两种定义方式: 1、声明和定义全部放在类当中 2、声明放在.h文件中,定义放在.cpp文件中访问限定符 public(公有):类内与类外都可以访问 protected(保护):类内访问 …

高防服务器的防御机制

高防服务器的防御机制 易受到GJ的网站选择接入高防服务更安全,大家对于这个都清楚!但是对于高防服务如何实现防御来保障安全的,又了解多少呢?今天壹基比小源(贰伍壹叁壹叁壹贰玖捌)就来说说高防服务实现防御的常规方法一般有以下…