几个文件系统概念:geometry、sector 、Block

时间:2021-03-16 05:13:20
一:geometry应该翻译为几何数据,其实就是指的CHS(Cylinder、Head、Sector/Track) 。C-Cylinder柱面数表示硬盘每面盘片上有几条磁道,编号从0开始,最大为1023,表示有1024个磁道(用10个二进制位存储);H-Head磁头数表示硬盘总共有几个磁头,也就是几面盘片,编号从0开始,最大为255,表示有256个磁头(用8个二进制位存储);S-Sector/Track扇区数表示每条磁道上有几个扇区,编号从1开始,最大为63,表示63个扇区(用6个二进制位存储),每个扇区512字节,它是硬盘的最小存储单位。我们可以算一下:1024个柱面×63个扇区×256个磁头×512byte=8455716864byte。即通常的8.4GB(实际上应该是7.8GB左右)限制。实际上磁头数通常只用到255个(由汇编语言的寻址寄存器决定),即使把这3个字节按线性寻址,依然力不从心。当然现在的硬盘早就超过8.4GB了。
从大到小
H-Head(磁头)---》C-Cylinder(柱面数或者磁道数,即每个磁头的磁道数)------》S-Sector/Track(扇区,也就是每个磁道有多少扇区)--------》扇区大小(512bit)磁盘空间
      
二:除了CHS,我们还需要了解block,因为现在的硬盘早就不以CHS来设定了。不论我们的操作系统用的是哪一种 filesystem ,数据总是需要储存的吧!既然硬盘是用来储存数据的,想当然尔, 数据就必须写入硬盘啦!我们知道硬盘的最小储存单位是 sector ,不过数据所储存的最小单位并不是 sector 喔,因为用 sector 来储存太没有效率了。怎么说呢?因为一个 sector 只有 512 Bytes ,而磁头是一个一个 sector 的读取,也就是说,如果我的档案有 10 MBytes ,那么为了读这个档案, 我的磁头必须要进行读取 (I/O) 20480 次!
    为了克服这个效率上的困扰,所以就有逻辑区块( Block )的产生了! 逻辑区块是在 partition 进行 filesystem 的格式化时, 所指定的『最小储存单位』,这个最小储存单位当然是架构在 sector 的大小上面( 因为 sector 为硬盘的最小物理储存单位啊! ),所以啦, Block 的大小为 sector 的 2 的次方倍数。此时,磁头一次可以读取一个 block ,如果假设我们在格式化的时候,指定 Block 为 4 KBytes ( 亦即由连续的八个 sector 所构成一个 block ),那么同样一个 10 MBytes 的档案, 磁头要读取的次数则大幅降为 2560 次,这个时候可就大大的增加档案的读取效能啦!
不过,Block 单位的规划并不是越大越好!怎么说呢?因为一个 Block 最多仅能容纳一个档案 !这有什么问题呢?举例来说好了,假如您的 Block 规划为 4 KBytes ,而您有一个档案大小为 0.1 KBytes ,这个小档案将占用掉一个 Block 的空间,也就是说,该 Block 虽然可以容纳 4 Kbytes 的容量,然而由于档案只占用了 0.1 Kbytes ,所以,实际上剩下的 3.9 KBytes 是不能再被使用了,所以,在考虑 Block 的规划时,需要同时考虑到:
    档案读取的效能
    档案大小可能造成的硬盘空间浪费
因此,在规划您的磁盘时,需要留意到您主机的用途来进行规划较佳!例如 BBS 主机由于文章较短, 也就是说档案较小,那么 Block 小一点的好;而如果您的主机主要用在储存大容量的档案, 那么考虑到效能,当然 Block 理论上,规划的大一点会比较妥当啦! 



举例来说,我们可以用 tune2fs 来查看系统逻辑分区块的大小:
[WEB01~]# tune2fs -l /dev/sda3|grep Block
Block count:              15488668
Block size:               4096
Blocks per group:         32768
Block size:               4096
表示:4096B = 4K  (默认)
(15488668 * 4096 B) / 1024 K /1024 M /1024 G
15488668*4096/1024/1024/1024 = 59.08G
核对:
fw00:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              59G  4.5G   51G   9% /

然而,vmstat 中块的大小则表示扇区:
vmstat 中的 io/bi bo 的单位也是块,但是它不是操作系统里的那个块,这个块表示物理磁盘的块(sector),即扇区,每个扇区 512 字节.