智能控制以及我使用过的任何其他命令行工具(如fdisk
、、、)对我的两个磁盘都报告相同的内容smartctl
:cat /sys/block/sd*/queue/hw_sector_size
cat /sys/block/sd*/queue/physical_block_size
Sector Size: 512 bytes logical/physical
这是默认的 Ubuntu 18.10(后来升级到 19.04)安装。但是,stat -f
两个磁盘上的命令都报告:
Block size: 4096 Fundamental block size: 4096
我的两个磁盘都是 SSD,据我所知SSD 磁盘需要 4K 的扇区大小。这样可以吗,还是我遗漏了什么?(=4K) 返回的信息是否stat
确保操作系统将总是发送 IO 到磁盘4K 的倍数这些区块将绝不跨越 4K 界限(IO 块总是会与 4K 对齐)?
请注意以下输出(sdb2
是我的根分区,sda
是我的/home
磁盘):
# fdisk -l /dev/sd?
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Disk model: SanDisk SDSSDH35
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdb: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Disk model: ADATA SU800NS38
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: xxxx....
Device Start End Sectors Size Type
/dev/sdb1 2048 1050623 1048576 512M EFI System
/dev/sdb2 1050624 500117503 499066880 238G Linux filesystem
# df / /home
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdb2 244568380 17799136 214276188 8% /
/dev/sda 479670976 129685112 325550152 29% /home
答案1
过去,512 字节扇区是磁盘的标准。系统过去每次只读取/写入一个扇区,这是旧硬盘所能达到的最好水平。
现在,现代驱动器如此密集,如此快速且如此智能,一次只能读取/写入一个扇区,这确实会降低总吞吐量。
诀窍是……如何加快总吞吐量,但仍保持与旧/标准磁盘子系统的兼容性?您创建一个由八个 512 字节物理扇区组成的 4096 块大小。4096 现在是磁盘的最小读/写传输,但它以兼容的 512 字节块形式传递给操作系统。
这意味着即使系统只需要一个 512 字节扇区的信息,驱动器也会读取八个 512 字节扇区来获取它。但是,如果系统需要接下来的七个扇区,它已经读取过了,因此不需要进行磁盘 I/O... 因此总吞吐量的速度会提高。
现代操作系统可以充分利用现代驱动器的原生 4K 块大小。
答案2
Linux 下的 SSD 磁盘默认的 512 字节物理扇区大小是否合适?
我的两个磁盘都是 SSD,据我所知,SSD 磁盘需要 4K 的扇区大小。这样可以吗,还是我遗漏了什么?
旧硬件和操作系统使用 512 字节扇区,自 2011 年起(几乎)所有存储硬件都有 4096(或更大) 字节扇区;但有些硬件支持为旧系统模拟 512 字节扇区。也有例外,三星 840 EVO SSD 有大小 2048 KB。
一个错误纠正码(ECC)是针对每个 512 字节块进行计算的,可以想象,ECC 数据也需要存储空间。毫无疑问,如果 ECC 算法保持不变,一个 4096 字节扇区所需的 ECC 信息比八个 512 字节块要少。最终,由于 ECC 数据开销减少,硬盘的总存储容量会增加。
从架构角度来看,使用 4K 扇区是有意义的,因为其他关键数据(如 x86 内存页面和许多文件系统集群)也采用 4 KB 大小。高级格式化允许更强大的 ECC 算法,这对于不断增加的容量来说很重要。控制器采用附加技术通过了解 NAND 闪存错误特性和工作负载行为,超越错误纠正。
高级格式化 (AF) 是用于将数据存储在硬盘驱动器 (HDD) 中的磁盘上的任何磁盘扇区格式,每个扇区超过 512、520 或 528 字节,例如高级格式化驱动器 (AFD) 的 4096、4112、4160 和 4224 字节 (4 KB) 扇区。扇区越大,就越能集成更强大的纠错算法,从而在更高的存储密度下保持数据完整性。
对于 SCSI (SAS) 磁盘,由于 SCSI T10 标准化,RAID 块大小大于 JBOD 块大小数据完整性字段以及存储在每个数据块上的逻辑坏块检查。SAS RAID 适配器支持基于 512 字节数据或 4K 字节数据的磁盘块。512 磁盘的 RAID 块大小为每扇区 528 字节,4K 磁盘的 RAID 块大小为每扇区 4224 字节。
因为您正在写入内存而不是旋转磁盘,所以物理扇区大小的影响小于确保您的分区与擦除块大小一致。即便如此,最好还是拥有最新的软件和硬件,并使用 4K 扇区大小。
英特尔建议使用更大的扇区大小 - “通过更改 SSD 物理扇区大小获得最佳性能“。
答案3
根据维基百科,“高级格式 (AF) 是用于在磁盘驱动器中存储每个扇区超过 512、520 或 528 字节的数据的任何磁盘扇区格式,例如高级格式驱动器 (AFD) 的 4096 字节扇区。”高级格式 (AF) 是一种磁盘格式,它本身使用 4,096 字节而不是 512 字节的扇区大小。为了保持与旧系统的兼容性,AF 磁盘模拟 512 字节的扇区大小。
我在两个 SSD 上运行(其中为字母)得到了和你相同的结果。我在两个 SSD 上运行和也得到了和你相同的结果。这两个 SSD 在安装时都会被操作系统自动识别,并且不需要任何配置,因此你得到的数据似乎是块大小和扇区大小的默认设置。sudo fdisk -l /dev/sdX
X
stat -f
smartctl