Linux文件系统

前言

       磁盘分区完毕后还需要进行格式化(format),之后操作系统才能够使用这个文件 系统。进行“格式化”这是因为每种操作系统所设置的文件属性/权限并不相 同, 为了存放这些文件所需的数据,因此就需要将分区进行格式化,以成为操作系统能够利 用的“文件系统格式(filesystem)”。

       每种操作系统能够使用的文件系统并不相同。 举例来说,windows 98 以前的微软操作系统主要利用的文件系统是 FAT (或 FAT16),windows 2000 以后的版本 有所谓的 NTFS 文件系统,至于 Linux 的正统文件系统则为 Ext2 (Linux second extended file system, ext2fs)这一个。此外,在默认的情况下,windows 操作系统是不会认识 Linux 的 Ext2 的。

      目前我们在格式化 时已经不再说成针对 partition 来格式化了, 通常我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分区。

 

inode与block

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

每个 inode 与 block 都有编号,至于这三个数据的意义可以简略说明如下:

    superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;

    inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;

    block:实际记录文件的内容,若文件太大时,会占用多个 block 。

 

       由于每个 inode 与 block 都有编号,而每个文件都会占用一个 inode ,inode 内则有文件数据 放置的 block 号码。 因此,我们可以知道的是,如果能够找到文件的 inode 的话,那么自然 就会知道这个文件所放置数据的 block 号码, 当然也就能够读出该文件的实际数据了。这是 个比较有效率的作法,因为如此一来我们的磁盘就能够在短时间内读取出全部的数据, 读写 的性能比较好,这种数据存取的方法我们称为索引式文件系统(indexed allocation)。

 

补充:

       我们惯用的U盘(闪存),U盘使用的文件系统一般 为 FAT 格式。FAT 这种格式的文件系统并没有 inode 存在,所以 FAT 没有办 法将这个文件的 所有 block 在一开始就读取出来。每个 block 号码都记录在前一个 block 当中, 他的读取方 式有点像下面这样:们假设文件的数据依序写入1->7->4->15号这四个 block 号码中, 但这个文件系统没 有办法一口气就知道四个 block 的号码,他得要一个一个的将 block 读出后,才会知道下一个 block 在何处。 如果同一个文件数据写入的 block 分散的太过厉害时,则我们的磁头将无法在 磁盘转一圈就读到所有的数据, 因此磁盘就会多转好几圈才能完整的读取到这个文件的内 容。

 

Block Group

 

Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 (block group) 的,每个区块群组都有独立的 inode/block/superblock 系统。

每一个区块群组(block group)有六个主要内容。

下面只列出三种。

 

data block (数据区块)

data block 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K 三种而已。在格式化时 block 的大小就固定了,且每个 block 都有编号,以方便 inode 的记录

 

Ext2 文件系统对于data block的其他限制:

原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化);

 每个 block 内最多只能够放置一个文件的数据;

承上,如果文件大于 block 的大小,则一个文件会占用多个 block 数量;

承上,若文件小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪 费)。

 

inode table (inode 表格)

每个 inode 大小均固定为 128 Bytes (新的 ext4 与 xfs 可设置到 256 Bytes);

每个文件都仅会占用一个 inode 而已;

承上,因此文件系统能够创建的文件数量与 inode 的数量有关;

系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与使用者是否符合,若符 合才能够开始实际读取 block 的内容。

 

inode 要记录的数据非 常多,但偏偏又只有 128Bytes 而已, 而 inode 记录一个 block 号码要花掉 4Byte ,假设我 一个文件有 400MB 且每个 block 为 4K 时, 那么至少也要十万笔 block 号码的记录。为此我们的系统很聪明的将 inode 记录 block 号码的区域定 义为12个直接,一个间接, 一个双间接与一个三间接记录区。

至于所谓的间接就是再拿一个 block 来当作记录 block 号码的记录区,如果文件太大时, 就会使用间接的 block 来记录号码。

同理,如果文件持续长大,那么就会利用所谓 的双间接,第一个 block 仅再指出下一个记录号码的 block 在哪里, 实际记录的在第二个 block 当中。依此类推,三间接就是利用第三层 block 来记录号码。

 

Superblock (超级区块)

记录的信息主要有:

block 与 inode 的总量;

未使用与已使用的 inode / block 数量;

block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128Bytes 或 256Bytes);

其余内容略。

      每个 block group 都可能含有 superblock ,但是我们也说一个文件系统应该仅有一 个 superblock 而已,事实上除了第一个 block group 内会含有 superblock 之外,后续的 block group 不一定含有 superblock , 而若含有 superblock 则该 superblock 主要是做为第一个 block group 内 superblock 的备份。

 

注:本文是基于 鸟哥Linux私房菜基础学习篇 第七章部分内容所做的摘录。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值