Linux 基础知识 | 文件系统
Posted _wangjianfeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 基础知识 | 文件系统相关的知识,希望对你有一定的参考价值。
Linux 基础知识 | 文件系统
前言
Linux
的传统的文件系统为Ext2(Linux second extended file system,ext2fs)
,在传统的磁盘和文件系统中,
一个分区就只能被格式化为一个文件系统,所以可以说成一个filesystem就是一个分区,但是由于新技术的利用。这些
技术可以将一个分区格式化为多个文件系统。所以,通常我们称呼一个可被挂载的数据为一个文件系统而不是一个分区。
Ext2文件系统
在Linux
系统中,一个文件除了文件的实际数据内容之外,还包含着非常多的属性,比如文件的权限和属性等,文件系统通常会将这两部分数据分别存到不同的区块,权限和属性放置到inode
中,实际数据则放置在data block
中。此外还有一个超级区块super block
记录了整个文件系统的信息,包括inode
和block
的总量、使用量、剩余量等。这3个概念的解释如下:
superblock
: 记录文件系统的整体信息,包括inode/block
的总量、使用量、剩余量,以及文件系统的格式与相关信息inode
: 记录文件的属性,一个文件占用一个inode
,同时记录此文件的数据所在的block号码。block
: 实际记录文件的内容,若文件太大时,会占用多个block(当你输入ll
命令时,第一行显示的total xx
则表示该目录占用的block块的个数 * block size
)
block 相关知识
文件系统在格式化的时候就已经将inode
和block
规划好了,其中block
是用来存放数据的地方,在ext2文件系统中所支持的block
大小有1k,2k以及4k。由于block
大小的差异,会对系统的文件有一些限制:
- 最大单一文件大小限制:如果
block
是1kb
,则单一文件最大的大小支持为16GB
,2kb
支持的最大为256GK
。4kb
支持的最大为2TB
- 最大文件系统总量限制:
1kb
的block
支持2TB
的最大容量,2kb
的block
支持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
(新的ext4
和xfs
可设置到256B
) - 每个文件占用一个
inode
- 文件系统能创建的文件数量以
inode
数量有关 - 系统读取文件的时候,要先找到
inode
,并分析inode
所记录的权限与使用者是否符合,若符合才能开始读block的内容
super block
相关知识
super block
记录着整个文件系统的相关信息,记录了block
与inode
的总量和大小。同时保存了一份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
改成了XFS
。XFS
几乎兼容Ext4
所有的功能,但是为什么要使用XFS
呢?这是因为
Ext
系列的文件系统在格式化大容量硬盘的时候需要划分inode
以及block
等需要花费大量时间。而XFS
文件系统基本上就是为了适应大容量磁盘的文件系统。XFS
也是采用inode
和block
的文件内容分布方式,但是inode
和block
并不是在格式化磁盘的时候指定的,他是根据创建文件的时候动态计算的。所以速度相对比较快,至于XFS
比较深入一点的知识这里就不介绍了。
操作文件系统
列出文件系统磁盘使用量
命令:df
参数:
a
列出所有文件系统k
以KB
输出大小m
以MB
输出大小h
以人类易读的格式输出H
以M = 1000K
取代M = 1024K
的方式显示T
连同分区的文件系统名称列出i
以inode
的数量来显示文件大小
# 查看 /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
不包括子目录的容量k
以KB
输出大小m
以MB
输出大小
以上是关于Linux 基础知识 | 文件系统的主要内容,如果未能解决你的问题,请参考以下文章