Linux基础-EXT2文件系统

什么是文件系统?

文件系统是操作系统在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。

文件系统特性: 索引式文件系统

操作系统的文件数据除了文件实际内容外, 通常含有非常多的属性,例如 Linux 操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数等)。 文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中。 另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。这种数据存取的方法我们称为索引式文件系统(indexed allocation)。

  • uperblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
  • block:实际记录文件的内容,若文件太大时,会占用多个 block 。

Linux 的 EXT2 文件系统(inode)

Linux 文件系统 Ext2 使用的是以 inode 为基础的文件系统,即索引式文件系统。
Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 (block group) 的,每个区块群组都有独立的 inode/block/superblock 系统。Ext2 格式化后有点像底下这样:
ext2文件系统示意图

  • data block 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K 三种而已。
    • 原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化);
    • 每个 block 内最多只能够放置一个文件的数据;
    • 承上,如果文件大于 block 的大小,则一个文件会占用多个 block 数量;
    • 承上,若文件小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪费)。
  • 每个 inode 大小均固定为 128 bytes;每个文件都仅会占用一个 inode 而已;inode table 记录的文件数据至少有底下这些 :
    • 该文件的存取模式(read/write/excute);
    • 该文件的拥有者与群组(owner/group);
    • 该文件的容量;
    • 该文件创建或状态改变的时间(ctime);
    • 最近一次的读取时间(atime);
    • 最近修改的时间(mtime);
    • 定义文件特性的旗标(flag),如 SetUID…;
    • 该文件真正内容的指向 (pointer);
  • Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock ,就没有这个 filesystem
    了。他记录的信息主要有:
    • block 与 inode 的总量;
    • 未使用与已使用的 inode / block 数量;
    • block 与 inode 的大小(block 为 1, 2, 4K,inode 为 128 bytes);
    • filesystem的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;
    • 一个 valid bit数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。
  • Filesystem Description (文件系统描述说明)
    • 这个区段可以描述每个 block group 的开始与结束的 block 号码,以及说明每个区段 (superblock, bitmap, inodemap, data block) 分别介于哪一个 block 号码之间。这部份也能够用 dumpe2fs 来观察的。
  • block bitmap (区块对照表)
    • 如果你想要新增文件时总会用到 block 吧!那你要使用哪个 block 来记录呢?当然是选择‘空的 block ’来记录新文件的数据啰。 那你怎么知道哪个 block 是空的?这就得要透过 block bitmap 的辅助了。从 block bitmap 当中可以知道哪些 block 是空的,因此我们的系统就能够很快速的找到可使用的空间来处置文件啰。
    • 同样的,如果你删除某些文件时,那么那些文件原本占用的 block 号码就得要释放出来, 此时在 block bitmap 当中相对应到该 block 号码的标志就得要修改成为‘未使用中’啰!这就是 bitmap 的功能。
  • inode bitmap (inode 对照表)
    • 这个其实与 block bitmap 是类似的功能,只是 block bitmap 记录的是使用与未使用的 block 号码, 至于 inode bitmap 则是记录使用与未使用的 inode 号码。

ext2文件系统与目录的关系

当我们在 Linux 下的 ext2 文件系统创建一个目录时, ext2 会分配一个 inode 与至少一块 block 给该目录。其中,inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码; 而 block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据。也就是说目录所占用的 block 内容在记录如下的信息:
目录占用的 block 记录的数据示意图
如果想要实际观察目录内的文件所占用的 inode 号码时,可以使用 ls -i 这个选项来处理。同一个 filesystem 的某个 inode 只会对应到一个文件内容(因为一个文件占用一个 inode 之故), 因此我们可以透过判断 inode 号码来确认不同文件名是否为相同的文件喔!

参考文档:鸟哥的Linux私房菜-第八章、Linux 磁盘与文件系统管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值