初学LINUX笔记(4)磁盘和文件系统基础

看着鸟哥的课程一步一步的学习,记录一些自己的笔记,侵删。

文件系统

先来了解一下什么是文件系统

特性

每个操作系统使用的文件系统并不相同,Linux 的正统文件系统则为 Ext2 (Linux second extended file system, ext2fs)。

文件系统的运作与操作系统的文件数据有关,较新的操作系统的文件数据除了文件实际内容外,通常还有非常多的属性,例如之前提过的rwx等。

文件系统通常会将文件属性和文件内容放在不同的区块,其中权限和属性放到inode中,实际数据放到data block中。同时还有一个**超级区块(superblock)**用于记录整个文件系统的整体信息,其中包括inode和block的总数、使用量、剩余量等。

Linux的EXT2文件系统

EXT2文件系统示意图如下:
在这里插入图片描述

EXT2文件系统在格式话的时候基本上都是区分为多个区块组群(block group),每个区块群组都有独立的inode/block/superblock系统。
其中文件系统最前面的为启动扇区,启动扇区可以安装开机管理程序。

每个区块组群的六个主要内容介绍如下

data block 资料区块

data block 是用来放置文件内容数据的,在EXT2文件系统中所支持的block大小有1k,2k,4k三种,在格式化的时候block大小被固定。

注意:block的大小会对EXT2文件系统有限制
在这里插入图片描述
block还有如下基本限制:

  • 原则上,block的大小与i数量在格式化后就不能进行修改(除非重新格式化)
  • 每个block内最多只能存放一个文件的数据
  • 如果一个文件的大小大于block的大小,则一个文件就会占用多个block数量
  • 如果一个文件的大侠小于block的大小,则block的剩余容量就不能再被使用了(磁盘空间会被浪费)

综上

  • 如果你的文件都较小,却选用较大的block,那么就会产生一些容量上的浪费
  • 如果你的文件都较大,却选用较小的block,那么一个文件就会占用较多的block,inode则需要记录更多的block号码,会造成文件系统的不良读写效果。
inode table (inode表格)

inode记录的文件数据至少有:

  • 该文件的存取模式(read/write/excute)
  • 该文件的拥有者与组群(owner/group)
  • 该文件的容量
  • 该文件建立或状态改变的时间(ctime)
  • 最近一次读取的时间(atime)
  • 最近修改的时间(mtime)
  • 定于文件特性的旗标(flag),例如setuid等
  • 该文件真正内容的指向(pointer)

与data block相同的是,inode的数量和大小也是在格式化的时候就已经固定了,同时也有一定的限定

  • 每个inode大小均为128bytes
  • 每个文件都仅占用一个inode,所以一个文件系统能建立的文件舒利昂与inode数量有关
  • 系统读取文件需要先找到inode,并分析inode所记录的权限与用户是否符合,如果符合才能够开始实际读取block的内容
superblock(超级区块)

superblock是用于记录整个filesystem相关信息的地方,没有superblock,就没有filesystem

其中记录的主要信息有:

  • block和inode的总量
  • 未使用和已使用的inode/block数量
  • block和inode的大小
  • filesystem的挂载时间,最近一次写入数据的时间、最近一次检验磁盘的时间等文件系统的相关信息
  • 一个valid bit数值,如果此文件系统已被挂载,则valid bit为0,若违背挂载,则valid bit为1
    PS:挂载指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件,如下图)
    在这里插入图片描述
    在这里插入图片描述
filesystem description(文件系统描述说明)

用于描述每个block group的开始与结束的block号码,以及每个区段分别位于哪一个block号码之间。

block bitmap(区块对照表)

用于记录那些block是空的,方便系统很快找到可以使用的空间来处理文件。

inode bitmap(inode对照表)

与block bitmap功能类似,用于记录未使用的inode号码。

dumpe2fs:查询EXT家族superblock信息
dumpe2fs [-bh] 装置文件名
  • 这里的装置文件名即为挂载在Linux上装置的文件,例如/dev/vad5。

目录树的读取

之前提过,对文件名的更改以及删除等操作是与目录的w权限有关的,这是因为文件名并不储存于block中,而是储存于对应目录的block中。同样,我们读取文件是经过目录的inode和block的,然后再找到待读取文件inode,最后读取想要的文件block内的数据。

目录树是由根目录开始读起的,下面以读取/etc/passwd文件为例:

  1. / 的inode:通过挂载点的信息找到inode为128的根目录inode,并且inode规范的权限让我们可以读取该block的内容(rx)。
  2. / 的block:经过上一个步骤取得block的号码,并找到该内容有etc/目录的inode号码
  3. etc/ 的inode:读取inode号码得知该用户拥有rx的权限,因此可以读取etc/的block内容
  4. etc/的block:经过上面几个步骤取得的block号码,并找到该内容有passwd文件的inode号码
  5. passwd的inode:读取inode号码得知该用户拥有r的权限,因此可以读取改文件的block内容
  6. passwd的block:最后将block内容的数据读取出来

