【Linux文件系统】文件系统知识整理

最近有同学跟我讲他也要开始学习Linux了,我寻思着我也要开始复习了,就从Linux文件系统开始吧!

 

一. 各种各样的文件系统

  1. fat16:Windows95之前采用的文件系统。
  2. fat32(vfat):Windows98之后采用的文件系统。
  3. NTFS:windows现在采用的文件系统。
  4. ext系列:Linux Extended Filesystem。
  5. xfs:这个是CentOS中使用的文件系统,没用过,不太清楚。

二. 文件系统基础知识

(1). 关于磁盘

  1. 在以前,柱面是最小的分区单位。但是现在,扇区不仅是最小的分区单位,也是最小的物理存储单位
  2. 现在的磁盘都有EFI分区(ESP,包含boot loader等文件),需要进行格式化才能被UEFI所读取。
  3. 磁盘分区表有两种格式,一种是MBR分区表,一种是现代的GPT分区表

(2). 关于分区和格式化

为什么需要分区?其实有时候是不得不分区,比如装双系统的时候,如果不给Windows下的磁盘分区,就装不了Linux;

为什么需要格式化?因为每种操作系统所设置的文件属性和权限并不相同,为了存放文件所需的数据,才需要进行格式化。

传统的磁盘与文件系统的应用中,一个分区就只能被格式化为一个文件系统。现代我们有LVM和RAID技术,可以把一个分区格式化为多个不同的文件系统(LVM),也可以把多个分区格式化为同一个文件系统(RAID)

(3). Windows和Linux下操作系统简介

Windows下FAT操作系统有点像数据结构中的链表——他在数据区块中存放着下一个数据区块的索引。

而Linux下的ext文件系统则是索引式文件系统,他引入了所谓inode的概念,把文件的一些属性和权限全部塞到inode中,更重要的是,一个inode对应一个完整的文件,换句话说,所有数据区块的索引都存在这个inode中。

两者相比的话,由于Linux采用的是索引式文件系统,只要磁头转一圈,就可以读取所有的数据;但是Windows就不一定了。

这就是为什么当Windows需要经常进行磁盘碎片的整理——因为磁盘碎片过多,文件的读写性能下降。Linux下就没这种需求

三. ext2文件系统概论

·ext2文件系统长什么样

先看左边的表格,这里有两个比较精妙的设计

  1. boot sector放到最前面,有利于多重引导。
  2. 分了很多的block group,有利于管理(就像军队里有班,排,连的区别一样)

block group里的内容也很丰富,这里对一些内容做一个大致的介绍:

  1. super block:介绍了整个文件系统的基本信息,比如一个inode和data block的数量和大小等。
  2. descirptors: 这个则是介绍了每个区块群组开始和结束的位置
  3. bitmaps:在新建文件或删除文件的时候,需要查看有哪些inode或者data block还没有使用或已经占用,这个就是提供了这样一种对照表,有利于提高效率
  4. table:存放着inode和data blocks的实际内容,后面会详讲。

