认识 EXT2 文件系统、磁盘分区 ( Partition )、文件系统:

时间:2022-03-17 00:00:01
认识 EXT2 文件系统
既然这个章节主要在探讨 Linux 的磁盘文件系统,所以我们当然就需要先来了解一下硬盘是个什么东西啦! 首先,我们就来看一看硬盘的物理组成,了解了物理组成之后,再来说明一下怎么样进行硬盘的分割 (partition) 吧!


认识 EXT2 文件系统、磁盘分区 ( Partition )、文件系统:硬盘物理组成:
就硬盘的物理组件来说,硬盘其实是由许许多多的圆形硬盘盘所组成的, 依据硬盘盘能够容纳的数据量,而有所谓的单碟 (一块硬盘里面只有一个硬盘盘) 或者是多碟 (一块硬盘里面含有多个硬盘盘)的硬盘。在这里我们以单一个硬盘盘来说明,硬盘盘可由底下的图形来示意:

认识 EXT2 文件系统、磁盘分区 ( Partition )、文件系统:
图一、硬盘盘示意图

认识 EXT2 文件系统、磁盘分区 ( Partition )、文件系统:
图二、磁柱示意图

首先,硬盘里面一定会有所谓的磁头 ( Head ) 在进行该硬盘盘上面的读写动作,而磁头是固定在机械手臂上面的,机械手臂上有多个磁头可以进行读取的动作。 而当磁头固定不动 (假设机械手臂不动) ,硬盘盘转一圈所画出来的圆就是所谓的磁道( Track );而如同我们前面刚刚提到的,一块硬盘里面可能具有多个硬盘盘, 所有硬盘盘上面相同半径的那一个磁道就组成了所谓的磁柱( Cylinder )

例如上图二所示意,在两个硬盘盘上面的同一个磁道就是一个磁柱啦! 这个磁柱也是磁盘分区( partition )时的最小单位了; 另外,由圆心向外划直线,则可将磁道再细分为一个一个的扇区( Sector ),这个扇区就是硬盘盘上面的最小储存物理量了! 通常一个 sector 的大小约为 512 Bytes 。以上就是整个硬盘的基本组件。

在计算整个硬盘的储存量时,简单的计算公式就是:『 header 数量 * 每个 header 负责的磁柱数量 * 每个磁柱所含有的扇区数量 * 扇区的容量』,单位换算为『header * cylinder/header * secter/cylinder * 512bytes/secter』,简单的写法如下: Cylinder x Head x Sector x 512 Bytes。另外,硬盘在读取时,主要是『硬盘盘会转动, 利用机械手臂将磁头移动到正确的数据位置(单方向的前后移动),然后将数据依序读出。』 在这个操作的过程当中,由于机械手臂上的磁头与硬盘盘的接触是很细微的空间, 如果有抖动或者是脏污在磁头与硬盘盘之间时,就会造成数据的损毁或者是实体硬盘整个损毁~

因此,正确的使用计算机的方式,应该是在计算机通电之后,就绝对不要移动主机,并免抖动到硬盘, 而导致整个硬盘数据发生问题啊!另外,也不要随便将插头拔掉就以为是顺利关机! 因为机械手臂必须要归回原位,所以使用操作系统的正常关机方式,才能够有比较好的硬盘保养啊! 因为他会让硬盘的机械手臂归回原位啊!


认识 EXT2 文件系统、磁盘分区 ( Partition )、文件系统:磁盘分区 ( Partition ):
在了解了硬盘的物理组件之后,再接着下来介绍的就是硬盘的分割( Partition )啰! 为什么要进行硬盘分割啊?!因为我们必须要告诉操作系统:『 我这块硬盘可以存取的区域是由 A 磁柱到 B 磁柱』,如此一来, 操作系统才能够控制硬盘磁头去 A-B 范围内的磁柱存取数据;如果没有告诉操作系统这个信息, 那么操作系统就无法利用我们的硬盘来进行数据的存取了, 因为操作系统将无法知道他要去哪里读取数据啊!这就是磁盘分区( Partition )的重点了: 也就是记录每一个分割区( Partition )的起始与结束磁柱

