鸟哥的Linux私房菜读书笔记--Linux的文件系统

· 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 的更新后,在日志记录区块当中完成该文件的纪录。

猜你喜欢

转载自blog.csdn.net/qq_41825534/article/details/82800690