文件系统特性
磁盘分区之后需要格式化才能被操作系统使用,那为什么需要“格式化”呢?这是因为每种操作系统所设置的文件属性/权限并不相同。
linux的整个文件系统是Ext2,在默认的情况下,Windows操作系统是不会认识Linux的Ext2的。
通常,我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分区。(
LVM可以将一个分区格式化为多个文件系统,软磁盘阵列(RAID)可以将多个分区合成一个文件系统)
文件数据除了文件的实际内容外,通常包含很多的属性,例如文件权限与文件所有者群组等。文件系统通常会将这两部分的数据分别存放在不同的块,权限与属性放置到inode中,至于实际的数据则放置到data block中。另外,还有一个超级块(super block)会记录整个文件系统的整体信息,包括inode与block的总量,使用量,剩余量等。
super block:记录此文件系统的整体信息,包括inode/block的总量,使用量,剩余量以及文件系统的格式与相关信息等
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码
block:实际记录文件的内容,若文件太大时,会占用多个block
例如,某一个文件的属性和权限放到inode4号。。。
这种数据访问的方法我们叫做
索引式文件系统。有一种FAT格式的文件系统可以进行比较一下,这个文件系统没有inode,每个block号码都记录在前一个block中,如图。
Linux的Ext2文件系统
Ext2文件系统在格式化的时候基本上是区分为多个块组的,每个块组都有独立的inode/block/superblock系统。
对于每一个块组,主要的内容说明如下:
1、data block(数据块):是用来放置文件内容的地方,所支持的大小有1KB,2KB,4KB三种。原则上,block的大小和数量在格式化完就不能够再改变了(除非重新格式化),每个block只能放置一个文件的数据,如果文件小于block,则该block剩余的空间就不再使用了。
2、inodetable(inode表格):每个inode的大小为128bytes,每个文件仅会占用一个inode,系统读取文件时要先找到inode,并分析inode权限与用户是否符合,若符合才能开始实际读取block内容。一个inode号码要花掉4byte
将inode记录block号码的区域定义为12个直接、一个间接、一个双间接、一个三间接。
至于所谓的间接就是再拿一个block来当作记录block号码的记录区。举个例子:以最小的1kb来说明
12个直接指向:12*1K=12K
间接:256*1K=256K
双间接:256*256*1K
三间接:256*256*256*1K
总共加起来=16G
3、superblock(超级块):主要是记录整个文件系统相关的信息,例如block和inode的总量,block和inode的大小等等
4、block bitmap(块对照表):通过这个可以知道哪些block是空的,删除的时候也要把占用的block释放出来
5、inode bitmap(inode对照表):类似的功能
与目录树的关系
当新建一个目录时,ext2会分配一个inode与至少一块block给该目录,其中,inode记录该目录的相关权限与属性,并可记录分配到的那块block号码;而block则是记录在这个目录下的文件名与该文件名占用的inode号码数据
当新建一个文件时,ext2会分配一个inode与相对于该文件大小的block数量给该文件。
目录树的读取:
例如,想要读取/etc/passwd这个文件时,系统是如何读取的呢?
1、/的inode:通过挂载点的信息找到/dev/hdc2的inode号码为2的根目录inode,且inode具有的权限让我们可以读取该block的内容
2、/的block:取得block号码,并找到该内容有etc/目录的inode的号码
3、etc/的inode:读取etc/的block内容
4、etc/的block:找到该内容有passwd文件的inode号码
5、passwd的inode:读取passwd的block内容
6、passwd的block:将该block内容显示出来
日志文件系统
1、预备:当系统要写入文件时,会在日志记录块中记录某个文件准备要写入的信息
2、实际写入:开始写入文件的权限和数据;开始更新meta data数据
3、结束:完成数据与meta data更新后,在日志记录块中完成该文件的记录
连接文件:ln
有两种:一种是类似于windows的快捷方式功能的文件,另一种是通过文件系统的inode连接来产生新文件名(硬连接)。
hard link(硬连接)
只是在某个目录下新建一条文件名连接到某inode号码的关联记录而已。如果将其中一个“文件名”删除,其实inode和block都还在,这是可通过另一个文件名读取到数据,此外,不论使用哪个文件名来编辑,最终的结果都会写入到相同的inode和block中
symbolic link(符合连接)
创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。当源文件被删除之后,symbolic link的文件会开不了
内存交换空间swap
swap会被利用到的时候通常是在物理内存不足的时候,CPU所读取的数据都来自于内存,那当内存不足的时候,为了让后续的程序可以顺利运行,因此在内存中暂不使用的程序和数据就会被挪到swap中了。
除此之外,当你的linux主机系统进入“休眠”模式的时候,运行中的程序状态会被记录到swap中去,有某些程序运行时,本来就会利用swap的特性来存放一些数据段。