Linux_16_文件系统

  • 文件系统
    • 磁盘基础
      • Master Boot Record
      • GUID partition table
    • 文件系统特性
      • FAT文件系统
      • 索引式文件系统
        • Block group
        • Directoy tree
        • Journaling filesystem
      • XFS
        • 三个区域
      • VFS
    • 文件系统操作
      • 基础命令
      • 链接

文件系统

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选项的结果

Linux_16_文件系统相关推荐

  1. 2021年大数据Hadoop(七):HDFS分布式文件系统简介

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 HDFS分布式文件系统 ...

  2. Linux系统中创建大文件,并作为文件系统使用

    在LInux系统的使用过程中,有时候会遇到诸如某个磁盘分区的大小不够用了,导致其下的文件系统不能正常写入数据.亦或者是系统swap分区太小,不够用或者不满足条件而导致的其他一系列问题.如果我们系统上挂 ...

  3. Linux 文件系统及 ext2 文件系统

    linux 支持的文件系统类型 Ext2:     有点像 UNIX 文件系统.有 blocks,inodes,directories 的概念. Ext3:     Ext2 的加强版,添加了日志的功 ...

  4. 使用Uboot启动内核并挂载NFS根文件系统

    配置编译好内核之后,将生成的内核文件uImage拷贝到/tftpboot/下,通过tftp服务器将内核下载到开发板,使用命令:tftp 31000000 uImage.下载完成之后配置bootargs ...

  5. Bqq服务器的缓存文件放什么目录,如何使文件系统缓存失效? - How to invalidate the file system cache? - 开发者知识库...

    30 At least on Windows 7, it seems that attempting to open a volume handle without FILE_SHARE_WRITE ...

  6. 镁光ssd管理工具 linux,在 SSD 上使用 Btrfs 文件系统的相关优化

    优化挂载参数 在 Linux 中挂载 SSD 上的 btrfs,可以采用各种参数进行优化: # UUID=/btrfs defaults,ssd,discard,noatime,compress=lz ...

  7. php文本计数器源码,php 简单文本计数器[基于文件系统的页面计数器范例]

    我们的计数器经常会用到文本文件来实现,定义计数器写入的文件是当前目录下count.txt,然后我们应当测试该文件能否打开 基于文件系统的页面计数器范例 $countfile = "num.t ...

  8. Linux系统的快照是什么,linux – 文件系统快照与简单复制文件有何不同?

    通过做这个, # btrfs subvolume snapshot /mnt/1 /mnt/1/snapshot # tree /mnt/1 /mnt/1 ├── a ├── snapshot │ ├ ...

  9. 解压ubi文件_制作ubi文件系统

    制作 ubi 文件系统 目录 开发环境 ................................................................................ ...

最新文章

  1. chvg改变vg中LV的数量
  2. 常用的Javascript设计模式
  3. nginx介绍(三) - 虚拟主机
  4. 《童梦奇缘-梦幻般的羁绊》第一章-朦胧
  5. linux进程莫名其妙被kill,Linux运行程序时,程序进程莫名退出(被杀死)
  6. cglib动态代理实现及其原理浅析
  7. android中edittext监听文字变化,使用TextWatcher监听EditText变化
  8. 城市场景车路协同网络需求研究
  9. 弹性公网IP ping不通?
  10. vue-自定义组件之组件的继承
  11. 关于VSCode编码:自动猜测编码字符集
  12. apache网站漏洞修复解决办法
  13. 转-iOS- GPUImage README.md
  14. angular2项目里使用 Spin(加载中)
  15. 业余草告诉你甲骨文正式宣布将 Java EE 移交给 Eclipse 基金会
  16. CDN是什么?CDN的作用
  17. 太阳系哪些星球上有水,含水量最大的星球是哪一颗?
  18. 导入mysql文件报错:ERROR: ASCII ‘\0‘ appeared in the statement, but this is not allowed unless option --bin
  19. 远程桌面连接的计算机是什么,连接远程桌面,连接远程桌面的凭证是什么
  20. 360linux网卡驱动,驱动下载

热门文章

  1. 2021-07-22 一句话多个镜头拍摄
  2. 抖音工会9月份最新政策改革;公会主播该何去何从丨国仁网络资讯
  3. 社区团购怎么做?相对传统电商有哪些优势?
  4. 辩论及互联网商业分析
  5. 安卓逆向Xposed HOOK TB直播APP的x-sign参数(二)
  6. 在宿主机连接docker内的mysql容器实例
  7. Final Cut Pro X for Mac(FCPX专业视频剪辑软件)最新激活版
  8. 网游防沉迷系统酝酿升级 或奥运后实施
  9. JAVA完成九宫格程序
  10. 五行中的土在哪个方位_五行都代表了什么方位