前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux知识体系之磁盘与档案系统管理

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

作者头像
用户3003813
发布2018-09-06 14:23:11
9480
发布2018-09-06 14:23:11
举报
文章被收录于专栏:个人分享个人分享

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

  首先,硬盘里一定会有所谓的磁头(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私房菜》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档