鸟哥的Linux私房菜(8):Linux磁盘与文件系统管理

文章目录

  • 文件系统特性
    • 为什么磁盘建好分区后还需要格式化?
    • 文件系统如何运作
      • 索引式文件系统EXT2主要的三部分
      • 索引式文件系统的存取流程
      • FAT文件系统的组成和存取流程
  • EXT2文件系统
    • 文件系统由Boot Sector和数个block group组成
    • block group的六部分
      • data block
      • inode table
      • super block

文件系统特性

为什么磁盘建好分区后还需要格式化?

因为不同的操作系统一般使用不同的文件系统
如下是Win10的NTFS
鸟哥的Linux私房菜(8):Linux磁盘与文件系统管理_第1张图片而Linux的传统文件系统是EXT2
由于新技术(LVM和Softwoare Raid)的应用,使得一个分区槽可以被格式化为多个文件系统,或者是把多个分区格式化为一个文件系统
通常把一个可被挂载的数据称为一个文件系统

文件系统如何运作

索引式文件系统EXT2主要的三部分

  1. super block:记录文件系统的总体信息,如inodedata block的总量、用量、剩余,本文件系统的格式
  2. inode:记录文件的属性(权限,UGO等)和此文件的data block编号,每个文件占一个inode,编号唯一
  3. data block:记录文件的实际内容,当文件太大时可能会占用多个block

索引式文件系统的存取流程

鸟哥的Linux私房菜(8):Linux磁盘与文件系统管理_第2张图片上图灰色格子代表inode,蓝色代表data block,如果某文件占用了编号为4的inode,而此inode中记录了2 7 13 15data block编号(有序),那根据此inode即可索引到文件的实际内容

FAT文件系统的组成和存取流程

FAT文件系统(如U盘)没有inode,如果文件占用了多个data block,则下一个block的编号记录在前一个block中。假设某文件按序占用了1 7 4 15四个block,则读出block 1以后才能知道下一个要读的是block 7。鸟哥的Linux私房菜(8):Linux磁盘与文件系统管理_第3张图片如果data block太过分散,可能会导致存取效率下降,因为磁盘无法只转一圈就读到所有data block,这时可以通过碎片整理将同一个文件所属的data block整合到一起

EXT2文件系统

文件系统由Boot Sector和数个block group组成

文件系统一开始就将inodedata block规划好了,除非重新格式化或使用命令resize2fs
EXT2文件系统在格式化时分为多个群组(block group),每个group都有独立的superblock+inode+datablock,如下
鸟哥的Linux私房菜(8):Linux磁盘与文件系统管理_第4张图片文件系统中除了有许多block group外,最前面有一个Boot Sector用于安装开机管理程序。
这样可以将不同的开机管理程序安装到不同的文件系统中,而不用覆盖一块磁盘唯一的MBR,以达到多重引导的目的

block group的六部分

data block

data block特征:

  • 用于放置文件的数据内容。每个block都有编号以方便inode的记录。

  • EXT2中支持的block大小为1K 2K 4K,在格式化fs时大小就固定了

  • 每个block内只能放置一个文件,如果没有用完,剩余的空间就浪费了。但是一个大文件可能占用多个block

  • 在选择block大小的时候要仔细考虑,太小可能会导致inode中记录太多的block编号,影响读写性能,太大可能会导致存储空间被浪费。

inode table

inode记录的文件数据:

  • 文件的存取模式(rwx)
  • owner and group
  • size
  • status time(建立或状态改变的时间,即ctime)
  • acess time (上次读取的时间,即atime)
  • modify time (上次修改内容的时间,即mtime)
  • 文件特性标记(flag):如SUID等
  • 文件真正的内容指向(pointer)

inode特征:

  • EXT2的每个inode固定大小为128 bytes,ext4和xfs可达到256bytes
  • 每个文件无论大小只占用一个inode
  • 文件系统能建立的文件数量和inode的数量有关
  • 系统读取文件时需要先找到inode,然后判断用户是否拥有相应权限,有则才能开始读data block的内容

文件size与data block、inode的关系:
记录一个block编号要占用4bytes的inode空间,但是一个大文件有可能占用数万个data block。
为了解决这个问题,引入了分级策略,类似于页表的分级
鸟哥的Linux私房菜(8):Linux磁盘与文件系统管理_第5张图片
一个inode大小为128B

  • 直接记录区有12个,此区直接存放文件的block编号,最多占用48B的大小来直接存放12个block编号
  • 间接记录区有1个,此区存放一个block编号,然后在此block内存放文件的block编号,以较小的1K block为例,可记录 1KB/ 4B = 256个编号
  • 双间接记录区一个,可记录 (1KB/ 4B) * (1KB/ 4B) = 256^2个编号
  • 三间接记录区一个,可记录 256^3个编号

所以采用1KB大小的data block时,一个文件最大可以允许的size是
(256 + 256^2 + 256^3) * 1KB = 16GB

但是2K 4K的block大小会受到文件系统本身的限制,所以这样计算不可行

super block

你可能感兴趣的:(鸟哥的Linux私房菜)