2017-08-10 34 views
-2

我打算为闪存可移动设备编写一个磁盘分区创建程序,主要由基于SCSI的I/O控制并通过LBA地址访问。在闪存存储分区表上如何确定磁盘几何形状(C/H/S)?

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

我在Linux中使用'parted'软件的'unit'命令来观察CHS单元和字节单元的卡参数。

下面是一个8GB的SD卡15122432个部门LBA的:

[email protected]:~ $ 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 

下面是一个4GB的SD卡7585792个部门LBA的:

(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 

从我的观察,磁盘几何值(C/H/S)在不同容量的SD卡上不同,几何值似乎与分区末尾的CHS地址相关联。它看起来像..

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

但是如何确定这些值?这些依赖于操作系统或文件系统吗?

+0

我投票结束这个问题作为题外话,因为这更适合Unix和Linux堆栈交换! –

回答

0

磁盘几何体位于机载设备控制器中,OS通过驱动程序从控制器请求它。请求/应答格式在此类设备的协议定义中指定。

很久以前,我写了PDP-11的IDE驱动程序,记住一些关于IDE/ATA协议的东西。我不知道现代SATA或SCSI设备的详细信息, ,因此只能回答有关ATA/IDE的信息。

一个IDE设备有特殊的操作“识别”(代码0xEC),驱动程序发送到设备。驱动程序将此opcode命令发送到控制端口,此后,当设备设置标志DRDY(设备就绪)读取512字节块时,包含答案。答案包含磁盘信息(制造商,序列号等)和几何图形。

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

我还可以说些什么:

  1. IDE设备可以接受 “上传几何”(代码0x91)。即驱动程序可以发送 请求到设备,并说“你将有X个扇区,Y个磁头,Z 柱面”,然后设备接受ahd使用这个“虚拟 几何”。
  2. 某些设备不知道它们的几何形状,并且在启动过程中,BIOS 必须向设备解释其具有的几何形状。否则,它 只是不起作用。
  3. 某些设备存储外部虚拟几何图形,由电脑 在1中指定,即使在重新上电后也要记住并使用它。
  4. 如果您设置了与默认值不同的“虚拟几何图形”,则某些 设备可能会在I/O错误后自动返回到默认几何图形。 因此,它会产生文件系统破坏。