文件系统知识总结

一. 硬盘:
1. 存储介质:硬盘、光盘、软盘、Flash盘、磁带、网络存储设备等。
2. 硬盘信息: 《硬盘信息》
3. 磁盘的分区:这是针对大容量的存储设备来说的,主要是指硬盘;对于大硬盘,我们要合理规划分区,所以要谈到硬盘的分区。
二.文件系统:
1.是什么?
文件系统是操作系统最为重要的一部分,它定义了磁盘上储存文件的方法和数据结构。文件系统是操作系统组织、存取和保存信息的重要手段,每种操作系统都有自己的文件系统。如,Windows所用的文件系统主要有FAT16、FAT32和NTFS,Linux所用的文件系统主要有ext2、ext3、Ext4和ReiserFS等。
2. 怎么创建?
分区格式化的过程就是创建文件系统的过程。所格式化的文件系统必需是你使用的操作系统所能认出来的,否则将无法使用这个分区。这就是为什么NTFS的文件系统,不能直接被Linux系统所认识。
4.swap:它是Linux中一种专门用于交换分区的swap文件系统。Linux是使用这一整个分区作为交换空间。一般这个swap格式的交换分区是主内存的2倍。在内存不够时,Linux会将部分数据写到交换分区上。
三.文件系统工作原理:
1.现在的操作系统的文件数据除了文件实际内容外,还有很多文件的属性,文件系统通常会将这两部分数据分别存放在不同的区块中,文件属性存放在inode中,文件内容存放在block中,每个inode与block都有编号,inode内有block的编号,如果能找到inode就能找到block。另外,还有一个超级区块(superblock),会记录整个文件系统的整体信息。
2.Superblock, Inode, Dentry 和 File 都属于元数据(Metadata),即:描述数据的数据,主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件纪录等功能。

3. superblock:

Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock ,就没有这个 filesystem 了.

记录的信息主要有:

  • block 与 inode 的总量
  • 未使用与已使用的 inode / block 数量
  • block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes)
  • filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息
  • 一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1

4. boot sector 与 superblock 的关系

block 为 1024 bytes (1K) 时:
如果 block 大小刚好是 1024 的话,那么 boot sector 与 superblock 各会占用掉一个 block , 所以整个文件系统图示就会如同图 1.3.1 所显示的那样,boot sector 是独立于 superblock 外面的!

如果 block 大于 1024 的话:

那么 superblock 将会在 0 号,在第一个 block 内 superblock 仅占有 1024-2047 ( 由 0 号起算的话)之间的咚咚,至于 2048bytes 以后的空间就真的是保留啦!而 0-1023 就保留给 boot sector 来使用

5. inode: 

用于存储文件的各属性,包括:

    - 所有者信息:文件的owner,group;

    - 权限信息:read、write和excite;

    - 时间信息:建立或改变时间(ctime)、最后读取时间(atime)、最后修改时间(mtime);

    - 标志信息:一些flags;

    - 内容信息:type,size,以及相应的block的位置信息。

   注意:不记录文件名或目录名,文件名或目录名记录在父目录对应的block里

inode 的特色点:

  • 每个 inode 大小均固定为 128 bytes
  • 每个文件都仅会占用一个 inode 而已
  • 承上,因此文件系统能够创建的文件数量与 inode 的数量有关
  • 系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,若符合才能够开始实际读取 block 的内容

6. block:用来存储文件的内容。

block 基本限制:

  • 原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化)
  • 每个 block 内最多只能够放置一个文件的数据
  • 若文件大于 block 的大小,则一个文件会占用多个 block 数量
  • 若文件小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪费)

7. 创建目录或文件

   当创建一个目录时,文件系统会为该目录分配一个inode和至少一个block。该inode记录该目录的属性,并指向那块block。该block记录该目录下相关联的文件或目录的关联性和名字。

   当创建一个文件时,文件系统会为该文件分配至少一个inode和与该文件大小相对应的数量的block。该inode记录该文件的属性,并指向block。

   如果一个目录中的文件数太多,以至于1个block容纳不下这么多文件时,Linux的文件系统会为该目录分配更多的block。

注意:inode和block是放在硬盘里的,而下面的dentry是放在内存里的
 
8. Dentry:叫:目录项,dentry是一个纯粹的内存结构,由文件系统在提供文件访问(读取)的过程中在内存中直接建立,他是内存中的一个目录结构的关系。
具体过程如下:
上面我们知道了每个文件(目录)都有一个inode,如果能找到inode就可以找到对应的block,那么我们在读取一个文件的时候是怎么找到他的inode的呢?其实我们在读取一个文件的时候都是从根目录读取的,根目录的inode号为0,在superblock里,可以很快根据inode号索引到具体的inode,因此读取的第一个inode就是根目录的,读取到了该目录后,内核对象会为根目录文件对象建立一个dentry,并将其缓存到内存,根目录文件的block里保存着根目录下的文件(目录)的名字与inode号,目录文件的内容就像一张表,记录的文件名与其inode no.之间的映射关系。根据路径即可找到当前需要读取的下一级文件的名字和inode,同时继续为该文件建立dentry,dentry结构是一种含有指向父节点和子节点指针的双向结构,多个这样的双向结构构成一个内存里面的树状结构,也就是文件系统的目录结构在内存中的缓存了。有了这个缓存,我们在访问文件系统时,通常都非常快捷。所以有些说法说文件名是保存在dentry中。
 
9. VFS :Virtual file system 虚拟文件系统,又称虚拟文件切换系统(virtual filesystem switch)是操作系统的文件系统虚拟层,在其下是实体的文件系统。虚拟文件系统的主要功用,在于让上层的软件,能够用单一的方式,来跟底层不同的文件系统沟通。在操作系统与之下的各种文件系统之间,虚拟文件系统提供了标准的操作接口,让操作系统能够很快的支持新的文件系统。

 

posted @ 2017-03-27 11:49  meitangyanyan  阅读(507)  评论(0编辑  收藏  举报