Linux-EXT文件系统

4.文件系统

本章同步视频:https://edu.51cto.com/sd/e4874

4.3 EXT2/EXT3/EXT4

4.3.1 文件系统

       磁盘是用来储文件的,但是必须先把磁盘格式化为某种格式的文件系统,才能存储文件。文件系统的目的就是组织和管理磁盘中的文件。在 Linux 系统中,最长见的是 ext2 系列的文件系统。其早期版本为 ext2,后来又发展出 ext3 和 ext4。ext3 和 ext4 虽然对 ext2 进行了增强,但是其核心设计并没有发生变化,所以我们仍是以较老的 ext2 作为演示对象。

1.链式文件系统 FAT

                                              image.png

2.索引文件系统

image.png

4.3.2 EXT2

image.png

1.Boot Sector

       Boot Sector,是用来存储磁盘分区信息和启动信息,任何文件系统给都不能缺少启动块。启动块大小是1KB,是由PC标准定义的。

2.Block

       Block 就是逻辑块。对于 ext2 文件系统来说,硬盘分区首先被分割为一个一个的逻辑块(Block),每个 Block 就是实际用来存储数据的单元,大小相同,Block 按照0,1,2,3 的顺序进行编号,第一个 Block 的编号为 0。

       ext2 文件系统支持的 Block 的大小有 1024 字节、2048 字节和 4096 字节,Block 的大小在创建文件系统的时候可以通过参数指定,如果不指定,则会从 /etc/mke2fs.conf 文件中读取对应的值。

       原则上,Block 的大小与数量在格式化后就不能够发生改变了,每个 Block 内最多只会存放一个文件的数据(即不会出现两个文件的数据被放入同一个 Block 的情况),如果文件大小超过了一个 Block 的 size,则会占用多个 Block 来存放文件,如果文件小于一个 Block 的 size,则这个 Block 剩余的空间就浪费掉了。

[root@localhost tmp]# dumpe2fs /dev/sda1 |grep "Block size"

dumpe2fs 1.42.9 (28-Dec-2013)

Block size:               1024

3.Block Group

       启动块之后才是ext2文件系统的开始。ext2文件系统将整个分区划分为大小相等的块组(Block Group),每个块组由以下部分组成:

l  Superblock(超级块)

l  Group Description(组描述)

l  Block bitmap(块位图)

l  Inode bitmap(inode 位图)

l  Inode table(inode 表)

l  Data Blocks(数据块)

4.Superblock(超级区块)

 (1)Superblock     

       Superblock 是记录整个 filesystem 相关信息的地方,大小为 1024 Bytes。其实上除了第一个 block group 内会含有 superblock 之外,后续的 block group 不一定都包含 superblock,如果包含,也是做为第一个 block group 内 superblock 的备份。superblock 记录的主要信息有:

n  block 与 inode 的总量

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

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

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

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

(2)查看Superblock

[root@localhost tmp]# dumpe2fs -h /dev/sda1

5.Group Description(组描述)

       Group Description 用来描述每个 group 的开始与结束位置的 block 号码,以及说明每个块(superblock、bitmap、inodemap、datablock) 分别介于哪一个 block 号码之间。

6.Block bitmap(区块对照表)

       在创建文件时需要为文件分配 block,届时就会选择分配空闲的 block 给文件使用。通过 block bitmap 可以知道哪些 block 是空的,因此系统就能够很快地找到空闲空间来分配给文件。同样的,在删除某些文件时,文件原本占用的 block 号码就要释放出来,此时在 block bitmap 当中相对应到该 block 号码的标志就需要修改成"空闲"。这就是 block bitmap 的作用。

7.Inode bitmap(inode 对照表)

       inode bitmap 与 block bitmap 的功能类似,只是 block bitmap 记录的是使用与未使用的 block 号,而 inode bitmap 则记录的是使用与未使用的 inode 号。

8.Inode table   

       Inode table 中存放着一个个 inode,inode 的内容记录文件的属性以及该文件实际数据是放置在哪些 block 内,inode 记录的主要的文件属性如下:

