【鸟哥Linux学习笔记】关于Linux磁盘管理和文件系统(1)

文件系统:

每个分区存在一个文件系统,每种操作系统对于文件的一些规定不同,所以要有不同的文件系统。

文件系统存放在硬盘的分区内,分检系统中有inode块,这些块用来在磁盘上存储文件的属性信息以及文件数据存储的block块号,而super block块则记录这整个文件系统的信息,包括各个块使用的总量.

并且文件系统一开始就会把inode, block规划好,如果不重新分区或者改变分区大小,这两个是不会变的。

在LINUX中的EXT2文件系统中使用的是索引式文件系统,即每一个文件内容的索引都会被放在相应的inode块内,这样,很多inode块就会形成一个索引表,而索引表里面的任何一个索引都会连接着下面很多block的块,操作系统也就会根据inode块内记录的数据存放在block的号码来合理安排读取数据的顺序。


而FAT格式,没有把类似指针的索引存在一个单独的块中,他类似于链表,把每一个数据块的编号都存在它的直接前驱里面,这样来寻找。这样的文件系统,没有办法一次性获得所有数据所在block的块号,只能按照链表一个个的去寻找,这也是链表这种数据结构不能够随机存储的弊端。但是EXT2就不是这样,她在inode索引块中可以知道所存放数据的所有的block块号。


碎片整理:

由于在磁盘上读取文件的时候,我们需要通过转动磁盘来读取扇区内的数据,如果一个文件的Block块太过分散,那么磁盘的读取效率就会很低很低,那么就会利用到碎片整理技术,将同一个文件的Block块都集中在一起,这样就增加磁盘的读取效率。



EXT2文件系统:

文件系统最前面是一个启动扇区,里面可以插入引导加载 程序,这样有利于创建多重引导环境,而且不会覆盖一个块硬盘唯一一个的MBR。EXT2系统中,block块的大小只有1kb 2kb 4kb三种,这些大小在分区的时候就固定了。

(1)block块:在分区的的时候,大小和数量就已经确定。每个block块最多能够放置一个数据。block块的大小也要合理规定,否则太小的话,数据存储离散严重,要存储多个块,如果太大的话又会有很多的内碎片,造成空间浪费。

(2)inode块: 也是在分区的时候大小就已经固定,为128B,每个文件有一个inode,因此一个文件系统,也就是一个分区内能够创建的文件的数量是和这个分区内的inode块数成正比的。系统在读取文件的时候,因为inode里面记录了很多有关权限和属性的信息,所以也会先读取文件的inode里面的内容在决定是否能够正常阅读。每次记录一个Block块的信息都需要耗费4b。


其实,说到这里,学过OS的人都知道,文件系统这种存储 方式实际上和内存的存储方式也是一样的,inode就像每一个程序的页表一样,一个程序有一个页表,那么一个文件也有一个Node。在内存管理中,如果一个程序的信息太多,页表不能再大,装不下那么多信息,操作系统就会使用一个叫做间接多级页表的方式也离散存储页表,也就是说利用计算机中离散的空间来分散存储一个大的页表。在文件系统中也是一样,如果inode存储不了那么多block的编号信息,那么inode就会利用间接,双间接,这种技术,来吧inode里面的信息分级存储,一些Block块内只是存储了block块存储信息的下一个block块的信息而已。这样一来,通过多级离散存储,就可以解决一些大文件的inode存不下他所有的Block块的问题。


所以一个inode内可以直接存储12个block的信息,然后有一个间接去,一个双间接区,还有一个三间接区。



dumpe2fs命令:查看superblock的信息






文件系统与目录树的关系:
当我们在EXT2系统中创建一个目录的时候,系统就会分配给这个目录一个inode和至少一个block块。inode里面将会存放该目录的相关属性和权限,并记录在创建目录的时候就已经分配的那个block的块号。而一开始分配的那个Block块将会记录整个目录的文件目录,并且记录每一个文件实际用到的inode的号码。当我们在创建文件的时候,文件系统会分配给这个文件一个inode块还有和文件大小相近数量的block块。文件系统最顶层的目录一般Inode的号码为2。


并且,在这里要注意的是,一个Inode要比一个block要小得多,当我们一个inode的12个直接指向不够用的时候,我们就需要借助inode里面的其他的间接位置,来额外分配block块来记录这个文件的一些信息。一个目录的Inode是并不记录文件目录的,相反,是在创建目录的时候分配给的那一块block来记录的。所以在重命名,增加,删除文件才会对目录的w权限看的很重。因为我们每次读取文件的时候必然会经过目录的inode和block。


当我们在创建一个文件的时候,我们需要进行以下步骤:

1.是否对目录有W权限