好了,那么这个分割区的起始与结束磁柱的数据放在哪里呢?!那就是我们在 Linux 安装与多重引导技巧 那个章节提到的主要启动扇区( Master Boot Recorder, MBR )啰!事实上, MBR 就是在一块硬盘的第零轨上面,这也是计算机开机之后要去利用该硬盘时, 必须要读取的第一个区域!在这个区域内记录的就是硬盘里面的所有分割信息, 以及开机的时候可以进行开机管理程序的写入的处所啊!所以,当一个硬盘的 MBR 坏掉时,由于分割的数据不见了,呵呵,那么这个硬盘也就几乎可以说是寿终正寝了, 因为操作系统不知道该去哪个磁柱上读取数据啊~~

那么 MBR 有什么限制呢?他最大的限制来自于他的大小不够大到储存所有分割与开机管理程序的信息, 因此,MBR 仅提供最多四个 partition 的记忆,这就是所谓的 Primary (P)与 Extended (E) 的 partition 最多只能有四个的原因了。所以说,如果你预计分割超过 4 个 partition 的话,那么势必需要使用 3P + 1E ,并且将所有的剩余空间都拨给 Extended 才行( 记得呦! Extended 最多只能有一个 ),否则只要 3P + E 之后还有剩下的空间, 那么那些容量将成为废物而浪费了,所以结论就是『如果您要分割硬盘时,并且已经预计规划使用掉 MBR 所提供的 4 个 partition ( 3P + E 或 4P )那么磁盘的全部容量需要使用光,否则剩下的容量也不能再被使用』。 不过,如果您仅是分割出 1P + 1E 的话,那么剩下的空间就还能再分割两个 primary partition !


认识 EXT2 文件系统、磁盘分区 ( Partition )、文件系统:文件系统:
在告知系统我的 partition 所在的起始与结束磁柱之后,再来则是需要将 partition 格式化为『我的操作系统认识的文件系统( Filesystem )』啰!因为每个操作系统认识的 filesystem 并不相同!例如 Windows 操作系统在默认状态下就无法认识 Linux 的文件系统 ( 这里指 Linux 的标准文件系统 ext2 )。所以当然要针对我们的操作系统来格式化 partition 啰!

我们可以说,每一个 partition 就是一个 Filesystem ,那么一个 partition 是否可以具有两个 Filesystem 呢?!理论上应该是不行的!因为每个文件系统都有其独特的支持方式,例如 Linux 的 ext3 就无法被 Windows 系统所读取!而你将一个 partition 格式化的时候,总不能格式化为 ext3 也同时格式化为 fat32 吧?!那是不可能的啊!

不论是哪一种 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 最多仅能容纳一个档案 (这里指 Linux 的 ext2 文件系统)!这有什么问题呢?举例来说好了,假如您的 Block 规划为 4 KBytes ,而您有一个档案大小为 0.1 KBytes ,这个小档案将占用掉一个 Block 的空间,也就是说,该 Block 虽然可以容纳 4 Kbytes 的容量,然而由于档案只占用了 0.1 Kbytes ,所以,实际上剩下的 3.9 KBytes 是不能再被使用了,所以,在考虑 Block 的规划时,需要同时考虑到:
  • 档案读取的效能
  • 档案大小可能造成的硬盘空间浪费
因此,在规划您的磁盘时,需要留意到您主机的用途来进行规划较佳!例如 BBS 主机由于文章较短, 也就是说档案较小,那么 Block 小一点的好;而如果您的主机主要用在储存大容量的档案, 那么考虑到效能,当然 Block 理论上,规划的大一点会比较妥当啦!

Superblock:如同前面说的,当我们在进行磁盘分区( partition )时,每个磁盘分区槽( partition )就是一个文件系统( filesystem ), 而每个文件系统开始的位置的那个 block 就称为 superblock ,superblock 的作用是储存像是文件系统的大小、空的和填满的区块,以及他各自的总数和其他诸如此类的信息等等, 这也就是说,当您要使用这一个磁盘分区槽( 或者说是文件系统 )来进行数据存取的时候,第一个要经过的就是 superblock 这个区块了,所以啰, superblock 坏了,您的这个磁盘槽大概也就回天乏术了!