默认的512字节物理扇区大小是否适合Linux下的SSD磁盘?


11

GSmartControl和其他任何命令行工具(如fdisksmartctlcat /sys/block/sd*/queue/hw_sector_sizecat /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,而AFAIK SSD磁盘的扇区大小为4K。这样可以吗?stat(= 4K)返回的信息是否可以确保OS 始终4K的倍数将IO发送到磁盘,并且这些块永远不会越过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

是。它确实包含有用的信息。但是,我没有找到有关该问题的权威答案:stat(4K)返回的信息是否确保OS将始终以4K的倍数将IO发送到磁盘,并且这些块永远不会越过4K边界(IO块将始终与4K对齐)?
FedonKadifeli '19

我不知道什么是“ stat(4K)”。但是大多数现代OS都知道如何处理本地4K I / O传输。不,这并不意味着除非分区正确对齐,否则块永远不会越过磁盘上的4K边界。使用fdisk -l检查对准问题。而且由于其物理结构,SSD的工作显然有所不同,但我不是该领域的专家。
heynnema '19

Answers:


7

在过去,磁盘是512字节的扇区。该系统过去一次只能读取/写入一个扇区,这是旧硬盘驱动器可以做到的最佳状态。

现在,由于现代驱动器如此密集,如此之快,如此智能,因此读/写扇区实际上一次仅使一个扇区减慢了总吞吐量。

诀窍是...如何提高总吞吐量,但仍保持与旧/标准磁盘子系统的兼容性?您创建由八个512字节物理扇区组成的4096块大小。现在,4096是磁盘间最小的读/写传输,但是它以兼容的512字节卡盘形式移交给操作系统。

这意味着,即使系统仅需要一个512字节的信息扇区,驱动器也会读取八个512字节的扇区来获取信息。但是,如果系统需要接下来的七个扇区,则已经读取了它们,因此无需进行磁盘I / O操作,因此可以提高总吞吐量。

现代操作系统可以充分利用现代驱动器的本机4K块大小。


+1但4096/512 = 8,所以我认为在4096 b的一个物理扇区中应该有8个(逻辑)512 b扇区。我parted过去常常显示逻辑扇区大小和物理扇区大小。
sudodus

@sudodus好抓住。编辑已执行。
heynnema '19

这就是为什么将分区对准4k边界很重要,否则每4k块加载/存储实际上都涉及两个硬件扇区。(分区内的文件系统通常使用与分区开头对齐的4k块)。一些格式化工具将第一个分区按1MiB对齐,除了分区表外,整个MiB都未使用。现代驱动器确实报告其物理扇区大小为4k,而逻辑扇区大小仍为512B。
彼得·科德斯

@PeterCordes,不仅引导扇区和分区表(在前512个字节中)存储在第一个Mibibyte中。在MSDOS分区表中,grub将其他代码放入第一个Mibibyte中,以便以BIOS模式启动。(在GPT中,grub需要一个带有bios_grub标志的小分区,以便该代码在BIOS模式下启动)。
sudodus

4

根据Wikipedia的说法,“高级格式(AF)是用于在磁盘驱动器中存储数据的任何磁盘扇区格式,每个扇区超过512、520或528字节,例如高级格式驱动器(AFD)的4096字节扇区。” 高级格式(AF)是一种磁盘格式,其本机使用4,096字节而不是512字节的扇区大小。为了保持与旧系统的兼容性,AF磁盘模拟的扇区大小为512字节。

通过在两个SSD上运行stat -f,我得到了与您相同的结果smartctl。两个SSD在安装时都被操作系统自动识别,并且需要零配置,因此看来您获得的数据是块大小和扇区大小的默认设置。


@heynnema对于“ 4096字节的扇区”,我无能为力,因为它是从Wikipedia复制而来的,所以我必须保留它与Wikipedia中相同的名称。
卡雷尔

2
@heynnema:物理尺寸要大得多。SSD由NAND闪存构建,“其物理上被划分为所谓的“擦除块”。它们可以更大,绝对可以达到4MB。”
MSalters

1

默认的512字节物理扇区大小是否适合Linux下的SSD磁盘?

我的两个磁盘都是SSD,而AFAIK SSD磁盘的扇区大小为4K。这样可以吗?

自2011年以来,旧的硬件和操作系统使用512字节的扇区,几乎所有存储硬件都具有4096(或更大)的字节扇区。但是某些硬件支持旧系统的512字节扇区的仿真。除了例外,Samsung 840 EVO SSD的块大小为2048 KB

为每个512字节块计算一个纠错码(ECC),并且您可以想象,ECC数据也需要存储空间。不用说,如果ECC算法保持不变,那么一个4096字节的扇区所需的ECC信息比八个512字节的块要少。最后,由于更少的ECC数据开销,硬盘的总存储容量增加了。

从架构的角度来看,使用4K扇区是有意义的,因为其他关键指标(例如x86内存页和许多文件系统群集)也使用4 KB大小。高级格式允许使用更强大的ECC算法,鉴于容量不断增加,这一点非常重要。控制器通过了解NAND闪存错误特性和工作负载行为,采用了纠错之外的其他技术

高级格式(AF)是用于将数据存储在硬盘驱动器(HDD)中的磁盘上的任何磁盘扇区格式,每个扇区超过512、520或528字节,例如4096、4112、4160和4224字节( 4 KB)扇区的高级格式驱动器(AFD)。更大的扇区可以集成更强大的纠错算法,以在更高的存储密度下保持数据完整性。

对于SCSI(SAS)磁盘,由于SCSI T10标准化数据完整性字段以及与数据一起存储在每个块上的逻辑坏块检查,因此RAID块大小大于JBOD块大小。SAS RAID适配器支持基于512字节数据或4K字节数据的磁盘块。512个磁盘的RAID块大小为每个扇区528字节,而4K磁盘的RAID块大小为每个扇区4224字节。

因为要写入内存而不是旋转磁盘,所以物理扇区大小的影响要小于确保分区与擦除块大小对齐的影响。即使如此,最好还是拥有最新的软件和硬件,并使用4K扇区大小。

英特尔建议使用更大的扇区大小-“ 通过更改SSD物理扇区大小来获得最佳性能 ”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.