在linux中一个重要的概念:一切都是文件。也就是说linux运行的核心就是对于文件系统的操作;
linux或者说unix是怎么对文件进行操作的,系统是怎么记录文件的?当新建文件和目录的时候系统干了什么?
对于这些问题我觉得还是一步一步来:
首先得说说的是物理设备(磁盘:放置所有数据的地方)
大家肯定知道磁盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。每个盘片有两面,都可记录信息。每个盘片有一个磁头。盘片被分成许多扇形的区域,每个区域叫一个扇区,每个扇区可存储128×2的N次方(N=0.1.2.3)字节信息。在一个盘面中,不同半径的圆圈就称为磁道,而对于不同盘面的,相同半径就组成了柱面。容量的计算方法:
capacity = 磁头 *扇区存储值 *磁道 *扇区数
通过上面对与数据在物理设备上的存储有了了解了吧
一整块是一个硬盘的分区,一个分区只能对应一个文件系统。
文件系统是什么?请听我慢慢道来。我们都知道硬盘分区后都要进行格式化,由于每种操作系统所设定的文件属性、权限都不相同,为了存放需要的数据,则需要将分割槽进行格式化,就被称之为操作系统能够使用的filesystem。
而对于传统的磁盘和文件系统,一个分割槽就只能格式化为一个文件系统,但是由于磁盘整列的发展,现在我们一般说一个可挂载的数据块为文件系统。
那么文件系统又是怎么运作的呢?
对于linux中文件包括属性(文件拥有者等)和权限(读写执行等)还有数据。对于属性和权限都保存在inode块中,而文件真正的数据确保存在data block中操作系统,而超级块中就保存的是整个文件系统的中容量,以及inode和data block的使用情况等
超级块(superblock):这里保存的是文件系统的信息,包括:inode和datablock的总量,已用和未用情况,以及文件系统的格式以及相关信息。(这一块出错,后果那是相当的严重)
inode块:记录文件的属性,一个文件用一个inode,并且里面包含了指向该文件的内容的block号码。
block:记录文件的真实内容,可能占有多个block。
在这里我就说这么多,如果那位同学想了解的更多,比如当block太多以至于一个inode节点记录不了,则系统为之提出了一级间接记录区以及二级记录区,请参考其他书籍。
通过上面的知识是不是对文件系统有了初步的认识呢?
下面我们通过详细介绍当创建文件时文件系统的操作过程。
对于文件系统create文件:
第一步 在inode区里面找到一个空闲的inode节点,如图节点921130
第二步 在data block区中找到一系列的空闲block块,保存文件的信息,并且将对于那个的block块块号写到第一步中的inode节点中,如图 600,922,200,并且会更新超级块中的block和inode的使用情况
第三步 将文件的入口inode与文件名字映射写入到目录项中,记住文件名字是保存在目录项中的哦。所以通过文件名字就能找到inode,找到inode就能够找到对应文件内容
目录的创建过程:
创建目录和创建文件过程大致相同:
第一步: 仍然是查找一块空闲的inode节点,并且写入相应的信息。
第二步: 也是查找空闲的block节点,这里写入的信息就不同了,为inode节点号码和文件名字键值对,这个列表其实也就是文件的入口,新建的目录至少包含两个个目录”.”和”..”其中”.”指向自己,”..”指向上级目录,我们可以通过比较对应的i-节点号来验证,887270 对应着上级目录中的child对应的i-节点号
第三步 将更新block中inode和block使用情况
第四步 添加目录的入口到父目录,即在父目录中的child入口。
文件系统是操作系统最为重要的一部分,它定义了磁盘上储存文件的方法和数据结构。文件系统是操作系统组织、存取和保存信息的重要手段,每种操作系统都有自己的文件系统,如Windows所用的文件系统主要有FAT16、FAT32和NTFS,Linux所用的文件系统主要有ext2、ext3、ext4、ReiserFS和btrfs等。
我们知道,一块磁盘,要先分区,然后再格式化,否则就无法使用。而这个格式化的过程,就是文件系统创建的过程,也可以这样理解,磁盘上的一个分区,就是一个文件系统。这个就像我们在使用windows系统的时候,把磁盘分区可以格式化成FAT32或者NTFS,但所格式化的文件系统必需是你使用的系统所能认出来的。这就是为什么NTFS的文件系统,不能直接被Linux系统所认识。同样,windows也不能认识ext3/ext4一样的道理。