· superblock:记录此 filesystem 的整体信息,包括 inode/block 的总量、使用量、剩余量, 以及文件系统的
格式与相关信息等;
· inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的 block 号码;
· block:实际记录文件的内容,若文件太大时,会占用多个 block 。
查看Linux支持的文件系统:命令:$ ls -l /lib/modules/$(uname -r)/kernel/fs
系统目前已加载到内存中支持的文件系统有:命令:$ cat /proc/filesystems
1、文件系统特性
索引式文件系统:文件系统先格式化出inode和block的区块,将文件属性与权限数据放置在inode下,读取inode找到文件的实际放置位置的block号码来读取文件。
FAT文件系统:无法一次性读取所有block号码,需要一个个的将block读取后才知道下一个block的位置。
2、Linux的EXT2文件系统
EXT2文件系统的限制如下:Ext2 文件系统中一个 block 仅能容纳一个文件
block大小 | 1kb | 2kb | 3kb |
最大单一文件限制 | 16GB | 256GB | 2TB |
最大文件系统总容量 | 2TB | 8TB | 16TB |
· 原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化);
· 每个 block 内最多只能够放置一个文件的数据;
· 承上,如果文件大于 block 的大小,则一个文件会占用多个 block 数量;
· 承上,若文件小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪费)。
例题:
假设你的 Ext2 文件系统使用 4K block ,而该文件系统中有 10000 个小文件,每个文件大小均为 50bytes, 请问此时你的磁盘浪费多少容量?
答:由于 Ext2 文件系统中一个 block 仅能容纳一个文件,因此每个 block 会浪费『 4096 - 50 = 4046 (byte)』, 系统中
总共有一万个小文件,所有文件容量为:50 (bytes) x 10000 = 488.3Kbytes,但此时浪费的容量为:『 4046 (bytes) x
10000 = 38.6MBytes 』。想一想,不到 1MB 的总文件容量却浪费将近 40MB 的容量,且文件越多将造成越多的磁
盘容量浪费。
3、EXT2/EXT3/EXT4文件存取与日志文件系统的功能
新建目录或文件:
文件系统的行为如下:1. 先确定用户对于欲新增文件的目录是否具有 w 与 x 的权限,若有的话才能新增;
2. 根据 inode bitmap 找到没有使用的 inode 号码,并将新文件的权限/属性写入;
3. 根据 block bitmap 找到没有使用中的 block 号码,并将实际的数据写入 block 中,且更新 inode 的 block 指向数据;
4. 将刚刚写入的 inode与block 数据同步更新inode bitmap与 block bitmap,并更新 superblock 的内容。
我们将inode table与block bitmap 称为数据存放区域,superblock、block bitmap 与inode bitmap 等区段称为metadata(中介资料),因为superblock、inode bitmap及block bitmap的数据是经常变动的,每次增加移除编辑是都可能影响到这三部分的数据。
为了避免文件系统不一致的情况发生,在filesystem当中规划处一个区块,该区块专门在记录写入或修订文件的时步骤
<1> 预备:当系统要写入一个文件时,会先在日志记录区块中纪录某个文件准备要写入的信息;
<2>实际写入:开始写入文件的权限与数据;开始更新 metadata 的数据;
<3>结束:完成数据与 metadata 的更新后,在日志记录区块当中完成该文件的纪录。