Linux知识体系之磁盘与档案系统管理

  硬盘的物理组成:由许许多多的圆形硬盘盘所组成。宜居硬盘盘能够容纳的数据量,而有所谓的单碟或者多碟。

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

  

 

  1、基本概念

  在计算整个硬盘的存储量时,简单的计算公式就是:Cylinder X Head X Sector X 512 Bytes。另外,硬盘在读取时,主要是 硬盘盘会转动,利用机械手臂将磁头移动到正确的数据位置。然后将数据依序读出。由于机械手臂上的磁头与硬盘盘的接触是很细微的空间,如果有抖动或者是脏污在磁头与硬盘盘之间时,就会造成数据的损毁或者是实体硬盘整个损毁。

  硬盘的分隔(Partition),为什么要进行磁盘分隔?因为我们必须告诉操作系统,可以存储的区域是由A磁柱到BB磁柱,如此一来,操作系统才能够控制磁盘磁头去A-B范围内的磁柱存取数据。也就是记录每一个分割区(Partition)的起始与结束磁柱。

  主要开机扇区(Master Boot Recorder,MBR),MBR就是在一块硬盘的第零轨上,也就是计算机开机之后要去利用该磁盘时,必须要读取第一个区域。在这个区域内记录的就是磁盘里的所有分割信息,以及开机的时候可以进行开机管理程序的写入的处所。

  2、partition与block

  每一个 partition就是一个FileSystem,不论是哪一种filesystem,既然硬盘是用来存储数据的,硬盘的最小存储单位是sector,但是用sector来存储就太没有效率了,一个sector只有512Bytes,而磁头是一个一个sector的读取,也就是说,如果我的档案有10MBytes,那么为了读这个档案,磁头必须要进行(I/O)20480次。难么为了克服这个效率上的问题,逻辑区块 block就诞生了。逻辑区块是在partition进行filesystem的格式化时,所指定的最小存储单位。block的大小为sector的2的次方倍数。如果格式化的时候,指定block为4KBytes,即8个sector所构成一个block,那么同样一个10MBytes的档案,磁头要读取的次数则大幅下降为2560次,这样可以大大的增加档案的读取效能。但是不一定越大越好,因为加入有一个0.1Kbytes的容量的文档,则会占用整个4Kbytes的block。会造成磁盘空间的浪费。

  3、inode

  当我们要将一个partition格式化(format)为ext2时,就必须要指定inode与Block的大小才行。也就是说,当partition被格式化为ext2的文档系统时,他一定会有inode table与block area这两个区域。Block是记录档案内容数据的区域,inode则是记录该档案的属性,以及档案内容放置在哪一个Block之内的信息。inode除了记录档案属性以外,同时还具有指向功能,指向档案内容防止的区域,好让操作系统可以正确的取得档案的内容。

  

  一块partition自ext2底下会被格式化为inode table与block area两个区域,那么读取/etc/crontab的流程为:

  (1)操作系统根据根目录(/)的相关资料可取得/etc这个目录所在的inode,并前往读取/etc这个目录的所有相关路径。

  (2)根据/etc的inode的资料,可以取得/etc这个目录底下所有档案的关联数据是放在哪一个Block当中,并前往该block读取档案的关联性内容。

  (3)由上个步骤的inode当中,可以取得 crontab这个档案的所有属性,并且可前往由 inode所指向的Block区域,顺利的取得crontab的档案内容。

  

  4、Linux 档案系统的运作:

  整个ext2/ext3的数据存取是透过journal与metadata还有数据存放区在记录的。在整部计算机的运作中,数据处理最快速的地方是CPU,接下来则是主存储器(RAM),至于硬盘,会慢很多。为了让Linux加快整个系统的存取效率,Linux上面通常采取 异步处理 的方式。

  当系统读取一个文档时,则该档案所在的区块数据会被加载到内存中,所以该磁盘区块就会被放置在主存储器的缓冲快取区,若这些区块的数据被改变时,刚开始数据仅有主存储器的区块数据会被改变,而且在缓冲区的区块数据会被标记为 Dirty,这个时候磁盘实体区块尚未被修正。这些 Dirty区块的数据必须回写到磁盘中,以维持磁盘实体1区块上的数据与主存储器中的区块数据的一致性。

  但是,如果Linux不正常关机,则由于数据尚未写入磁盘当中,会导致系统在再次开机时,会花相当多的时间进行校验,同时也可能会造成磁盘的损坏。

 

参考文献:《鸟哥的Linux私房菜》

  

 

 

   

  

posted on 2018-02-19 12:09  松伯  阅读(363)  评论(0编辑  收藏  举报