我的 HDD 的物理扇区大小是多少?

dir*_*obs 5 linux io hardware hard-disk

我运行时有一个 1 TB 的硬盘:

# fdisk -l 
Run Code Online (Sandbox Code Playgroud)

我得到的其他细节包括:

Model: ATA HGST HTS721010A9 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Run Code Online (Sandbox Code Playgroud)

我认为逻辑扇区大小是操作系统的 I/O 扇区大小。但是,它显示物理扇区是4096B。我不确定两者之间有什么区别。为什么内核会使用 512B 扇区进行 I/O 而不是 4096B 扇区,也许是出于兼容性原因?这不会减慢 I/O 操作吗?

Joh*_*éen 4

是的,兼容性就是原因。硬盘扇区大小改为 4096,以更有效地利用磁盘区域。所有软件都无法在一夜之间转换为使用更大的扇区大小,因此 4k 磁盘仍然显示为具有 512 字节逻辑扇区。如果磁盘访问未与 4096 物理扇区大小对齐,它确实会减慢 I/O。如果您注意对齐,那么这实际上并不重要,因为无论如何,读取和写入请求都是一次完成多个扇区。请注意,逻辑扇区大小是由磁盘规定的,内核必须适应它,而不是相反。

  • 4k物理扇区被分为8个512字节的逻辑扇区。如果对磁盘的单次写入不是八个扇区的倍数,或者扇区未与 4k 物理扇区对齐,则驱动器必须执行读取-修改-写入循环,在该循环中读取整个 4k 扇区写入驱动器上的 RAM,用写入的数据修改更改的扇区,最后将整个 4 k 扇区写入驱动器。 (2认同)
  • 当内核请求单个 512 字节逻辑扇区时,驱动器将整个 4096 字节物理扇区读取到驱动器上的 RAM 中,并通过接口将请求的 512 字节块发送到主机。例如,如果内核向驱动器请求逻辑扇区(块)2(从0开始计数),则驱动器读取物理扇区0,并将字节1024到1535传输到主机。驱动器必须读取整个物理扇区,因为它是一次可以读取的最小数据量。还有一些驱动器的物理和逻辑扇区大小均为 4k。 (2认同)