ps,查询inode等信息可以如下:
在这里插入图片描述

文件的存取和日志式文件系统的功能

文件和目录的新建需要block bitmap 和inode bitmap。具体操作过程如下:

  1. 先确定用户对欲新增的文件的目录是否有wx的权限,如果有才能够进行添加操作
  2. 根据inode bitmap找到没有使用的inode号码,并将新文件的权限和属性写入
  3. 根据blocck bitmap找到没有使用中的block号码,并将实际的数据写入到该block中,并且根性inode的block指向数据
  4. 将刚刚写入的inode和block数据同步更新inode bitmap 和block bitmap, 并更新superblock的内容

一般将superblock, inode bitmap 以及block bitmap区段称为metadata(中介资料)。因为这几个区段的数据经常发生变化,每次增加移除等操作都会对这三个区段造成数据的改写。

数据的不一致状态

如果上述四个步骤都顺利完成则没有问题,如果在运行的过程中,出现中断(例如断电,系统核心发生错误等)而导致写入的数据只有inode table和data block而已,最后一个同步跟新中介数据的步骤没有完成。
所以工程师对文件的添加操作进行了如下改进:

  1. 预备:当系统需要写入一个文件的时候,会先在日志记录区块中记录某个文件准备写入的信息
  2. 实际写入:开始写入文件的权限和数据,然后开始更新中介资料的数据
  3. 结束:完成数据与中介资料的更新后,在日志记录区块中完成改文件的记录

所以我们只需要去检查日志记录区块,即可得知哪个文件出现了问题。

Linux文件系统的运作

数据需要加载到内存中,CPU才能对数据进行处理,如果文件较大,则将会消耗大量的时间在磁盘的写入和读取上,导致效率的降低。
Linux中处理的方法如下(之前有提到过的):

系统加载一个文件到内存后,如果改文件没有被更改过,那么在内存区段的文件数据就会被设定为clean,如果被更改过,那么就会被设定为dirty。此时所有的动作都在内存中执行,并没有写入到磁盘中。系统会不定时的将内存中设定为dirty的数据写入到磁盘中,保持磁盘与内存数据的一致。

因为内存的速度比磁盘快,所以如果能将常用的文件放置到内存中,那么就会增加系统的性能,所以linux的文件系统和内存有很大的关系:

  • 系统会将常用的文件数据放置到主存储器的缓冲区中,用来加速文件系统的读写,因此linux的物理内存最后都会备用光,以达到加速系统效能
  • 可以手动使用sync来强制内存中设定为dirty的文件写回到磁盘中去
  • 如果正常关机,那么关机指令将会呼叫sync来将内存数据写回到磁盘中去
  • 如果不正常关机,数据尚未写回到磁盘中去,因此重启会花费大量的时间来进行磁盘检验,甚至可能导致文件系统的损毁(非磁盘损毁)

挂载点

挂载: 将文件系统和目录树结合的动作我们称为挂载

注意: 挂载点必须是目录,并且该目录为进入文件系统的入口,必须要挂载到目录树的某个目录后才能够使用这个文件系统。

XFS文件系统

EXT文件系统虽然支持度最广,但是格式化超慢,因为EXT文件系统对于文件格式化的处理方式为预先规划出所有inode/block/meta data等数据,未来系统可以直接使用,不需要动态配置。但是当磁盘的容量越来越大后,文件系统预先分配inode和block就消耗了大量的时间。

综上,从centos7开始,文件系统预设为XFS。XFS可以具备所有EXT4文件系统有的功能。他的资源主要规划为:资料区data section、 一个文件系统登录区 log section 、实时运作区realtime section。主要内容如下:

资料区

与ext类似,包括了inode、data block、superblock等数据。与ext不同的是,inode和block都是在系统需要的时候才进行动态配置的, 所以有较快的格式化速度。

文件系统活动登录区

主要用于记录文件系统的变化,和之前提到的EXT相同,只有当文件完整写入到数据区后,记录才会被终结。
这个区块的磁盘活动相当频繁,因为文件系统所有的动作都会在这个区块内记录。为了提高工作效率,XFS允许指定外部的磁盘作为文件系统的日志区块,例如可以将ssd磁盘作为xfs的登陆区。

实时运作区

文件建立时,xfs会在区段内找到一个或数个extent区块,将这个文件放置在区块内,等到分配完成后,再写入到资料区的inode和block中去,extent的大小在格式化的时候指定,范围为4K~1G

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zccccccc_tz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值