10.2 Linux文件系统详解

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 硬盘是用来存储数据的,可以将其想象成柜子,只不过柜子是用来存储衣物的。

硬盘是用来存储数据的,可以将其想象成柜子,只不过柜子是用来存储衣物的。新买来的硬盘,通常要对其进行分区并格式化,分区就如同把一个大柜按照要求分割成几个小柜子(组合衣柜);格式化就好比在每个小柜子中打入隔断,决定每个隔断的大小和位置,然后在柜门上贴上标签,标签中写清楚每件衣服保存的隔断的位置和这件衣服的一些特性(比如衣服是谁的,衣服的颜色、大小等)。

很多初学者认为,对硬盘进行格式化,只是清除了硬盘中的数据,其实不然,格式化过程中还向硬盘中写入了文件系统。因为不同的操作系统,管理系统中文件的方式也不尽相同(给文件设定的属性和权限也不完全一样),因此,为了使硬盘有效存放当前系统中的文件数据,就需要将硬盘进行格式化,令其使用和操作系统一样(或接近)的文件系统格式。

各操作系统使用的文件系统并不相同,例如,Windows 98 以前的微软操作系统使用 FAT(FAT16)文件系统,Windows 2000 以后的版本使用 NTFS 文件系统,而 Linux 的正统文件系统是 Ext2。

既然格式化的真实目的是为了写入文件系统,那么,Linux 中的文件系统到底是什么,又是如何运作的呢?

在 CentOS 6.3 系统中,默认的文件系统是 Ext4,它是 Ext3(Ext2) 文件系统的升级版,在性能、伸缩性和可靠性方面进行了大量改进,变化可以说是翻天覆地的,比如:

  • 向下兼容 Ext3;
  • 最大 1EB 文件系统和 16TB 文件;
  • 无限数量子目录;
  • Extents 连续数据块概念;
  • 多块分配、延迟分配、持久预分配;
  • 快速 FSCK、日志校验、无日志模式、在线碎片整理、inode 增强、默认启用 barrier 等;

不同的文件系统,其运作模式和操作系统的文件数据有关。拿 Linux 操作系统中的文件为例,文件数据不仅包括文件中的内容,还包含非常多的文件属性,例如文件的 rwx 权限以及文件所有者、所属组、创建时间等。

通常情况下,文件系统会将文件的实际内容和属性分开存放:

  • 文件的属性保存在 inode 中(i 节点)中,每个 inode 都有自己的编号。每个文件各占用一个 inode。不仅如此,inode 中还记录着文件数据所在 block 块的编号;
  • 文件的实际内容保存在 block 中(数据块),类似衣柜的隔断,用来真正保存衣物。每个 block 都有属于自己的编号。当文件太大时,可能会占用多个 block 块。
  • 另外,还有一个 super block(超级块)用于记录整个文件系统的整体信息,包括 inode 和 block 的总量、已经使用量和剩余量,以及文件系统的格式和相关信息等。

由此我们可以推断出,只要能找到文件 inode 所在的位置,自然就能知道这个文件存放数据的 block 号,从而找到文件的实际数据。整个过程如图 1 所示。

图 1 中,文件系统先格式化出 inode 和 block 块,假设某文件的权限和属性信息存放到 inode 4 号位置,这个 inode 记录了实际存储文件数据的 block 号有 4 个,分别为 2、7、13、15,由此,操作系统就能快速地找到文件数据的存储位置。

这种管理文件的系统称为索引式文件系统,Linux 文件系统(Ext 系列)就属于索引式文件系统。

注意,inode 节点并不存储文件的文件名,因为文件名是文件所在目录的数据,所以会保存在上一级目录的 block 块中。前面章节在讲权限命令的时候说过,要对文件的上一级目录拥有 w 权限,才能删除目录中的文件,就是因为文件名是保存在目录的 block 中的。

Linux支持的常见文件系统

Linux 系统能够支持的文件系统非常多,除 Linux 默认文件系统 Ext2、Ext3 和 Ext4 之外,还能支持 fat16、fat32、NTFS(需要重新编译内核)等 Windows 文件系统。也就是说,Linux 可以通过挂载的方式使用 Windows 文件系统中的数据。Linux 所能够支持的文件系统在 "/usr/src/kemels/当前系统版本/fs" 目录中(需要在安装时选择),该目录中的每个子目录都是一个可以识别的文件系统。我们介绍较为常见的 Linux 支持的文件系统,如表 1 所示。

