日期:2014-05-16  浏览次数:20683 次

Linux学习记录--文件系统简介

文件系统简介

对于Linux来说正规的文件系统为EXT2,一个文件系统存储的数据通常包括文件权限和属性,以及文件数据,这两部分分别存储在不同的地方。

?

简单的说文件系统数据分为3部分

Superblock:记录次文件系统的整体信息,包括inode/iblock的总量,使用量,剩余量,已经文件系统的整体信息

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

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

?

我的理解

文件系统由包含多个文件,每个文件都会占用1个inode和若干iblock,inode用来存储文件权限和属性.以及文件数据存放的iblock的编号,iblock则存放文件的实际数据(每个inode和iblock都含有一个编号)

?

对于容量很大的文件系统,EXT2格式化时会分为多个block group,每个组队都有一个独立的/inode/block/superblock

?

iblock (数据区块)

iblock 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的block 大小有 1K, 2K 及 4K 三种而已。

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

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

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

?

Inode

Inode主要包含信息

1.? 该文件的存取模式(read/write/excute);

2.????? 该文件的拥有者与群组(owner/group);

3.????? 该文件的容量;

4.????? 该文件创建或状态改变的时间(ctime);

5.????? 最近一次的读取时间(atime);

6.????? 最近修改的时间(mtime);

7.????? 定义文件特性的旗标(flag),如 SetUID...;

8.????? 该文件真正内容的指向(pointer);

9.????? 其他信息

?

每个 inode 大小均固定为 128 bytes;

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

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

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

Inode 三级间接索引

inode 要记录的数据非常多,但偏偏又只有128bytes 而已,为了记录更多的数据,系统很将 inode 记录 block 号码的区域定义为12个直接,一个间接, 一个双间接与一个三间接记录区。记录区。

?

假设block为1K

?

12 个直接指向: 12*1K=12K
由于是直接指向,所以总共可记录 12 笔记录,因此总额大小为如上所示;

间接: 256*1K=256K
每笔 block 号码的记录会花去 4bytes,因此 1K 的大小能够记录 256 笔记录,因此一个间接可以记录的文件大小如上;

双间接: 256*256*1K=2562K
第一层 block 会指定 256 个第二层,每个第二层可以指定 256 个号码,因此总额大小如上;

三间接: 256*256*256*1K=2563K
第一层 block 会指定 256 个第二层,每个第二层可以指定 256 个第三层,每个第三层可以指定 256 个号码,因此总额大小如上;

总额:将直接、间接、双间接、三间接加总,得到 12 + 256 + 256*256 + 256*256*256 (K) = 16GB

?

Superblock (超级区块)

Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock,就没有这个 filesystem 了。他记录的信息主要有:

1.??????block 与 inode 的总量;

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

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

filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;

一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。

Superblock信息查看

?

通过dumpe2fs命令查看文件系统的superblock

?

举例:观察文件系统的相关信息

[root@www ~]# df   <==这个命令可以叫出目前挂载的装置
Filesystem    1K-blocks      Used Available Use% Mounted on
/dev/hdc2       9920624   3822848   5585708  41% /      
/dev/hdc3       4956316    141376   4559108   4% /home
/dev/hdc1        101086     11126     84741  12% /boot
tmpfs            371332         0    371332   0% /dev/shm

[root@www ~]#