浅谈Linux文件系统

来源:互联网 发布:三体结局 知乎 编辑:程序博客网 时间:2024/06/06 12:41

浅谈Linux文件系统

Linux文件系统的格式被称为ExtN(N=2、3、4),这种文件系统的起源比FAT32和NTFS都要古老。最近简单研究了一下Linux的文件系统,做个小结。

基于inode的文件系统

ExtN文件系统必定包含inode来表示一个文件,具体来说,inode包含文件的以下内容:

  1. 文件的字节数
  2. 文件所有者和文件所属组信息
  3. 文件权限信息
  4. 文件时间戳
  5. 文件的链接数,简单来说就是有多少文件名指向该文件
  6. 文件存放在data block中的位置

什么是inode
文件储存在硬盘上,硬盘的最小存储单位叫做扇区,每个扇区储存512字节的数据。操作系统读取硬盘的时候,会一次性连续读取多个扇区,即一次性读取一个块。这种由多个扇区组成的块,是文件存取的最小单位。一般来说,最常见的一个块大小是4KB,即连续八个扇区组成一个块。文件数据都储存在块中,除了文件数据之外,还需要一个位置存储文件的相关信息如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,又称为”索引节点”。

inode的大小
既然需要存储信息,inode当然也会占用磁盘空间,所以ExtN文件系统在格式化时就会将磁盘两个区域,分别是data block和inode table。inode节点的大小一般是128或256字节,而inode的总数是在格式化文件系统的时候就给定的,也可以说文件系统中inode的总数与文件系统的总空间大小有关,一般是每1KB或2KB就设置一个inode。使用df命令-i选项能够查看到你的文件系统的inode使用和分配情况,如图:
这里写图片描述

关于磁盘的data block

ExtN文件系统的实际数据存储在硬盘的data block区中,data block与inode一样,每一个block都有一个自己的编号,inode只需记录这些编号就能够寻找到一个文件的任意一段数据。

注意:文件在data block上并不是连续存储的,即一个文件的数据有可能分布在编号为1、5、9、12的data block上。

如果一个文件存放在编号为2、4、6的data block上,通过inode读取这个文件的过程如下图所示:
这里写图片描述

而FAT32文件系统的读取过程是这样的:
这里写图片描述

对比可以发现,ExtN的文件系统可以通过inode一次性获取文件数据存放的位置,据此安排读取文件数据的顺序可以尽可能的保证在磁盘只旋转一圈的情况下读取到一个文件的所有内容,而FAT32就必须按data block的编号顺序来读取一个文件的数据,如此一来可能造成读取一个文件需要磁盘旋转多次。FAT32文件系统当使用时间过长时,同一个文件的数据可能存放在相距较远的两块data block上,这样就造成了磁盘碎片问题的产生,而ExtN文件系统通过inode索引文件的方式理论上不会产生磁盘碎片问题。

NTFS文件系统没有研究过,不做讨论。

除了data block区,ExtN文件系统还有一个super block分区,该分区存储了整个文件系统的整体信息,包括inode和data block的总量、使用量以及剩余量,所以df命令的工作原理可能就是从super block中读取相关信息。

0 0
原创粉丝点击