闪存存储分区 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 发送请求并解析答案,包含磁盘几何结构。
我可以补充的是:
- IDE 设备可以接受 "uploaded geometry"(代码 0x91)。 IE。 driver可以发送
请求设备,并说“你将有 X 个扇区,Y 个磁头,Z
汽缸”,然后设备接受 ahd 使用这个“虚拟
几何学”。
- 一些设备不知道它们的几何结构,并且在启动期间,BIOS
必须向设备解释它具有哪种几何形状。否则,它
只是行不通。
- 一些设备存储外部虚拟几何图形,由计算机指定
在 1 中,即使在重启后也要记住并使用它。
- 如果您设置 "virtual geometry",与默认设置不同,那么一些
设备可以在 I/O 错误后自动 return 到默认几何。
结果,它产生了文件系统破坏。
我打算为闪存可移动设备编写一个磁盘分区创建程序,主要由基于 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 发送请求并解析答案,包含磁盘几何结构。
我可以补充的是:
- IDE 设备可以接受 "uploaded geometry"(代码 0x91)。 IE。 driver可以发送 请求设备,并说“你将有 X 个扇区,Y 个磁头,Z 汽缸”,然后设备接受 ahd 使用这个“虚拟 几何学”。
- 一些设备不知道它们的几何结构,并且在启动期间,BIOS 必须向设备解释它具有哪种几何形状。否则,它 只是行不通。
- 一些设备存储外部虚拟几何图形,由计算机指定 在 1 中,即使在重启后也要记住并使用它。
- 如果您设置 "virtual geometry",与默认设置不同,那么一些 设备可以在 I/O 错误后自动 return 到默认几何。 结果,它产生了文件系统破坏。