源本科技 | 码上会

Linux 文件系统

2025/12/23
120
0

什么是 Linux 文件系统

Linux 文件系统是一套管理数据存储与读取的规则和结构,它决定了:

  • 数据如何被组织(文件、目录)

  • 数据存在磁盘的哪个位置

  • 如何高效地访问和修改数据

类比理解

想象一个图书馆——如果没有分类、编号、书架标签,找一本书将极其困难。

文件系统就是这个“图书管理系统”,让计算机能快速找到你需要的任何文件。

在 Linux 中,一切皆文件(包括设备、进程、网络接口),因此文件系统是整个操作系统的核心基础。


Linux 文件系统的三层架构

Linux 文件系统由三个关键层组成,协同工作:

1. 逻辑文件系统

Logical File System

  • 作用:为应用程序提供统一接口(如 open()read()write()

  • 用户视角:你看到的 /home/user/file.txt 就来自这一层

  • 特点:屏蔽底层细节,让程序无需关心数据实际如何存储

2. 虚拟文件系统

VFS, Virtual File System

  • 作用:抽象层,支持多种物理文件系统(ext4、XFS、NTFS 等)共存

  • 核心功能

    • 统一调用接口

    • 自动识别不同分区的文件系统类型

    • 实现“挂载”(mount)机制

  • 意义:无论你用 ext4 还是 XFS,ls /mnt/data 的用法完全一样

3. 物理文件系统

Physical File System

  • 作用:直接操作磁盘块,管理实际数据存储

  • 职责

    • 分配磁盘空间

    • 管理 inode 和数据块

    • 处理日志

    • 与硬件驱动交互

  • 代表:ext4、XFS、btrfs 等具体实现

总结:应用程序 → 逻辑层 → VFS → 物理文件系统 → 磁盘


文件系统的核心特性

特性

说明

空间管理

如何分配磁盘块,是否产生碎片

文件名规则

最大长度(通常 255 字节)、是否区分大小写、允许的字符(不能含 / 或 NUL)

目录结构

层级树状(/ → /home → /home/user)

元数据(Metadata)

文件权限、所有者、大小、创建 / 修改时间、inode 号等

工具支持

提供 mkfsfsckmount 等管理命令

设计限制

最大文件大小、最大分区容量、最多文件数


关键概念解析

1. 日志

  • 作用:防止系统崩溃导致文件系统损坏

  • 原理:先将“即将做的操作”写入日志,再执行到磁盘,最后标记完成

  • 三种模式

    模式

    日志内容

    安全性

    性能

    Journal

    数据 + 元数据

    ⭐⭐⭐ 最高

    ⚠️ 最慢

    Ordered(默认)

    仅元数据,但确保数据先写入

    ⭐⭐ 平衡

    ✅ 推荐

    Writeback

    仅元数据,无顺序保证

    ⚠️ 较低

    ⚡ 最快

大多数现代文件系统(如 ext4、XFS)默认使用 Ordered 模式


2. Inode

  • 每个文件 / 目录都有唯一 inode 号

  • 存储元数据(不包含文件名!)

  • 文件名只存在于其所在目录的“目录项”中

  • 查看 inode:ls -i filename

有趣现象:硬链接(hard link)共享同一个 inode,因此删除原文件不影响硬链接


3. 版本控制

  • 自动保存文件历史版本(如每小时备份一次)

  • 注意:ext4/XFS 不支持,需用 btrfs、ZFS 或外部工具(如 rsnapshot)


主流 Linux 文件系统对比

文件系统

发布年份

是否日志

最大文件

最大分区

特点

当前地位

ext

1992

2 GB

2 GB

首个 Linux 专用 FS

已淘汰

ext2

1993

2 TB

32 TB

无日志,适合 SSD/ 闪存

嵌入式场景

ext3

1999

2 TB

32 TB

ext2 + 日志

被 ext4 取代

ReiserFS

2001

8 TB

16 TB

B+ 树,小文件快

已弃用

JFS

1990 (IBM)

4 PB

32 PB

轻量、稳定

小众

XFS

2001 (SGI)

8 EB

8 EB

大文件、高并发、快照

主流(RHEL 默认)

ext4

2006

16 TB

1 EB

向后兼容、稳定、功能全

最广泛默认

btrfs

2007

16 EB

16 EB

快照、压缩、RAID、自修复

未来方向(Fedora 默认)

bcachefs

2015

极大

极大

加密、压缩、COW

新兴,仍在开发

关键能力对比

  • 压缩:btrfs、bcachefs 支持;ext4/XFS 不支持(需用 f2fs 或 ZFS)

  • 校验和:btrfs 全面支持;ext4 仅元数据部分支持

  • 在线扩容:ext4、XFS、btrfs 均支持

  • 加密:ext4(实验性)、bcachefs(原生)


为什么 ext4 仍是默认选择?

尽管 btrfs 和 XFS 功能更强大,但 ext4 依然是大多数发行版(如 Ubuntu、Debian)的默认文件系统,原因如下:

极度稳定:经过 15+ 年生产环境验证

向后兼容:可直接从 ext2/ext3 升级

恢复工具成熟fsck 可靠,数据救援方案完善

性能均衡:日常使用足够快,无明显短板

社区支持广:文档、教程、问题解决方案丰富

btrfs 警告:虽然功能先进,但在某些场景(如数据库负载)仍可能有稳定性风险,不建议新手在重要系统上使用


如何查看当前文件系统

# 查看所有挂载点及类型
df -T

# 查看根分区详细信息
lsblk -f

# 查看特定分区的文件系统
sudo file -s /dev/sda1

# 查看内核支持的文件系统
cat /proc/filesystems

总结与建议

使用场景

推荐文件系统

理由

日常桌面 / 通用服务器

ext4

稳定、兼容、省心

大文件存储(视频、备份)

XFS

大文件性能优,扩展性强

需要快照 / 压缩 /RAID

btrfs

功能全面,适合实验或非关键业务

嵌入式 / 只读系统

SquashFS

极小开销,只读安全

跨平台共享(Windows/Mac)

exFAT

兼容性好,但无 Linux 权限