Linux磁盘和文件系统管理(1),十分详细!
  Zk22aplX5xRP 2023年11月02日 52 0


磁盘组成与分区:

  • 圆形碟片:主要记录数据部分
  • 机械手臂:与在机械手臂上磁头()可擦写碟片上数据
  • 扇区:最小的物理存储单位,磁盘设计不同主要有512B和4KB两种格式
  • 扇区组成的一个圆就是柱面,
  • 早期分区以柱面为单位分区,现在主要以扇区分区为最小分区单位
  • 磁盘分区表有两种格式:一种是MBR分区表,另一种是较新但是限制较少的GPT分区表
  • MBR分区表:第一个扇区最重要,里面主要有:主引导记录(446B)和分区表(64B)
  • GPT分区表除了分区容量扩充较多,支持硬盘容量也超过2TB

物理磁盘文件名

物理磁盘文件名模拟为/dev/ad[a~p]格式,当使用到软件磁盘阵列时候就需要dev/md[0-128]

的磁盘文件名,使用LVM时,文件名为dev/VGNAME/lVNAME

  • dev/sd[a-p][1-128]:物理磁盘文件名
  • dev/vd[a-d][1-128]:虚拟磁盘文件名

文件系统特性

磁盘分区后进行格式化才可以进行使用,为啥需要格式化,因为每种操作系统文件属性/权限不相同,为了存放这些数据,所以我们要进行分区格式化,才可以使用操作系统能够利用的文件系统格式

Linux下默认的文件系统格式是ext2

文件系统和分区

传统文件系统和分区应用,一个分区只能被格式化为一个文件系统,所以我们说一个文件系统就是一个硬盘分区,现在技术发展,我们可以把一个分区格式化为多个文件系统,也可以吧多个分区合并为一个文件系统,所以,现在一般是一个可以被挂载的数据为一个文件系统,而非是一个分区。

文件系统的运行

新的操作系统除了文件实际内容还有很多属性,linux下文件权限和文件属性分在不同区块,每个区块和indoe都由编号

  • inode:记录文件属性,一个文件占用一个indoe,同时记录此文件的数据所在区块
  • 数据区块:实际记录文件内容,文件太大时候会使用多个区块
  • 超级区块:记录文件系统整体信息,包括indoe与数据区块总量、使用量、剩余量、以及文件系统格式和相关信息等

索引文件系统:

indoe下有文件数据放置区块号码,找到indoe就可以找到数据文件区块号码,第一格读取的是4号他就会读取所有数据区块,速度快,简洁

Linux磁盘和文件系统管理(1),十分详细!_文件系统

FAT文件系统

工作原理:

FAT文件系统需要依次将区块进行读取,首先会读取第一个区块,然后才会知道下一个区块在哪里,假设文件数据写入过于分散,磁头无法在转一圈就读取这个文件所有区块,通常会转很多圈,于是就有了碎片整理。

Linux磁盘和文件系统管理(1),十分详细!_文件系统_02

碎片整理:

原因:文件写入区块太过离散,读取文件性能将会变得很差所致,这个时候就需要通过碎片整理将同一个文件所属的区块集合在一起,这样数据的读取就会变得更容易。

ext2是索引式文件,所以很少需要进行碎片整理,长时间使用删除移动,编辑文件数据会变得过于离散,就可以使用碎片整理来整理一下。

ext2系统

使用inode为基础的linux文件系统

文件系统一开始就将inode和数据区块规划好了,除非重新格式化,否则他们都不在进行变动

格式化时候为区分多个区块群组(block group),每个区块都由独立indoe、数据区块、超级区块系统

整体规划当中,文件最前面有一个启动扇区,这个启动扇区可以安装启动引导程序,可以使用不同启动引导程序安装到别的文件系统最前端,就不需要覆盖磁盘MBR,这样能够制作多重引导环境。

Linux磁盘和文件系统管理(1),十分详细!_文件系统_03


数据区块:

ext2文件系统支持的区块大小有1k、2k、4k,三种,在格式化区块大小就已经固定了,每个区块都有编号,方便inode记录。

  • 区块大小数量在格式化完就不能修改
  • 每个区块最多只能放置一个文件数据
  • 文件大于区块大小,将会占用多个区块大小
  • 文件小于区块大小,该区块剩余容量不能再使用

所以在进行文件格式化执勤啊,要想好文件系统预计使用情况,区块容量太大会浪费,太小会占用多个数据块,使用多个inode,造成文件访问速度下降

inode table

记录内容如下:

  • 读写模式
  • 文件拥有者和拥有组
  • 文件大小
  • 文件建立或状态改变时间
  • 最近一簇读取时间
  • 最近修改时间
  • 定义文件特性标识
  • 该文件内容指向每个inode大小为128b,exf4设置为256b
  • 每个文件只有一个inode
  • 文件系统能够监理文件数量与inode数量有关
  • 系统读取文件时,先找到inode,再分析inode记录文件权限是否和用户匹配,不符合不能读取

