文件系统
Filesystem(文件系统):可被挂载的数据,与partition(硬盘分区)不同
文件系统 | 说明 |
---|---|
ext | Linux扩展文件系统 |
ext2 | Linux扩展文件系统的升级版 |
ext3 | 第3代扩展文件系统,支持日志功能 |
ext4 | 第4代扩展文件系统,支持高级日志功能 |
hpfs | OS/2高性能文件系统 |
jfs | IBM日志文件系统 |
iso9660 | ISO 9660文件系统(CD-ROM) |
minix | MINIX文件系统 |
msdos | 微软的FAT16 |
ncp | Netware文件系统 |
nfs | 网络文件系统 |
ntfs | Microsoft NT文件系统 |
proc | 访问系统信息 |
ReiserFS | 高级Linux1文件系统 |
smb | Samba SMB文件系统 |
ufs | Unix文件系统 |
umsdos | BSD文件系统 |
vfat | Windows95文件系统(FAT 32) |
XFS | 高性能64位日志文件系统 |
磁盘基础
扇区(Sector):磁盘最小的物理存储单位,每个扇区的容量为512字节
1)其中第一个扇区最重要,存储主引导记录和分区表
//第一个扇区:446字节的主引导记录、64字节的分区表和2字节的结束符
如:第一个扇区的组成图
//所以磁盘仅能有四个主分区,各个主分区相互独立,且每个分区记录了该区段的启始与结束标记
硬件设备 | 命名规则 |
---|---|
SCSI/SATA/U盘 | /dev/sd[a-p] |
IDE设备 | /dev/hd[a-d] |
软驱 | /dev/fd[0-1] |
光驱 | /dev/cdrom |
鼠标 | /dev/mouse |
打印机 | /dev/lp[0-15] |
磁带机 | /dev/st0或/dev/ht0 |
//字母顺序a~p代表系统内核识别该设备/磁盘的顺序由系统识别顺序决定(并不是由主板插槽所决定的)
物理磁盘命名顺序:/dev/sd[a-p][1-128]
虚拟磁盘命名顺序:/dev/vd[a-p][1-128]
1)磁盘分区后必须进行格式化(format)才能使用
2)一个可被挂载的数据为一个文件系统(而不是一个分区)
Master Boot Record
MBR(主引导记录):存储主引导记录和分区表(最大支持2TB的硬盘)
1)主引导记录:可安装和使用启动引导程序,446字节
2)分区表:记录整块硬盘分区状态,64字节
如:划分4个主分区后的硬盘
//一般4个分区不能满足实际需求,就需通过扩展分区和逻辑分区增加分区
扩展分区:利用一个主分区记录更多的分区信息以增加分区
1)扩展分区和主分区是一样的,仅功能不同(仅把主分区重命名)
2)本质上就是占用16字节分区表空间指向下一个分区的指针(形成单向链表)
3)主分区和扩展分区只能有4个(硬盘限制)
4)扩展分区只能有一个(系统限制),逻辑分区可有无限个
逻辑分区:由扩展分区继续划分出来的分区
1)从扩展分区划分出的逻辑分区(通过链表进行链接);
2)逻辑分区的设备名称默认从5开始;
3)能被格式化使用的是:主要分区和逻辑分区(扩展分区不能被格式化)
//因为3和4为主分区保留,不能使用
如:1个主分区和通过扩展分区增加的5个逻辑分区
GUID partition table
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与数据区块固定后就不再变化
文件系统 | 说明 |
---|---|
Ext3 | 日志文件系统 能够在系统宕机时避免文件系统资料丢失, 且能自动修复数据的不一致和错误 |
Ext4 | Ext3的升级版(日志文件系统) Centos6系统默认的文件系统 支持的存储容量为1EB,可批量分配Block块 |
XFS | 高性能的日志文件系统 Centos7系统默认的文件系统 快速修复文件、占用资源少和支持存储容量为18EB |
//日志文件系统修复本质:预先记录磁盘的每项操作
FAT文件系统
通过读取完一个数据区块后得知下一个数据区块号,再读取下一个数据区块
1)不存在inode;
如:一个文件依序写入是1->7->4->15,则读出时
//会存在区块太过离散,导致读取性能变差
索引式文件系统
inode(indexed
allocation):通过inode记录该文件的所有数据区块号,再根据磁盘的读取顺序,一次性将文件读取出
如:索引式文件系统一次性读出文件
Block group
Ext4文件系统格式化时会将区分为多个区块群组(Block group)
1)每个区块群组都有独立的inode、数据区块和超级区块系统
启动扇区:安装启动引导程序的扇区
超级区块(Superblock):记录整个文件系统相关信息
相关信息 |
---|
数据区块与inode总量 |
未使用与已使用的inode和数据块数量 |
数据区块和inode大小 |
文件系统的挂载时间 |
最后一次写入数据的时间 |
最近依次检验磁盘(fsck)的时间 |
有效位数值(0为挂载,1为未挂载) |
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)每个区块内最多只能存储一个文件的数据
//若文件大于区块的大小,则一个文件会占用多个区块
//若文件小于区块的大小,则占用的区块剩余容器也不能再被使用了
Directoy tree
目录树结构:以根为主,向下呈现为分枝状的目录结构的文件架构
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 选项 设备文件名
选项 | 含义 |
---|---|
-b | 列出文件系统中预留的块信息 |
-h | 仅列出superblock的数据 |
XFS
XFS属于日志式文件系统,具有几乎所有ext文件系统系列具有的功能
1)由数据区、文件系统活动登录区和实时运行区三个区域构成
EXT | XFS | |
---|---|---|
inode节点 | 固定分配 | 动态分配 |
适用 | 小容量磁盘和普通文件 | 高容量磁盘和巨型文件 |
默认使用 | Centos6.x | Centos7.x |
//由于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文件系统
名称 | 含义 |
---|---|
iseze | inode的容量 |
agcount | 存储群组的个数 |
agsize | 每个存储群组具有的区块 |
sectsz | 逻辑扇区的容量 |
bsize | 区块的容量 |
sunit和swidth | 与磁盘阵列的stripe有关 |
internal | 登录区的位置在文件系统内 |
realtime | 实时运行区域 |
extent | extent容量 |
//整个文件系统的容量:agcount*agsize*bsize
VFS
VFS(Virtual Filesystem Switch)虚拟文件系统:集合各种文件系统
1)Linux系统通过VFS的内核功能去识别和调用各类文件系统,并提供统一的接口给用户/应用程序使用;
如:VFS提供给用户的接口
//实际的文件系统在VFS下隐藏了其特性和细节
文件系统操作
基础命令
df命令:列出各个挂载磁盘分区基本信息
指令格式1:df 选项
选项 | 含义 |
---|---|
-a | 列出所有的文件系统 |
-h | 以易于阅读的方式显示 |
-i | 不列出磁盘容量,而以inode数量显示 |
-T | 显示磁盘分区的文件系统 |
//系统中存在很多特殊的文件系统,而这些特殊的文件系统几乎都是在内存中
如:以高可读性列出主机的磁盘分区
//查看多为第一项(系统真实使用的),后面两项为系统预分配使用的
指令格式2:df 选项 文档路径
1)列出该文档所属的文件磁盘分区的信息
如:查看/boot文件和/etc文件所属磁盘分区的信息
du命令:查看指定文档下的占用磁盘空间真实大小
指令格式:du 选项 目录路径
1)无选项和目录路径,则默认显示当前目录下所有文档各占用的磁盘空间
2)若文档为文件夹,则列出该文档下各个文档所占用的空间;
3)若列出目录的真实占用,应加上“-S”选项
选项 | 含义 |
---|---|
-a | 列出所有文档(包括子目录下的文件)的占用 默认仅列出目录(包括隐藏)的占用 |
-h | 以高可读性列出 |
-s | 仅列出所有文档的总占用 |
-S | 列出各个目录所占用,并以总数显示文件占用 |
如:查看当前test2目录下占用的磁盘空间
df命令 | du命令 |
---|---|
从超级区块内读取信息 可读取到已经删除的文档 反应速度非常快 | 到文件系统内读取信息 仅能计算当前存在的文档 利用的是文档累加和 |
//文件被删除不是立刻就在系统中消失
链接
硬链接(Hard Link):新增一个附加文件,和源文件名使用同一个inode号码
1)硬链接的本质就是使多个文件名对应同一个inode号码;
2)硬链接不能跨文件系统,且不能链接目录;
3)每多一个文件名链接到inode号码,“ls -l”显示的第三栏链接数就增加1;
//当新建目录时:新目录的链接数为“2”,而上层目录的链接数会自动加“1”
软链接(Symbolic Link):新增一个独立文件,拥有独立的inode号码
1)该文档的数据读取指定链接的源文档;
2)创建软链接时,若源文件不和目标文件在同一目录时,应使用绝对路径;
//否则软链接将找不到源文件
3)软链接可跨文件系统,也可链接目录;
区别 | 软链接 | 硬链接 |
---|---|---|
在指定的位置上生成一个 | 镜像 | 复制一个副本 |
源文件被删除时 | 不能使用 | 正常使用 |
增加inode和消耗区块 | 不会 | 会 |
相同点 | 两种链接都保持了文件的同步性(同步变化) |
ln命令:给文件建立同步链接
指令格式:ln 选项 源文档 目标文档
1)无选项,则默认建立硬链接
选项 | 含义 |
---|---|
-s | 源文档与目标文档建立软链接 |
-f | 若目标路径下已有同名文档,则删除后再建立(无提示) |
-b | 若目标路径下已有同名文档,在删除前先备份 |
-n | 把已创建的软连接文档视为普通文档 |
如:使用和不适用-n选项的结果