2.检测目录的inode bitmap 和 block bitmap,如果都有空闲空间,那么就为这个文件分配Inode获得block块,然后把相应的信息和数据写入,最后要把这一切做的更改都要更新到super block和上面两个位示图中,因为这三个代表了当前文件系统的状态,要实时更新。


日志文件系统:在文件创建前要在日志文件中加以记录,并且在文件的创建和更新工作完成之后也要相应的把当前的文件状态记录在这个日志文件中。这样的话,就可以通过检查这个文件来进行确定是不是在文件系统中有着数据不一致性。日志功能是在ext3的版本之后才加入的。



VFS(LINUX内核管理文件系统的功能):他是操作系统内核用来管理一切可以识别的文件系统的功能。他会替用户来做好文件系统的读取工作。在你读取两个不同文件系统内的文件的时候,并不需要去指定用特定的方式读取,这些工作都会由VFS来做.


df 与du命令:

df:列出文件系统的整体磁盘使用量。 -a是列出所有的特殊的文件系统,这些文件系统的容量可能是0,因为有些文件系统是直接挂载到内存上的。不加任何参数的时候使用的单位是1kb,但是加上-h参数的时候,就会以人们习惯的大小单位来显示。 -T是列出文件系统的具体类型。在使用df的过程当中,当我们将文件名或者目录名加在df命令中,命令的执行结果会将该文件和目录所在分区的容量显示出来。-i则是列出每个文件系统关于inode的一些信息。


du:不加任何参数的du命令会分析出当前所在的目录的文件和各个目录所占用的磁盘空间。实际显示的时候并不会列出目录下面的文件的容量,只会列出当前目录下面所有目录的容量。说的比较绕,实际上就是不加参数的du只显示目录的容量,加了-a参数之后会显示全部的包括文件的容量信息。 du最常用的命令就是du -sm这个命令行后面加上目录名,将会列出这个目录下所有子目录的使用总量,并且以MB的单位来显示,-s的功能就是仅仅只列出一级子目录,不会列出更高级的子目录。


df和du的不同之处在于,df的结果是查询superblock里面的信息得到的,因为这里面有所有的分区信息,但是du是通过实际的在文件系统内进行查找统计的。


关于连接文件:

 众所周知,文件的连接分为两种,一种是硬连接,一种是软连接。

硬连接:

文件系统中,文件名是保存在文件系统创建时候分配的block块内的目录里的,而每一个文件名都相应的和一个Inode块相连,而inode块将对应于一个或者几个block块,这是文件内容的实际存在。所以可以看出,文件名其实和文件内容是没有关系的,上述关系可以分成三个等级,第一级是文件名,第二级是inode,第三级才是inode对应的文件内容所在的block块,所以可能会出现多个文件名对应于一个inode 块的情况,这就是所谓的硬连接。所谓的硬连接就是在文件系统的目录内添加一个文件名链接到指定Inode块的记录。这样做目的就是为了安全,当你不小心删除一个文件名的时候可以通过另一个文件名找到相应的文件。还有一个方便之处就在于,无论你对于哪个文件名进行编辑,最终修改都会写入到相对应的文件内容的block块内。并且,增加硬连接实际上只是在目录block块内写入一个文件名,并没有耗费多余的块。另外,硬连接只能在一个文件系统中设置,是不能够跨系统的。另一个限制就是说不能够创建目录硬连接,因为一旦你对目录创建的硬连接之后,就同时要对被连接目录下面的所有的文件进行创建硬连接才行,并且在以后创建删除文件方面也是非常复杂的。


软连接:
相对于硬连接来说,软连接是一个独立的文件,但是这个文件的内容较小,不过也确实占用了node还有block,他就像快捷方式一样,指向被连接的文件,两文件的inode号不同,一旦源文件丢失,那么这个连接文件也就没什么用了。在修改软连接文件的时候,实际上也是对源文件的修改。并且软连接是可以对目录做的。


在创建了一个软连接之后,要想访问到源文件,首先要根据inode号找到软连接对应的block号,然后再inode为2的目录Inode找到目录的block,之后找到源文件的inode号,在对应的block即可找到真正的文件内容。


设置文件连接的命令是ln , 如果不加任何参数的话,那么就是设置硬连接,如果加了-s参数就是软连接。而且软连接的文件的大小和原来文件的文件名是有关系的。




在创建一个新目录的时候,这个新目录下将有以下内容(mkdir /xuran/test):

/xuran/test             代表创建的目录

/xuran/test/.           同样代表创建的这个目录

/xuran/test/..      代表上一层目录也就是xuran.

所以在创建一个目录的时候,默认的连接数为2,因为有前面两个inode都会指向在这个目录创建时候所创建的block块。并且上层目录的连接数也会加1,以内有上面第三个东西的存在,他也是作为上一层目录的一个连接出现。所以上一层目录的连接数会增加。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值