文件系统寻址方式---扇区寻址

磁盘逻辑分布:


0 术语

  • cylinder:磁盘的柱面
  • head:磁盘的磁头,每张磁片有两个磁头
  • sector:磁盘扇区,这里指物理扇区,编号从 1 - 63,每条 track 的最大 sector 数 63
  • SPT(sector_per_track):每磁道上的 sector 数
  • HPC(head_per_cylinder):每个 cylinder 的 head 数量,这个数量应该是磁片数 * 2

    可以把磁盘想象成一个饼,Heads就是他的磁头,因为一个盘片两面都记录数据,所以它一定是一个偶数。Cylinder是它的宽度,柱面越多,磁盘越胖,同时越不划算。Sector是扇区,一个柱面的扇区数目是一定的。


1 寻址

寻址的目标是可以找到具体的某一个扇区,早期有IBM的CHS来寻址,现在为LBA寻址,我们分别了解一下。

  1.1CHS寻址:

CHS分别是柱面,盘片,扇区的英文首字母。顾名思义我们可以使用这三者来定位到唯一一个扇区上,从而进行定位。比如一个24bit的CHS地址,从低到高分别为 10bit cylinder,8bit head, 6bit sector。其寻址能力我们可以计算一下,24bit取2的24次幂为16G,每一个sector为512KB,一共为8GB的范围空间。那么如果磁盘大小超过8GB应该怎么寻址呢?对了进行扩充地址长度即可,所以后来对24bit的 CHS地址扩充到28bit 实现128GB寻址。

  1.2LBA寻址

LBA寻址是一种寻址方式,说到底也要根据上面的C H S 三个参数计算而来。

LBA = (cylinder * HPC + head) * SPT + sector - 1

2 地址转换

LBA 到 CHS 地址转换很简单,都是算出基本的三个量再来计算:

cylinder = LBA / (SPT * HPC)

head = (LBA / SPT) % HPC

sector = LBA % SPT + 1


3 实战

如何查看我的磁盘有Head sector cylinder分别是多少呢?

[root@100 /data]# fdisk -l /dev/sdb
Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfef4eac0

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      243201  1953512001   83  Linux

4 reference

http://www.mouseos.com/os/doc/lba_to_chs.html

https://en.wikipedia.org/wiki/Logical_block_addressing#CHS_conversion

https://community.emc.com/message/659692





猜你喜欢

转载自blog.csdn.net/mistakk/article/details/80002682