高级格式化 4K 扇区硬盘的介绍

简介: 硬盘行业正在经历一场变革。多年来,在存储密度大幅增长的同时,作为硬盘设计最主要方面之一的逻辑块格式化大小(也称为扇区)却始终没有变化。

背景

硬盘行业正在经历一场变革。多年来,在存储密度大幅增长的同时,作为硬盘设计最主要方面之一的逻辑块格式化大小(也称为扇区)却始终没有变化。2010 年左右,硬盘公司正在将扇区从传统大小 512 字节迁移到更大、更高效的 4096 字节(一般称为 4K 扇区),国际硬盘设备与材料协会(International Disk Drive Equipment and Materials Association,IDEMA)将之称为高级格式化。

关于高级格式化 4K 扇区硬盘(Advanced Format Disk)的维基百科说明


请注意时间点:

2009 年 12 月,经过与 IDEMA 的通力合作,提名高级格式化作为 4K 字节扇区标准的名称,并获准。同时,所有硬盘制造商承诺,自 2011 年 1 月开始,所发行的台式机和笔记本电脑产品的新型硬盘平台都采用高级格式化扇区格式。

Linux版本 2.6.31 或更高版本的内核支持高级格式化硬盘

Fdisk:GNU Fdisk 命令行实用程序可对硬盘进行分区。版本 1.2.3 和更高版本支持高级格式化硬盘。

Parted:GNU Parted 图形实用程序可对硬盘进行分区。版本 2.1 和更高版本支持高级格式化硬盘。


硬盘对 AFD 4K 支持

支持AFD分三类

4Kn (Native):完全支持 4K byte 扇区格式;

512e (Emulation):虽然先进格式化技术更有优势,但是现有的操作系统有的还不支持 4K byte 扇区格式,硬盘厂商为新出的 4K byte 扇区硬盘准备了一种 512e (Emulation) 的硬盘固件,利用固件来把传统的对于 512 byte 扇区的逻辑访问转换为对于 4K byte 扇区的物理访问;

512n:传统格式的硬盘,只支持512 byte的扇区;

physical_block_size logical_block_size
512n  512 512
512e  4096  512
4Kn 4096  4096
The physical_block_size is the minimal size of a block the drive is able to write in an atomic operation.
The logical_block_size is the smallest size the drive is able to write (cf. the linux kernel documentation).


看硬盘上的logo

512e的logo

image.png

4Kn的logo

image.png


在OS层检查

方法一:


cat /sys/class/block/sdX/queue/physical_block_size
cat /sys/class/block/sdX/queue/logical_block_size

方法二:

fdisk:
# fdisk -l /dev/sdX | grep 'Sector size'


方法三:


smartmontools since 5.41:
# smartctl -a /dev/sdX | grep 'Sector Sizes:'

方法四:

hdparm since 9.12:
# hdparm -I /dev/sdX | grep 'Sector size:'

方法五

[root@base-test-01 ~]# blockdev --getpbsz /dev/nvme0n1
[root@base-test-01 ~]# blockdev --getss /dev/nvme0n1


网上卖的盘

image.png


对缺少 4Kn的困惑

按照IDEMA的规定,从2011年1月起,所有的硬盘都应该是AFD,但现在我们公司目前没有 4Kn 的硬盘,在淘宝和京东上没有找到 4Kn 盘的(logo和说明都没有),512e的盘倒是有一些,见上面的图。亚马逊上的硬盘全部注明是 4Kn,有一些有logo,有的没有。


512e的坑

在512e的硬盘上扇区的read-modify-write (RMW)

在512e的硬盘上,当要向硬盘写的数据小于4K时,会先把4k的一个扇区的数据读出,修改相应的部分后在写入。这个过程称之为read-modify-write (RMW),也有人叫写放大。这三种硬盘格式只有512e可能会出现这个现象


image.png


逻辑扇区和物理扇区不对齐的现象

由于512e硬盘的本身的缺陷,可能会发生逻辑扇区和物理扇区不对齐的现象,如下图:

image.png

如果发生这种现象,会让一次读写变成两次,同时会增加read-modify-write (RMW),也有人叫写放大的现象,造成IO性能大幅下降。避免的方法很简单,对硬盘不分区。

如果随机的在 512e 硬盘上创建的分区,发生物理扇区和逻辑扇区不对齐的可能性高达7/8,因此我们要高度重视这个问题,由于物理扇区和逻辑扇区的读写转换是在硬盘的固件(firmware)里面进行转换的,在OS层并不知道,最好的解决办法是不使用 512e 的硬盘。


相关文章
|
存储 固态存储 Linux
BLOCK 层这么多参数都是什么意思?!
每个 request queue 会维护一个 struct queue_limits 结构来描述对应的块设备的硬件参数,这些参数描述了硬件存储单元的组织方式,会影响 block layer 的很多行为,其中部分参数在 `/sys/block//queue/` 下导出 ```c struct request_queue { struct queue_limits limits; ... } `
4407 1
|
JavaScript 前端开发 数据安全/隐私保护
Vue封装组件并发布到npm仓库
前言 使用Vue框架进行开发,组件封装是一个很常规的操作。一个封装好的组件可以在项目的任意地方使用,甚至我们可以直接从npm仓库下载别人封装好的组件来进行使用,比如iview、element-ui这一类的组件库。但是每个公司的业务场景可能不同,开发人员还是得必须封装自己得组件,如果换了一个项目,那么我们就只能复制组件代码到新的项目里面去了,这样稍显麻烦,其实我们可以将组建上传到npm仓库,要用的时候可以直接从npm安装使用。 总结下来有两点好处: 方面使用,任何项目无缝衔接。 可作为开源项目,积累经验。
877 0
Vue封装组件并发布到npm仓库
|
Linux
linux开机挂载镜像
【10月更文挑战第1天】在 Linux 系统中,开机挂载镜像通常涉及几个关键步骤,包括创建挂载点、编辑配置文件以及重新加载配置
514 0
|
存储 安全 C++
UEFI vs Legacy:深入理解两种启动模式的区别
UEFI vs Legacy:深入理解两种启动模式的区别
4777 0
|
Linux
Linux下rz/sz安装及使用方法 (不需要借助ftp传输工具)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/81606337   一、工具说明       在SecureCRT这样的ssh登录软件里, 通过在Linux界面里输入rz/sz命令来上传/下载文件. 对于某些linux版本, rz/sz默认没有安装所以需要手工安装。
2326 0
|
Unix C语言 C++
理解预编译头
所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。
1259 0
|
存储 固态存储 算法
SSD写放大的优化策略要有统一标准了吗?
写放大WAF是NAND-based SSD寿命消耗的关键参数,WAF越大,寿命消耗越快,越接近1,则寿命消耗越慢,也是最理想的情况。 所以,为了让SSD的WAF写放大系数接近1,这些年,各种方案也被提出来。