l  该文件的读写权限(rwx)

l  该文件的拥有者和所属组(owner/group)

l  该文件的容量

l  该文件的 ctime(创建时间)

l  该文件的 atime(最近一次的读取时间)

l  该文件的 mtime(最近修改的时间)

l  该文件的特殊标识,比如 SetUID 等

l  该文件真正内容的指向(pointer)

       inode 的数量与大小也是在格式化时就已经固定了的,另外 inode 还有如下特点:

l  每个 inode 大小均固定为 128 Bytes(新的 ext4 为 256 Bytes)

l  每个文件都仅会占用一个 inode

l  文件系统能够创建的文件数量与 inode 的数量相关

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

9.Data block

       Data block 是用来存放文件内容的地方。需要注意的是,由于 block 大小的差异,会导致文件系统能够支持的最大磁盘容量和最大单个文件的大小并不相同。

4.3.3 数据块寻址

image.png

4.3.4 文件存取

1.Linux的目录项

       当我们在 Linux 下的档案系统建立一个目录时,档案系统会分配一个 inode 与至少一块 block 给该目录。其中,inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码; 而 block 则是记录在这个目录下的档名与该档名占用的 inode 号码资料。

image.png

 

image.png

 2.Linux文件的读取     

       以读取文件/var/log/message为例,讲解读取文件messages时,从磁盘中查找/读取文件内容的过程。

image.png

                   i.           首先系统通过挂载信息(在超级块中,位置固定)找到根目录(/)的inode编号,根目录对应的inode是固定的(通常为2号)。

                 ii.           根据根目录的inode编号(2号),在inode table中找到对应的inode信息,从inode信息中找到存储根目录信息的目录块编号,根据编号找到数据块,如图中标记为‘/’的方格,该目录块存储的信息如图中的dentry所示。

                iii.           从目录块中存储的信息中,找到文件名(目录名)为var所对应的inode编号(2667711)。

                iv.           在inode table中找到编号为2667711的inode信息,从该inode信息中,找到var目录存放的数据块。从var数据块存储的信息中,找到log目录对应的inode编号(267850)。

                 v.           重复上述步骤,直至找到message文件对应的inode结点,根据inode结点中记录的message文件内容对应的数据块,从数据块中读取内容。

4.3.5 EXT3

(1)EXT3与EXT2的区别

u  ext2和ext3的格式完全相同,只是在ext3硬盘最后面有一部分空间用来存放Journal(日志)的记录;

u  在ext2中,写资料到硬盘中时,先将资料写入缓存中,当缓存写满时才会写入硬盘中;

u  在ext3中,写资料到硬盘中时,先将资料写入缓存中,鼗缓存写满时系统先通知Journal,再将资料写入硬盘,完成后再通知Journal,资料已完成写入工作;

u  是否有Journal的差别:

l  在ext2中,系统开机时会去检查有效位(Valid bit),如果值为1,表示系统上次有正常关机;如果为0,表示上次关机未正常关机,那系统就会从头检查硬盘中的资料,这样时间会很长;

l  在ext3中,也就是有Journal机制里,系统开机时检查Journal的资料,来查看是否有错误产生,这样就快了很多;

u  tune2fs –j 将ext2转换成ext3

(2)日志式文件系统 (Journaling filesystem)

u  预备:当系统要写入一个档案时,会先在日志记录区块中纪录某个档案准备要写入的信息;

u  实际写入:开始写入档案的权限与数据;开始更新 metadata 的数据;

u  结束:完成数据与 metadata 的更新后,在日志记录区块当中完成该档案的纪录。

4.3.6 EXT4

n  Ext4的文件系统容量达到1EB,而文件容量则达到16TB

n  理论上支持无限数量的子目录

n  Ext4文件系统使用64位空间记录块数量和i-节点数量

n  Ext4的多块分配器支持一次调用分配多个数据块


猜你喜欢

转载自blog.51cto.com/5482173/2490759