文件系统
磁盘基础
Master Boot RecordGUID partition table 文件系统特性
FAT文件系统索引式文件系统
Block groupDirectoy treeJournaling filesystem XFS
三个区域 VFS 文件系统 *** 作
基础命令链接
文件系统Filesystem(文件系统):可被挂载的数据,与partition(硬盘分区)不同
扇区(Sector):磁盘最小的物理存储单位,每个扇区的容量为512字节
1)其中第一个扇区最重要,存储主引导记录和分区表
//第一个扇区:446字节的主引导记录、64字节的分区表和2字节的结束符
如:第一个扇区的组成图
//所以磁盘仅能有四个主分区,各个主分区相互独立,且每个分区记录了该区段的启始与结束标记
//字母顺序a~p代表系统内核识别该设备/磁盘的顺序由系统识别顺序决定(并不是由主板插槽所决定的)
物理磁盘命名顺序:/dev/sd[a-p][1-128]
虚拟磁盘命名顺序:/dev/vd[a-p][1-128]
1)磁盘分区后必须进行格式化(format)才能使用
2)一个可被挂载的数据为一个文件系统(而不是一个分区)
Master Boot RecordMBR(主引导记录):存储主引导记录和分区表(最大支持2TB的硬盘)
1)主引导记录:可安装和使用启动引导程序,446字节
2)分区表:记录整块硬盘分区状态,64字节
如:划分4个主分区后的硬盘
//一般4个分区不能满足实际需求,就需通过扩展分区和逻辑分区增加分区
扩展分区:利用一个主分区记录更多的分区信息以增加分区
1)扩展分区和主分区是一样的,仅功能不同(仅把主分区重命名)
2)本质上就是占用16字节分区表空间指向下一个分区的指针(形成单向链表)
3)主分区和扩展分区只能有4个(硬盘限制)
4)扩展分区只能有一个(系统限制),逻辑分区可有无限个
逻辑分区:由扩展分区继续划分出来的分区
1)从扩展分区划分出的逻辑分区(通过链表进行链接);
2)逻辑分区的设备名称默认从5开始;
3)能被格式化使用的是:主要分区和逻辑分区(扩展分区不能被格式化)
//因为3和4为主分区保留,不能使用
如:1个主分区和通过扩展分区增加的5个逻辑分区
GPT(全局唯一标识磁盘分区表):将磁盘所有区块以LAB划分
1)默认为512字节(不具有分区概念);
2)最大支持18EB的硬盘(该限制可忽视,可认为是无限制的)
LAB0(MBR兼容模块):存储主引导记录
LAB1(GPT表头记录):记录分区表相关信息(位置和大小)和GPT备份分区
//同时也存储了分区表的校验码(CRC32)
LAB2~33(实际信息存储):每个LBA可记录4组分区记录
文件系统特性文件系统通常会将文件实际内容和文件属性分别存放在不同的区块,同时还会有一个超级区块(superblock)记录整个文件系统的整体信息
超级区块:记录该文件系统的整体信息,包括inode、数据区块的总量、使用量、剩余量和文件系统的格式以及其他相关信息
inode:记录文件的属性,同时记录此文件的数据所在的区块号码,且一个文件仅能占用一个inode
数据区块:实际记录文件的内容(若文件太大时,会占用多个区块)
1)ext文件系统创建之后就将inode和数据区块规划好了,除非重新格式化或利用resize2fs等命令修改其大小,否则inode与数据区块固定后就不再变化
//日志文件系统修复本质:预先记录磁盘的每项 *** 作
FAT文件系统通过读取完一个数据区块后得知下一个数据区块号,再读取下一个数据区块
1)不存在inode;
如:一个文件依序写入是1->7->4->15,则读出时
//会存在区块太过离散,导致读取性能变差
inode(indexed
allocation):通过inode记录该文件的所有数据区块号,再根据磁盘的读取顺序,一次性将文件读取出
如:索引式文件系统一次性读出文件
Ext4文件系统格式化时会将区分为多个区块群组(Block group)
1)每个区块群组都有独立的inode、数据区块和超级区块系统
启动扇区:安装启动引导程序的扇区
超级区块(Superblock):记录整个文件系统相关信息
1)没有超级区块,就没有该文件系统
2)每个Block group都可能含有超级区块,但一个文件系统只能有一个超级区块
//除了第一个Block group含有超级区块,其他的Block group可能都不含有;若含有,也是第一个Block group的超级区块的备份
Filesystem Description(文件系统描述):描述每个区块群组的开始与结束
1)并说明每个区段分别属于的区块
区块对应表(Block bitmap):记录使用和未使用的区块
inode对应表(inode bitmap):记录使用和未使用的inode
inode表(Inode Table):记录文件基础权限、文件的属主和属组、文件的大小、文件的ctime、atmie和mtime、文件的标识符、文件的数据区块号
1)每个inode大小固定为128字节,且每个文件都会占用一个inode
2)文件系统能够建立的文件数量与inode的数量有关
3)用户 *** 作文件时,系统会需先找到文件的inode,并分析inode所记录的权限与用户是否符合,若符合才能对数据区块的内容进行 *** 作
inode记录区块号码的区域为:12个直接、1个间接、1个双间接、1个三间接
1)间接就是再利用一个区块当作记录区块号码的记录区
2)当一个文件的inode被写满后,系统就分配给该文件一个新的Block块,该Block块就会像inode一样记录相关信息
//磁盘的整体数据是在超级区块中,每个文件的容量则在inode中
数据区块(Data Block):用来放置文件数据的地方,在ext2文件系统中支持的区块大小有1K、2K和4K三种(格式化时就确定其区块的大小),且每个区块都有编号(方便inode记录)。
1)每个区块内最多只能存储一个文件的数据
//若文件大于区块的大小,则一个文件会占用多个区块
//若文件小于区块的大小,则占用的区块剩余容器也不能再被使用了
目录树结构:以根为主,向下呈现为分枝状的目录结构的文件架构
1)Linux所有文件都是由根目录衍生出来的
当建立一个文件时:
1)ext2会分配一个inode和与该文件大小相匹配的区块数量
当建立一个目录时:
1)ext2会分配一个inode和至少一块大小相匹配的区块
2)inode记录该目录的相关权限、属性和分配到的区块号码
3)区块记录该目录下的文件名与该文件名占用的inode号码数据
目录树:由于目录树是由根目录开始读起,因此系统通过挂载的信息可以找到挂载点的inode号码,此时就能够得到根目录的inode内容,并依据该inode读取根目录的区块内的文件名数据,再一层一层的往下读到正确的文件名。
Journaling filesystem元数据(中继数据):描述数据的数据
1)区块对照表、inode对照表和超级区块均为元数据(metadata)
2)数据不一致(Inconsistent)状态:元数据的内容与实际数据存放区不一致
如:当文件系统新增一个文件时,会进行以下 *** 作:
1)先确定用户对与新增文件的目录是否具有w和x权限
2)根据inode对照表找到没有使用的inode号码,并将新文件的权限/属性写入
3)根据区块对照表找到没有使用的区块号码,并将实际的数据写入区块中
且更新inode的区块指向数据
4)用写入的inode和区块数据同步更新inode对照表和区块对照表,并更新超级区块的内容
日志式文件系统(Journaling filesystem):记录写入/修改文件时的 *** 作
1)若文件出现数据不一致状态,就可通过日志排除
如:将数据写入日至式文件系统的文件时,系统会进行以下 *** 作:
1)预备:系统写入文件时,先在日志记录区块中记录该文件准备要写入的信息
2)实际写入:开始写入文件的权限和数据;开始更新metadata的数据
3)结束:完成数据和metadata的更新,并在日志记录区块中记录该文件 *** 作
异步处理(asynchronously):当系统加载一个文件到内存后,若该文件没有被修改过,则在内存区段的文件数据会被设置为“clean”;若内存中的文件数据已被更改了,则在内存区段的文件数据会被设置为“dirty”,此时所有的 *** 作都还在内存中执行,并没有写入到磁盘中,但系统会不定时的将内存中设置为“dirty”的数据写入到磁盘。
dumpe2fs命令:查询ext文件系统系列超级区块和普通块的信息
指令格式:dumpe2fs 选项 设备文件名
XFS属于日志式文件系统,具有几乎所有ext文件系统系列具有的功能
1)由数据区、文件系统活动登录区和实时运行区三个区域构成
//由于ext文件系统系列在格式化时,使用静态配置直接规划处所有的inode、区块和元数据等数据;只能适用于小磁盘量,且格式化慢
三个区域数据区(data section):分为多个存储群组存放实际数据
//也记录inode、数据区块和超级区块等数据
存储群组(allocation group)类似ext的区块群组(block group),配置:
1)整个文件系统的超级区块
2)剩余空间的管理机制
3)inode的分配与追踪
文件系统活动登录区(log section):记录文件系统的变化
1)因为所有 *** 作都记录在该区块,所以该区块的磁盘活动比较频繁
//也可指定外部磁盘作为xfs文件系统的活动登录区
实时运行区(realtime section):当文件被建立时,xfs会在该区找到一个或多个extent区块(连续区块),将文件放置在这个区块内,等到分配完毕后,再写入到data section的inode区块中
//extent区块的大小在格式化时就设置大小
xfs_info命令:查询xfs文件系统系列超级区块和普通块的信息
指令格式:xfs_info 挂载点
如:查看当前主机的挂载设备的xfs文件系统
//整个文件系统的容量:agcount*agsize*bsize
VFSVFS(Virtual Filesystem Switch)虚拟文件系统:集合各种文件系统
1)Linux系统通过VFS的内核功能去识别和调用各类文件系统,并提供统一的接口给用户/应用程序使用;
如:VFS提供给用户的接口
//实际的文件系统在VFS下隐藏了其特性和细节
文件系统 *** 作 基础命令df命令:列出各个挂载磁盘分区基本信息
指令格式1:df 选项
//系统中存在很多特殊的文件系统,而这些特殊的文件系统几乎都是在内存中
如:以高可读性列出主机的磁盘分区
//查看多为第一项(系统真实使用的),后面两项为系统预分配使用的
指令格式2:df 选项 文档路径
1)列出该文档所属的文件磁盘分区的信息
如:查看/boot文件和/etc文件所属磁盘分区的信息
du命令:查看指定文档下的占用磁盘空间真实大小
指令格式:du 选项 目录路径
1)无选项和目录路径,则默认显示当前目录下所有文档各占用的磁盘空间
2)若文档为文件夹,则列出该文档下各个文档所占用的空间;
3)若列出目录的真实占用,应加上“-S”选项
如:查看当前test2目录下占用的磁盘空间
//文件被删除不是立刻就在系统中消失
链接硬链接(Hard link):新增一个附加文件,和源文件名使用同一个inode号码
1)硬链接的本质就是使多个文件名对应同一个inode号码;
2)硬链接不能跨文件系统,且不能链接目录;
3)每多一个文件名链接到inode号码,“ls -l”显示的第三栏链接数就增加1;
//当新建目录时:新目录的链接数为“2”,而上层目录的链接数会自动加“1”
软链接(Symbolic link):新增一个独立文件,拥有独立的inode号码
1)该文档的数据读取指定链接的源文档;
2)创建软链接时,若源文件不和目标文件在同一目录时,应使用绝对路径;
//否则软链接将找不到源文件
3)软链接可跨文件系统,也可链接目录;
ln命令:给文件建立同步链接
指令格式:ln 选项 源文档 目标文档
1)无选项,则默认建立硬链接
如:使用和不适用-n选项的结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)