(p.s 每个block group中可能都会有所谓的super block,有的也没有,这是因为文件系统中只要有一个super block即可,其他block group中的super block都是起备份作用

四. ext2文件系统之inode table

关于inode table中只要了解三方面即可:

(1). inode中到底存放这哪些信息?

inode中存放的东西特别多,这里只举常用的:

  1. 文件读写属性和文件权限(之前已经提到过了)
  2. 文件的大小
  3. 文件的各种时间(atime, ctime, mtime)
  4. 该文件的真正指向

(2). inode的大小?

每个inode所占的磁盘空间固定为128B(新的ext4和xfs可设为256B)

根据标准,每个inode对应一个完整的文件,其中,记录数据区块的内容只有4B(一个int,32位)

为了记录大容量的文件内容,inode的数据区块采用12直接,1间接,1双间接,1三间接的做法

即占用一个data block来记录索引。如下图所示:

 

一个data block有1K, 2K, 4K三种不同的大小。这样以来,以1K大小为例,一个data block可以记录256个区块的号码。

(3). inode与目录树之间的关系

对于目录,文件系统会分配一个inode与至少一个区块给该目录,不够的话再分配一个block,因此目录的大小一般都是你block大小的整数倍,而不是你所有文件大小之和

对于文件,情况就不一样了,这主要是因为,Linux下的文件系统虽然也是根据文件的大小分配block,但是显示的却是文件的实际大小。两者并不矛盾。

另外非常重要的一点就是,文件的inode并不记录你的文件名。文件名记录在你目录的block中。因此Linux下新增或者删除文件,都与目录的w权限相关。还有一点也很重要,就是目录的data block中记录了其中文件的inode。

也就是说,Linux下的文件读取流程有点类似下面一幅图(长得挺像二分图):

五. 日志式文件系统

如果要新增一个文件,ext2文件系统会怎么做呢?

  1. 先看看对应目录有无w和x的权限,有的话才可以继续。
  2. 根据inode bitmap找到没有使用过的inode,然后把文件的一些属性写入。
  3. 根据block bitmap找到没有使用过的data block, 然后把实际的数据写入。
  4. 更新inode bitmap和block bitmap,最后更新super block的内容。

其中,由于data bitmap,inode bitmap和super block的数据是经常变动的,每次新增,删除,编辑时都会影响到这三个部分的数据,因此叫做meta data。

但是这种做法有一种缺陷——如果在上述步骤中,突然断电,就会发生meta data和实际数据区域内容不一致的情况

如果想靠元数据区和实际区进行逐一比对的话,是很费时的,这时,日志式文件系统就兴起了。

日志式文件系统跟原来的文件系统有这么两个差别:

首先,在最开始的时候,在日志记录区块中记录——我要开始记录了

然后,在结束的时候,在日志式文件系统中再记录——我结束了!

这样,我们的系统只要检查我们的日志,就可以知道哪些地方出问题了。

六.  符号链接和硬链接

Linux下有两种链接方式——symbolic link和hard link。

硬链接只是在该文件的目录下添加一条到某inode的关联记录而已

符号链接则是一种新的文件类别,指向目标文件的inode

符号链接和硬链接的比较
种类优点缺点在ll下的表现
符号链接可以链接目录需要占用inode和区块;原来文件删除后,符号链接也会失效在文件名末尾出现->字样
硬链接不用占用inode和区块不能跨文件系统,不能链接目录,只能链接所有文件第二栏数目+1

这两种链接方式都十分直观,如下图所示:(上为符号链接,下为硬链接。)

创建相关链接的命令:

ln source target    # 创建硬链接
ln -s source target    # 创建硬链接

新建目录的时候,目录中还会默认存在两个目录:./和../

./是硬链接到新建的目录的,而../是硬链接到父目录的。所以说, 新建一个目录的时候

  1. 该目录的硬链接数为2;
  2. 其父目录的链接数+1;

七. 其他

·什么是挂载?

挂在就是将文件系统和目录树结合。

·Linux文件系统的运行

编辑文件的时候我们最终要把文件保存在磁盘上,然而磁盘写入的速度比内存慢很多,因此我们不得不花时间在等待磁盘的读写上。

为此Linux使用了一个叫做异步处理的方法。在内存的数据可以分为clean和dirty两大类。

  1. 所谓clean的数据就是在内存中,没有被更改过的数据。
  2. 所谓dirty的数据,就是在内存中被更改过的数据。

Linux会将dirty的数据,不定时地写入磁盘内,当然也可以通过sync命令强行写入硬盘。

如果不正常关机,系统可能花很长时间在磁盘校验上。甚至可能造成文件系统的损坏。(好在服务器一般不关机)

·什么是Linux VFS?

VFS(virtual filesystem switch),由于Linux支持很多文件系统,所以我们可以通过vfs来管理所有的文件系统,这个比较复杂,详细的可以移步其他博客(书上也没写,逃)。

·相关命令

dumpe2fs    # 查看ext系列超级区块的信息

·相关文件

  1. /dev/shm:利用内存虚拟出来的磁盘空间,访问速度非常快(真是奇怪,不仅有所谓的虚拟内存,还有这种奇怪的东西)
  2. /proc: Linux系统需要加载的系统数据,而且是挂载到内存当中,所以不占任何的磁盘空间。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值