我将为闪存可移动设备编写一个磁盘分区创建程序,主要由基于 SCSI 的 I/O 控制并通过 LBA 地址访问。
作为参考,我正在研究由 Ubuntu 的磁盘实用程序分区和格式化的 SD 卡上的分区表。
我使用Linux中“parted”软件的“unit”命令来查看以CHS为单位和以字节为单位的卡的参数。
以下是LBA 15122432扇区的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
以下是 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)。他们有关系吗?
但这些值是如何确定的呢?这些依赖于操作系统或文件系统吗?
答案1
20 世纪 80 年代,个人电脑中的 BIOS 需要知道硬盘的几何形状才能正确操作。用户必须输入正确的柱面数、磁头数和扇区数。
在某个时刻(随着IDE接口?我对这个话题的记忆比较模糊),磁盘开始能够向计算机报告它们的几何形状。
到 20 世纪 90 年代初期到中期,磁盘固件自行管理磁盘几何结构。 BIOS 仍然需要有一个 C/H/S 值,因为它使用该值来计算磁盘大小。但 C/H/S 值的细分可能是任意的。因此,磁盘报告的 C/H/S 值与磁盘的实际几何形状无关,但符合允许的范围并给出了正确的总大小。
不适用柱面和磁头概念的存储介质同样会弥补一些导致正确总大小的值。
答案2
我可能已经解决了我的问题。我困惑的是分区程序在创建分区表时如何决定设备的几何形状。但经过一些实验,我发现闪存设备没有固定的几何形状(实际上它没有物理磁盘),分区程序可以自行决定头数和每磁道的扇区数,然后使用定制的几何形状。计算分区表中分区的起始CHS和结束CHS。无论几何形状如何,操作系统都可以通过给定的CHS信息找到分区的边界。