闪存存储分区 table 上的磁盘几何结构 (C/H/S) 是如何确定的?

How the disk geometry (C/H/S) was determined on the partition table of flash memory storage?

我打算为闪存可移动设备编写一个磁盘分区创建程序,主要由基于 SCSI 的 I/O 控制并使用 LBA 地址访问。

作为参考,我正在研究用Ubuntu的磁盘实用程序分区格式化的SD卡上的分区table。

我在Linux中使用了'parted'软件的'unit'命令,以CHS为单位,以字节为单位查看卡片的参数。

以下为8GB sd卡LBA 15122432扇区:

pi@raspberrypi:~ $ sudo parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit chs print
Model: Generic CRM01 SD Reader (scsi)
Disk /dev/sda: 1020,130,11
Sector size (logical/physical): 512B/512B
BIOS cylinder,head,sector geometry: 1020,239,62.  Each cylinder is 7587kB.
Partition Table: msdos
Disk Flags:

Number  Start  End          Type     File system  Flags
 1      0,1,0  1019,238,61  primary  ext3

(parted) unit b print
Model: Generic CRM01 SD Reader (scsi)
Disk /dev/sda: 7742685184B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End          Size         Type     File system  Flags
 1      31744B  7738552319B  7738520576B  primary  ext3

以下是LBA 7585792扇区的4GB sd卡:

(parted) unit chs print
Model: Generic CRM01 SD Reader (scsi)
Disk /dev/sda: 1019,71,29
Sector size (logical/physical): 512B/512B
BIOS cylinder,head,sector geometry: 1019,120,62.  Each cylinder is 3809kB.
Partition Table: msdos
Disk Flags:

Number  Start  End          Type     File system  Flags
 1      0,1,0  1018,119,61  primary  ext3

(parted) unit b print
Model: Generic CRM01 SD Reader (scsi)
Disk /dev/sda: 3883925504B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End          Size         Type     File system  Flags
 1      31744B  3881656319B  3881624576B  primary  ext3

根据我的观察,不同容量的SD卡上的磁盘几何值(C/H/S)是不同的,几何值似乎与分区末尾的结束CHS地址相关联。好像是..

具有 CHS 元组末尾分区的卡是 (c, h, s),其磁盘几何形状将是 (c + 1 / h + 1 / s + 1)。他们有关系吗?

但是这些值是如何确定的呢?这些依赖于 OS 还是文件系统?

磁盘几何位于 on-board 设备控制器中,OS 通过 driver 从控制器请求它。 Request/answer格式在此类设备的协议定义中指定。

很久以前我为PDP-11写了IDE driver,还记得一些关于IDE/ATA协议的事情。我不知道有关现代 SATA 或 SCSI 设备的详细信息, 所以只能回答ATA/IDE。

IDE 设备有特殊操作 "identify"(代码 0xEC),driver 发送到设备。 Driver 将此操作码命令发送到控制端口,此后,当设备设置标志 DRDY(设备就绪)时,读取 512 字节块,包含一个答案。答案包含磁盘信息(制造商、序列号等)和几何信息。

参见示例 this code,其中程序向 ATA 发送请求并解析答案,包含磁盘几何结构。

我可以补充的是:

  1. IDE 设备可以接受 "uploaded geometry"(代码 0x91)。 IE。 driver可以发送 请求设备,并说“你将有 X 个扇区,Y 个磁头,Z 汽缸”,然后设备接受 ahd 使用这个“虚拟 几何学”。
  2. 一些设备不知道它们的几何结构,并且在启动期间,BIOS 必须向设备解释它具有哪种几何形状。否则,它 只是行不通。
  3. 一些设备存储外部虚拟几何图形,由计算机指定 在 1 中,即使在重启后也要记住并使用它。
  4. 如果您设置 "virtual geometry",与默认设置不同,那么一些 设备可以在 I/O 错误后自动 return 到默认几何。 结果,它产生了文件系统破坏。