inode结构:分为12个直接,一个间接,一个双间接,一个三间接

12个直接可以直接指向区块号码对照,间接就是拿一个区块来作为记录区块号码的记录区,文件变大时候,就会用到双间接,即拿出一个区块指向下一个记录数据的区块,实际数据在第二个区块之中,三间接同理

总额:直接+双间接+三间接

超级区块:

  • 记录整个文件系统相关信息地方
  • 记录信息数据区块和inode数量
  • 已使用和未使用inode和数据区块数量
  • 数据区块和inode的大小
  • 文件系统挂载时间,最近一次写入时间,最近一次检验磁盘时间等文件系统相关信息
  • 一个有效位数值,文件被挂载为0,文件未被挂载,有效位为1.

第一个区块群组会有超级区块,之后的区块群组可能会含有超级区块,但是作用是为第一个区块群组的超级区块做备份

文件系统说明:

描述每个区块群组开始与结束的区块,一级说明每个区段位于哪一个区块之间

区块对照表:

记录当前区块空间使用情况,存文件会先在对照表查看哪一个区块是空的,然后系统找到未使用区块处理文件,删除文件时候,对照表中对应该区块号码会被释放,设为【未被使用】

inode对照表:记录使用和未使用的inode号码

dumpe2fs:观察文件系统区段和超级区块信息(使用文件系统为ext4)

-b:列出保留为坏道部分。

-h:列出superblock数据,不会列出其他区段内容。

目录树:

Linux之下,每一个文件都会占用一个inode,根据文件内容分配使用多少区块

目录和文件在文件系统下由目录记录文件名,由一个个文件记录数据

目录:在Linux之下创建一个目录时,会分配一个inode和至少一个区块给该目录

  • inode:记录目录属性和相关权限
  • 区块:记录目录下文件名和这个文件名占用的inode号码数据

使用l了ll -i以列表形式查看inode号码(系统安装和磁盘分区不同inode号码就不同)

Linux磁盘和文件系统管理(1),十分详细!_文件系统_04

ll -d查看区块大小数

文件:

在linux之下的ext2建立一个一般文件时,ext2会分配yigeinode和相对与该文件大小的区块数量,当文件过大就会额外分出一个区块存放区块号码

目录树读取:

inode本身不记录文件名,文件名记录在目录区块当中,读取文件需要先经过目录的inode与区块,之后找到待读取文件inode号码,最终才会读取该文件区块数据

目录树在根目录之下读取,然后通过挂在信息找到挂载点inode号码,然后得到根目录inode内容,然后根据根据该inode读取根目录区块文件数据,再一层层向下读取文件名

文件系统大小宇硬盘读取性能

文件数据离散:文件系统规划很大,文件系统文件通常无法连续存在一起,填入式写入没有被使用的区块之中,当文件写入区域过于离散,就会发生文件数据离散问题。,同时文件系统太大时候,一个文件最前面或者最后面,就会造成读取性能下降,同时也会花费较多时间去查找

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

增加一个文件时候:

  1. 先确定用户或者想要增加文件的目录有没有w、x权限
  2. 查找inode对照表没有使用的inode号码,将新文件权限/属性写入
  3. 根据区块对照表找到又没有使用写入区块,更新inode区块指向数据
  4. 刚刚写入的inode区块数据和同步更新到inode对照表和区块对照表,并且更新超级区块内容

数据不一致:在写入文件时候因为某些原因导致系统中断,就回导致inode对照表和数据区块有写入数据,而元数据无法同步,即发生了元数据内容与实际数据存放不一致。

解决方法费时费力:借助超级区块中记录的有效位(是否有被挂载)与文件系统状态来检测一致性,当文件过大且数量过多时候就会导致判断时间过长,后来就有了日志式文件系统兴起

日志式文件系统

文件系统中划分一个区块,记录写入和修改文件时候步骤

  1. 系统写入一个文件时,会在日志文件中记录某个文件准备要写入信息
  2. 实际写入:写入文件数据和权限,更新metadate数据
  3. 完成数据和metadate更新,在日志记录区块中完成该文件记录


Linux文件系统的运行

异步处理模式:

系统加载一个文件到内存里面,没有被修改过,内存区段文件数据会被设置为【干净(clean)】,内存区段数据被修改之后就会设置为【脏的(Dirty)】,这时候所有操作都在内存中进行,并未把内存中数据写入硬盘,系统会时不时把内存中的数据和硬盘同步。sync可以进行同样操作

  • 系统会将常用文件数据放置内存中缓冲区里面,加快文件系统读取速度。
  • 物理内存最后会被用光,正常情况,可以提高系统效率
  • 手动设置sync强制内存中数据写会到硬盘里面
  • 正常关机时候关机命令自动调用sync将内存中数据写到硬盘
  • 不正常关机因为数据没有写会到硬盘里面,磁盘检索耗费大量时间,可能还会导致文件系统损坏

