我将为闪存可移动设备编写一个磁盘分区创建程序,主要由基于 SCSI 的 I/O 控制并通过 LBA 地址访问。
作为引用,我正在研究由 Ubuntu 的磁盘实用程序分区和格式化的 SD 卡上的分区表。
我使用Linux中“parted”软件的“unit”命令来查看卡的参数,以CHS为单位,以字节为单位。
以下是针对具有 15122432 个 LBA 扇区的 8GB SD 卡:
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
以下是针对具有 7585792 个 LBA 扇区的 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)。它们有关系吗?
但是这些值是如何确定的呢?这些依赖于操作系统或文件系统吗?
最佳答案
磁盘几何结构位于板载设备 Controller 中,操作系统通过驱动程序向 Controller 请求它。请求/应答格式在此类设备的协议(protocol)定义中指定。
很久以前我写过PDP-11的IDE驱动,还记得一些关于IDE/ATA协议(protocol)的事情。我不知道有关现代 SATA 或 SCSI 设备的详细信息, 所以只能回答关于 ATA/IDE 的问题。
IDE 设备具有特殊操作“identify”(代码 0xEC),驱动程序将其发送到设备。驱动程序将此操作码命令发送到控制端口,此后,当设备设置标志 DRDY(设备就绪)时,读取 512 字节 block ,包含答案。答案包含磁盘信息(制造商、序列号等)和几何信息。
例如参见 this code ,其中程序向 ATA 发送请求并解析答案,其中包含磁盘几何结构。
我还可以说的是:
- IDE 设备可以接受“上传的几何图形”(代码 0x91)。 IE。司机可以发送 向设备发出请求,并说“您将有 X 扇区、Y 头、Z 气缸”,此后设备接受并使用此“虚拟 几何”。
- 某些设备不知道其几何结构,并且在启动过程中,BIOS 必须向设备解释它具有哪种几何形状。否则,它 只是行不通。
- 某些设备存储由计算机指定的外部虚拟几何图形 在 1 ,即使在重新启动后也请记住并使用它。
- 如果您设置了一个与默认不同的“虚拟几何体”,那么一些 I/O 错误后设备可以自动返回默认几何形状。 结果,它会破坏文件系统。
关于linux - 如何根据闪存存储的分区表确定磁盘几何结构(C/H/S)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45603898/