- Linux中常见文件系统:Ext3、Ext4、XFS、SWAP
- 文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sector,每个扇区存储512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块block。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4KB,即连续八个sector组成一个block
- 文件数据存储在块中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode,中文译名为索引节点,也叫i节点。
- Ext2文件系统在格式化的时候,基本上是区分多个区块群组(block group)的,每个block group都有独立的inode/block/superblock系统。
- 一个文件必须占用一个inode,但至少占用一个block
- inode包含很多的文件元信息,但不包含文件名,例如:字节数、属主UserID、属组GroupID、读写执行权限、时间戳等。而文件名存放在目录当中,但Linux系统内部不使用文件名,而是使用inode号码识别文件。对于系统来说文件名只是inode号码便于识别的别称。
- 在Ext2中,inode记录block号码的区域定义为12个直接,一个间接,一个双简介,一个三间接记录区,Ext4的inode容量扩大到256bytes了,可以支撑16TB的单一文件和16EB的单一文件系统
- 表面上,用户通过文件名打开文件,实际上,系统内部将这个过程分为四步:
1、系统找到这个文件名对应的inode号码;2、通过inode号码,获取inode信息;3、根据inode信息,找到文件数据所在的block,并读出数据;4、系统还要根据inode信息,看用户是否具有访问的权限,有就指向对应的数据block,没有就返回权限拒绝。
- inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。每个inode的大小,一般是128字节或256字节。通常情况下不需要关注单个inode的大小,而是需要重点关注inode总数。inode总数在格式化的时候就确定了。可以通过df -i查看硬盘分区的inode总数和已使用情况
- inode特有现象:
1、文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用:find ./* -inum 节点号 -delete;2、移动文件或重命名文件,只是改变文件名,不影响inode号码;3、打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名;4、由于硬盘分区的inode总数在格式化后就已经固定,而每个文件必须有一个inode,因此就有可能发生inode节点用光,但硬盘空间还剩不少,却无法创建新文件。同时这也是一种攻击的方式。
- superblock是记录整个文件系统相关信息的地方,没有superblock也就没有这个文件系统了。记录的信息可以通过dump2fs查看(Ext4以下有效)主要有:
1、block与inode的总量;2、未使用与已使用的inode/block数量;3、block与inode的大小;4、文件系统的挂着时间、最近一次写入数据的时间等等等
- 一个文件系统只有一个superblock,第一个block group内会含有superblock之外,后续的block group不一定含有superblock,如果含有,则该superblock主要是为第一个block group内的superblock做备份
附:
inode table格式
debugfs 1.42.13 (17-May-2015)
debugfs: open -w /dev/sda5
debugfs: mi <2228474>
Mode [0100664]
User ID [1000]
Group ID [1000]
Size [5]
Creation time [1487406129]
Modification time [1487406127]
Access time [1487406151]
Deletion time [0]
Link count [1]
Block count high [0]
Block count [8]
File flags [0x80000]
Generation [0x15fa265]
File acl [0]
High 32bits of size [0]
Fragment address [0]
Direct Block #0 [127754]
Direct Block #1 [4]
Direct Block #2 [0]
Direct Block #3 [0]
Direct Block #4 [1]
Direct Block #5 [5502407]
Direct Block #6 [0]
Direct Block #7 [0]
Direct Block #8 [0]
Direct Block #9 [0]
Direct Block #10 [0]
Direct Block #11 [0]
Indirect Block [0]
Double Indirect Block [0]
Triple Indirect Block [0]