挂载点意义

文件系统和目录树结合的操作被叫做【挂载】,挂载点:目录,这个目录就是进入文件系统入口。并不是所有文件系统都可以进行使用,挂载到某个目录树上目录之后才可以使用该文件系统

管理识别的文件系统:通过vfs内核功能去读取文件系统进行管理的,所以用户不需要知道硬盘上面文件系统是什么,他会主动帮我们做好读取的操作


XFS

日志式文件系统,xfs是用来开发用于高容量磁盘以及高性能文件系统之用

一个数据区,一个文件系统活动登录区,一个实时运行区

数据区 :分为多个存储区群组放置文件系统所需要的数据,每个存储区群组都包含

整个文件系统的超级区块

剩余空间的管理机制

inode分配和追踪,inode和区块都是系统使用的时候动态配置产生的

区块容量可以在512B~64KB之间调整,在Linux之下,由于存储控制,所以区块最大大小为4KB ,inofe容量在256B~~2MB之间、

文件系统活动登录区:记录文件系统变化,文件变化会在这里记录下来,知道这个变化被写进了数据区后,这条记录才会被结束,当系统不正常关机,文件系统损坏时,系统就会检验这个登录区块,由于系统所有操作都会在这个区块做记录,所以这个磁盘活动频繁,可以指定外部磁盘作为XFS


文件系统简单操作:

磁盘和目录容量:

磁盘整体数据存放在超级区块之中,每个文件容量在inode中设置

df:列出文件系统整体磁盘使用量

特点:读取的数据针对一整个文件系统,所以读取的是超级区块信息,我们要特意根目录之下留意剩余容量,不能让它变成0.

选项参数

  • -a:列出文件系统
  • -k:以kb容量显示各个文件系统
  • -m:以MB容量显示文件系统
  • -T:硬盘分区文件系统名称
  • -i:以indoe数量显示,不用磁盘容量
  • -h:以人们较为方便方式阅读

du:查看文件系统的磁盘使用量

语法:du -【-ahskm】 文件或者目录名称

特点:会直接进入文件系统内查找所有文件数据,所以使用统计总量时命令会持续执行一段时间

选项参数:

-a:列出所有文件和目录容量

-h:以人们易读容量格式显示

-s:列出总量,不列出每个个别目录下占用容量

-S:不包括子目录下总计,所有文件大小列出

-k:以KB格式列出容量显示

-m:以MB格式列出容量显示

硬链接和符号链接:

一种是可以快速链接到目标文件(或目录),另一种是通过文件系统的inode链接产生新文件名,而不是产生新文件,这种方式叫硬链接

硬链接:

  • 每个文件都会占用一个inode,文件内容有inode记录来指向
  • 想要读取文件,必须经过目录记录文件名指向正确的inode号码才可以读取

硬链接就是在一个目录之下新建一条文件名链接都某inode号码的关联记录数据,实际并不会增加inode也不会消耗区块数量,硬链接好处就是安全,无论删除哪一个链接,最后inode实际都会存在

硬链接所用关联数据量很小,通常不会改变inode和磁盘空间大小,改变硬盘空间情况就是新增加数据将目录区块填满时,就会新增加一个区块来记录文件名关联性

硬链接限制:

  1. 不支持跨文件系统,硬链接只能在单一文件系统之下工作
  2. 不能链接目录:因为链接目录会将目录之下所有文件都建立硬链接,以后创建文件都会再次创建新的硬链接,工造成相当大的环境复杂度

符号链接

建立一个独立的文件,这个文件数据是用来指向它链接的文件的文件名,当原文件删除之后就无法找到源文件。因为寻找inode之后无法找到目标文件的inode和目标文件,删除源文件只是把链接的关联数据删除,源文件所在区块和inode没有变动

特点:

符号链接所建立的文件为一个新的文件,会占用新的inode和区块,同时符号链接和windows之下快捷方式含义是相等的

与硬链接比较

  • 与硬链接相比,还是硬链接显得更加安全,因为哪怕硬链接其中某一个目录下关联数据删除,只要还剩下任何一个目录之下存在关联数据,文件就不会不见。
  • 但是因为硬链接无法链接目录,使用起来比较受限

ln:建立链接

语法:ln 【-sf】 源文件 目标文件

选项参数:

-s:不加参数进行连接就是硬链接,加上-s建立的就是符号链接

Linux磁盘和文件系统管理(1),十分详细!_文件系统_05

-f:目标文件存在时候,主动将目标文件直接删除后再建立

/tmp下文件是用来缓存的,所以平常测试时候都会将文件放在这下面进行练习。

ln使用-s建立符号链接

ln使用-s参数就会创建和windows之下快捷方式同性质的符号链接,修改链接文件实际上就是修改的原始文件,不论原始文件在哪里,只要改变符号链接的文件,最后改变的就是源文件。

吾尝终日而思矣,不如须臾之所学也!

































【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
Zk22aplX5xRP