1、档案系统的运作:
作业系统的档案资料除了档案实际内容之外,还有很多的属性,例如档案权限rwx,与档案属性(拥有者、群组、时间参数等)。他们的存放如下:
superblock:记录此filesystem 的整体资讯,包括inode/block的总量、使用量、剩余量, 以及档案系统的格式与相关资讯等;
inode:记录档案的属性,一个档案占用一个inode,同时记录此档案的资料所在的block 号码;
block:实际记录档案的内容,若档案太大时,会占用多个block 。
每个inode和block都有编号。当进行读取档案的数据时,找到档案的inode ,那么自然就会知道这个档案所放置资料的block 号码,进而读取出档案内容。我们将inode 与block 区块用图解来说明一下,如下图所示,档案系统先格式化出inode 与block 的区块,假设某一个档案的属性与权限资料是放置到inode 4 号(下图较小方格内),而这个inode 记录了档案资料的实际放置点为2, 7, 13, 15 这四个block 号码,此时我们的作业系统就能够据此来排列磁碟的读取顺序,可以一口气将四个block 内容读出来!那么资料的读取就如同下图中的箭头所指定的模样了。这种资料的存取方法为索引式档案系统(indexed allocation)。
还有一种档案系统是FAT格式,FAT这种格式的档案系统并没有inode存在,所以FAT没有办法将这个档案的所有block在一开始就读取出来。每个block号码都记录在前一个block当中,因此需要一个一个读取,才能走入下一个block,进而将资料全部读取出来,如下图所示,这种方式类似于目前大热的区块链技术。区块链由一个个相连的区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。每个区块包含两个部分:区块头(Head)(记录当前区块的元信息)和区块体(Body)(实际数据)。区块头包含了当前区块的多项元信息:生成时间、实际数据(即区块体)的 Hash、上一个区块的 Hash。通过Hash值向下读取数据。这种档案系统需要时常进行磁盘重组。
区块链介绍:
https://www.cnblogs.com/zhuweiheng/p/8206188.html
2、linux的EXT2档案系统
档案系统在一开始时就将inode与block规划好了,除非重新格式化或利用resize2fs等指令变更档案系统大小,否则inode与block固定后就不再变动。EXT2档案系统在格式化的时候基本上是区分为多个区块群组的,每个区块群组都有独立的inode/block/superblock。划分后如下所示:
在整体的规划当中,档案系统最前面有一个开机磁区(boot sector),这个开机磁区可以安装开机管理程式,如此一来我们就能够将不同的开机管理程式安装到个别的档案系统最前端,而不用覆盖整颗磁盘唯一的MBR(Master Boot Record),这样也才能够制作出多重开机的环境。
(1)data block(资料区块)
data block是用来放置档案内容资料地方,在Ext2档案系统中所支援的block大小有有1K, 2K及4K三种而已。在格式化时block的大小就固定了,且每个block都有编号,以方便inode的记录。由于block大小的差异,会导致该档案系统能够支援的最大磁碟容量与最大单一档案容量并不相同。因为block大小而产生的Ext2档案系统限制如下:
Block 大小 | 1KB | 2KB | 4KB |
最大单一档案限制 | 16GB | 256GB | 2TB |
最大档案系统总容量 | 2TB | 8TB | 16TB |
虽然Ext2已经能够支援大于2GB以上的单一档案容量,不过某些应用程式依然使用旧的限制,也就是说,某些程式只能够捉到小于2GB以下的档案而已。
block限制:
block 的大小与数量在格式化之后就已固定(除非重新格式化);
每个block 内最多放置一个档案的资料;如果档案大于block大小,则会存储于多个bolck;若档案小于block大小,则该block的剩余容量不会再被使用。
(2)inode table(inode表格)
inode记录内容如下:
该档案的存取模式(read/write/excute);
该档案的拥有者与群组(owner/group);
该档案的容量;
该档案建立或状态改变的时间(ctime);
最近一次的读取时间(atime);
最近修改的时间(mtime);
定义档案特性的旗标(flag),如SetUID...;
该档案真正内容的指向(pointer)
inode限制:
每个inode 大小均固定为128 bytes (新的ext4 与xfs 可设定到256 bytes);
每个档案都仅会占用一个inode ,因此档案系统能够建立的档案数量与inode 的数量有关;
系统读取档案时需要先找到inode,并分析inode 所记录的权限与使用者是否符合,若符合才能够开始实际读取 block 的内容
(3)Superblock(超级区块)
superblock记录内容:
block 与inode 的总量;
未使用与已使用的inode / block 数量;
block 与inode 的大小(block 为1, 2, 4K,inode 为128bytes 或256bytes);
filesystem 的挂载时间、最近一次写入资料的时间、最近一次检验磁碟(fsck) 的时间等档案系统的相关资讯;
一个valid bit 数值,若此档案系统已被挂载,则valid bit 为0 ,若未被挂载,则valid bit 为1
(4)Filesystem Description(档案系统描述说明)
描述每个block group的开始与结束的block号码,以及说明每个区段(superblock, bitmap, inodemap, data block)分别介于哪一个block号码之间
(5)block bitmap(区块对照表)
bitmap记录block的状态
(6)inode bitmap(inode对照表)
记录inode使用与被使用的状态
dumpe2fs:查询Ext家族superblock资讯的指令
3、目录树
目录:
当在linux下的档案系统中建立一个目录时,档案系统会分配一个inode与至少一块block给该目录。inode记录该目录的权限和属性,和分配到的block的号码。block记录在这个目录下的档案名和该档案名所占用的inode号码资料。
档案:
在Linux下的ext2建立一个一般档案时,ext2会分配一个inode和与档案大小相当的block数量给该档案。
目录树读取:
inode本身不记录档名,档名记录在目录的block中。因此在需要读取档案时,需要先经过目录的inode和block,获得待读取档案的inode号码,进而获得block中档案的实际内容。档案读取时是从根目录的inode开始查询。
4、EXT2/EXT3/EXT4档案的存取与日志式档案系统的功能