【问题标题】:When does a device get a 512B request from the filesystem?设备何时从文件系统收到 512B 请求?
【发布时间】:2016-10-03 22:52:36
【问题描述】:

我是 linux 新手,并且一直在做一些阅读。但是我对以下内容有点困惑。设备能否接收单个 512B 扇区的请求?在什么条件下会发生这种情况?据我了解,虽然扇区大小定义了设备可以寻址的最小单位,但 FS 通常具有 4K 的块大小(FS 的最小访问单位)。所以这意味着大多数(所有)命令都由 FS 在 4k 粒度上处理。

  1. 文件系统能否从应用程序流量中生成

  2. 是否有一些文件系统元数据会导致这种流量?

  3. 如果我们将分区对齐到 4k 边界,设备是否总是会在 4k 边界上对齐命令?

【问题讨论】:

  • “设备能否接收单个 512B 扇区的请求?” -- 取决于“设备”。自 1980 年代以来,典型的大容量存储设备的物理块(又名扇区)大小为 512 字节。随着 HDD 容量膨胀到 TB 范围以及为了 SSD 兼容性,扇区大小已经发展到 4KB。 "FS 通常有一个 4K 的块大小" -- 这是一个逻辑块大小。文件系统是更高层,可以处理具有不同物理块大小的块设备的设备驱动程序。 “traffic” -- 你的意思是“requests”吗?
  • 是的,我指的是对设备的请求。虽然 4KB 越来越流行,但它仍然不是大多数 SSD 的事实上的扇区大小(它们支持 512e 格式)......所以我的问题是文件系统可以向设备发出请求,它只是一个 512B读/写。在什么情况下会发生这种情况?给定 FS 的逻辑块大小为 4K,对具有 512e 格式的设备的所有请求也是 n*512 其中 n 是 8 的倍数(所以所有 4K 对齐的命令?)。谢谢!
  • "文件系统能否向设备发出请求,该设备只是单512B读/写" -- HDD、SDD和闪存驱动器等块设备使用ATAPI 接口。传输的基本单位是一个 512 字节的扇区。所以答案是“是”。 “在什么情况下会发生这种情况?” -- 您可以查看 Linux 内核源代码中的实际文件系统代码,例如lxr.free-electrons.com/source/fs 512 字节/扇区设备的标准 ATAPI 对多扇区 I/O 没有“4K 对齐”的要求。
  • 谢谢。这很有帮助。如果我有任何问题,我会回复。

标签: linux filesystems block linux-device-driver


【解决方案1】:

发生这种情况的原因有很多(假设您的磁盘公开了 512 字节的逻辑扇区大小),因为您发送了一个在文件系统之外正确对齐的 512 字节的直接请求:

在一般使用过程中可能发生这种情况的一些情况:

  • 读取旧式 MBR 分区表(适合磁盘开头的 512 字节)
  • 重写引导加载程序或因为你告诉它发生
  • 尝试从 512 字节扇区的损坏磁盘中读取最小扇区

【讨论】:

    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多