Linux 基础知识 | 文件系统

Posted _wangjianfeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 基础知识 | 文件系统相关的知识,希望对你有一定的参考价值。

Linux 基础知识 | 文件系统

前言

Linux的传统的文件系统为Ext2(Linux second extended file system,ext2fs),在传统的磁盘和文件系统中,
一个分区就只能被格式化为一个文件系统,所以可以说成一个filesystem就是一个分区,但是由于新技术的利用。这些
技术可以将一个分区格式化为多个文件系统。所以,通常我们称呼一个可被挂载的数据为一个文件系统而不是一个分区。

Ext2文件系统

Linux系统中,一个文件除了文件的实际数据内容之外,还包含着非常多的属性,比如文件的权限和属性等,文件系统通常会将这两部分数据分别存到不同的区块,权限和属性放置到inode中,实际数据则放置在data block中。此外还有一个超级区块super block 记录了整个文件系统的信息,包括inodeblock的总量、使用量、剩余量等。这3个概念的解释如下:

  • superblock: 记录文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息
  • inode: 记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。
  • block: 实际记录文件的内容,若文件太大时,会占用多个block(当你输入ll命令时,第一行显示的total xx则表示该目录占用的block块的个数 * block size)

block 相关知识

文件系统在格式化的时候就已经将inodeblock规划好了,其中block是用来存放数据的地方,在ext2文件系统中所支持的block大小有1k,2k以及4k。由于block大小的差异,会对系统的文件有一些限制:

  • 最大单一文件大小限制:如果block1kb,则单一文件最大的大小支持为16GB2kb支持的最大为256GK4kb支持的最大为2TB
  • 最大文件系统总量限制:1kbblock支持2TB的最大容量,2kbblock支持8TB的最大容量,4kb支持16TB最大容量
  • block的大小和数量在安装系统前的格式化磁盘就已经决定,无法更改,除非重新格式化
  • 每个block最多存放一个文件的数据。
  • 如果文件大小大于block,则一个文件会占用多个block数量
  • 如果文件大小小于block,则该block的剩余容量则不能够再使用(磁盘空间会浪费)

可以通过一下命令查看操作系统的block size (只适用于ext2、ext3、ext4的文件系统)

# 列出挂载点
df -h 

# 根据上一个命令中的挂载点查看block size
tune2fs -l  /dev/sda3 |grep -i 'block size'

inode 相关知识

inode记录的数据有如下几部分:

  • 该文件的存取模式
  • 该文件的拥有者与群组
  • 该文件的容量
  • 该文件创建时间或状态改变时间
  • 该文件最近一次读取时间
  • 该文件最近修改时间
  • 该文件真正内容的指向

inode的数量和大小也是在格式化的时候已经固定,除此之外,inode还有以下特点:

  • 每个inode大小固定为128B(新的ext4xfs可设置到256B)
  • 每个文件占用一个inode
  • 文件系统能创建的文件数量以inode数量有关
  • 系统读取文件的时候,要先找到inode,并分析inode所记录的权限与使用者是否符合,若符合才能开始读block的内容

super block相关知识

super block记录着整个文件系统的相关信息,记录了blockinode的总量和大小。同时保存了一份inode和block的对照表,用来记录inode是否已经被使用,已经block是否为空(可以存数据),通过这些信息可以知道文件应该存在那个地方。

系统目录组成

当我们在Linux下的文件系统创建一个目录是,文件系统会分配一个inode和至少一个block给该目录,如果想要观察某个文件的inode号码,可以通过输入ll -i命令来查看。

下面查看根目录的inode号码

[root@xxx info]# ls -lid /
2 dr-xr-xr-x. 21 root root 4096 Mar 13 11:47 /

如上,查看了根目录的inode的编号为2。而且可以看到该文件占用大小4096。由此我们可以猜测该文件系统的block块大小为4k

ext2文件系统的局限性在于写入数据错误的时候,系统启动恢复的时候需要检查磁盘花费大量时间,所以就有了ext3、
ext4
这类日志式文件系统。这些文件系统优化了数据一致性的保障功能,通过日志的方式,可以很快速的检查是否有文件错误。

挂载点

一个文件系统需要挂载到主机上的某个目录才可以工作。一个目录树可以挂载多个文件系统,而linux支持很多文件系统,当我们访问某个目录的时候,有可能在目录路径中挂载的文件系统不同,此时会有一个一个Linux VFS(Virtual Filesystem Switch)的功能帮我们自动切换文件系统。

XFS文件系统

ContOs 7 开始,默认的文件系统由Ext4改成了XFSXFS几乎兼容Ext4所有的功能,但是为什么要使用XFS呢?这是因为
Ext系列的文件系统在格式化大容量硬盘的时候需要划分inode以及block等需要花费大量时间。而XFS文件系统基本上就是为了适应大容量磁盘的文件系统。XFS也是采用inodeblock的文件内容分布方式,但是inodeblock并不是在格式化磁盘的时候指定的,他是根据创建文件的时候动态计算的。所以速度相对比较快,至于XFS比较深入一点的知识这里就不介绍了。

操作文件系统

列出文件系统磁盘使用量

命令:df

参数:

  • a 列出所有文件系统
  • kKB输出大小
  • mMB输出大小
  • h 以人类易读的格式输出
  • HM = 1000K取代M = 1024K的方式显示
  • T 连同分区的文件系统名称列出
  • iinode的数量来显示文件大小
# 查看 /usr 目录的文件系统
[root@xxxx info]# df -T /usr 
Filesystem     Type 1K-blocks     Used Available Use% Mounted on
/dev/xvda1     ext4 103079200 19937072  77882972  21% /

# 查看容量使用情况
[root@xxx info]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       99G   20G   75G  21% /
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  1.6M  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
tmpfs           783M     0  783M   0% /run/user/0

显示文件数量

命令: du

默认情况下,这个命令会列出系统总共的文件个数。这个命令有如下参数:

  • a 列出某个目录的文件以及所占用的空间大小
  • h 以人类易读的格式输出
  • s 列出总量
  • S 不包括子目录的容量
  • kKB输出大小
  • mMB输出大小

以上是关于Linux 基础知识 | 文件系统的主要内容,如果未能解决你的问题,请参考以下文章

linux基础

linux中怎么查看硬盘剩余空间

Linux基础

如何在linux下查看目录的剩余空间大小

Linux 学习基础入门之Linux分区

linux如何查看磁盘剩余空间