文件系统 描 述
Ext Linux 中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用
Ext2 是 Ext 文件系统的升级版本,Red Hat Linux 7.2 版本以前的系统默认都是 Ext2 文件系统。于 1993 年发布,支持最大 16TB 的分区和最大 2TB 的文件(1TB=1024GB=1024x1024KB)
Ext3 是 Ext2 文件系统的升级版本,最大的区别就是带日志功能,以便在系统突然停止时提高文件系统的可靠性。支持最大 16TB 的分区和最大 2TB 的文件
Ext4 是 Ext3 文件系统的升级版。Ext4 在性能、伸缩性和可靠性方面进行了大量改进。Ext4 的变化可以说是翻天覆地的,比如向下兼容 Ext3、最大 1EB 文件系统和 16TB 文件、无限数量子目录、Extents 连续数据块 概念、多块分配、延迟分配、持久预分配、快速 FSCK、日志校验、无日志模式、在线碎片整理、inode 增强、默认启用 barrier 等。它是 CentOS 6.3 的默认文件系统
swap swap 是 Linux 中用于交换分区的文件系统(类似于 Windows 中的虚拟内存),当内存不够用时,使用交换分区暂时替代内存。一般大小为内存的 2 倍,但是不要超过 2GB。它是 Linux 的必需分区
NFS NFS 是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源
iso9660 光盘的标准文件系统。Linux 要想使用光盘,必须支持 iso9660 文件系统
fat 就是 Windows 下的 fatl6 文件系统,在 Linux 中识别为 fat
vfat 就是 Windows 下的 fat32 文件系统,在 Linux 中识别为 vfat。支持最大 32GB 的分区和最大 4GB 的文件
NTFS 就是 Windows 下的 NTFS 文件系统,不过 Linux 默认是不能识别 NTFS 文件系统的,如果需要识别,则需要重新编译内核才能支持。它比 fat32 文件系统更加安全,速度更快,支持最大 2TB 的分区和最大 64GB 的文件
ufs Sun 公司的操作系统 Solaris 和 SunOS 所采用的文件系统
proc Linux 中基于内存的虚拟文件系统,用来管理内存存储目录 /proc
sysfs 和 proc —样,也是基于内存的虚拟文件系统,用来管理内存存储目录 /sysfs
tmpfs 也是一种基于内存的虚拟文件系统,不过也可以使用 swap 交换分区

本小节的内容基于底层,不是很好理解。如果大家实在看不明白,也没有关系,这一小节的内容并不影响对 Linux 的操作和使用,也不影响我们后面的学习。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
17天前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
65 15
|
22天前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
154 7
|
22天前
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
43 7
|
1月前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
2月前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
95 8
|
2月前
|
存储 Linux 文件存储
Linux文件系统
Linux文件系统 一切皆文件 在Linux中,“一切皆文件”的概念意味着系统中的所有资源,包括硬件设备、目录及进程等,均被视为文件。这种设计简化了操作和管理,具体包括: 普通文件:存储数据的常规文件。 目录文件:包含其他文件和子目录的文件。 进程文件:在/proc目录下代表系统中运行的进程。 设备文件:位于/dev目录,代表硬件设备。 网络字节流套接字文件:用于网络通信的数据流。 链接文件:指向另一个文件的符号链接或硬链接。 管道文件:用于进程间通信的文件。
61 7
|
5月前
|
编解码 Linux 程序员
深度探索Linux操作系统 —— 构建根文件系统2
深度探索Linux操作系统 —— 构建根文件系统
59 12
|
4月前
|
存储 Linux 索引
Linux 下最主流的文件系统格式——ext
【9月更文挑战第8天】硬盘被划分为若干相同大小的块(Block),默认大小为4K,便于灵活管理文件数据。文件数据分散存放于这些块中,提高了数据添加、删除和插入的便利性。
|
5月前
|
Linux Shell 网络安全
深度探索Linux操作系统 —— 构建根文件系统1
深度探索Linux操作系统 —— 构建根文件系统
73 6
|
5月前
|
存储 人工智能 数据管理
深入理解Linux操作系统之文件系统管理探索人工智能:从理论到实践的旅程
【8月更文挑战第30天】在探索Linux的无限可能时,我们不可避免地会遇到文件系统管理这一核心话题。本文将深入浅出地介绍Linux文件系统的基础知识、操作命令及高级技巧,帮助你更有效地管理和维护你的系统。从基础概念到实践应用,我们将一步步揭开Linux文件系统的神秘面纱。