Skip to content

文件系统 ​

概述 ​

文件系统是操作系统用于组织和存储文件的机制,定义了数据在存储介质上的布局结构。

Linux 通过 VFS(Virtual File System) 提供统一的文件操作接口,屏蔽底层文件系统差异。

用户空间
  open() / read() / write() / stat()
         ↓
VFS (Virtual File System)
         ↓
  ext4 | xfs | btrfs | tmpfs | nfs | ...
         ↓
块设备层 / 网络层

常见文件系统类型 ​

类型说明
ext4Linux 最常用的磁盘文件系统,支持日志
xfs高性能日志文件系统,RHEL/CentOS 默认
btrfs下一代写时复制(CoW)文件系统,支持快照
tmpfs基于内存的临时文件系统(/tmp、/run)
proc内核进程信息虚拟文件系统(/proc)
sysfs内核对象/设备信息虚拟文件系统(/sys)
devtmpfs设备文件系统(/dev)
nfs网络文件系统
cifs/smbWindows 共享文件系统
vfatFAT32,兼容 Windows/UEFI
iso9660CD/DVD 光盘格式
overlay联合文件系统,Docker 使用

查看系统支持的文件系统类型:

bash
cat /proc/filesystems

UUID ​

设备名(如 /dev/sda1)会随内核发现设备的顺序而改变,因此推荐使用文件系统的通用唯一标识符(UUID)来挂载,确保挂载稳定。

bash
# 查看设备 UUID
blkid
blkid /dev/sda1

# lsblk 查看
lsblk -f

# 使用 UUID 挂载
mount UUID=xxxxxx-xxxx-xxxx /mnt/data

# /etc/fstab 中使用 UUID
UUID=xxxxxx-xxxx-xxxx  /mnt/data  ext4  defaults  0  2

inode ​

每个文件/目录对应一个 inode,记录文件的元数据(不含文件名)。

inode 中存储的信息:

  • 文件类型(普通文件、目录、链接等)
  • 权限(rwx)
  • 链接数
  • UID / GID
  • 文件大小
  • 时间戳(atime 访问、mtime 修改内容、ctime 状态变更)
  • 数据块指针
bash
# 查看文件的 inode 编号
ls -i file.txt
stat file.txt

# 查看文件系统 inode 使用情况
df -i
df -ih /

若 inode 耗尽,即使磁盘空间充足也无法创建新文件。小文件(如日志、临时文件)容易耗尽 inode。


ext4 ​

ext4 是 ext3 的后继版本,Linux 最广泛使用的磁盘文件系统。

特性 ​

  • 日志(Journaling):写操作先记录日志,崩溃后可恢复,避免数据不一致
  • Extents:连续块描述符,替代传统间接块指针,提高大文件性能
  • 延迟分配(Delayed Allocation):提高写性能,减少碎片
  • 最大文件大小:16 TB
  • 最大卷大小:1 EB

常用命令 ​

bash
# 创建 ext4 文件系统
mkfs.ext4 /dev/sda1
mkfs.ext4 -L "data" /dev/sda1    # 设置卷标

# 查看文件系统信息
tune2fs -l /dev/sda1
dumpe2fs /dev/sda1 | head -40

# 检查并修复 ext4(需卸载)
fsck.ext4 /dev/sda1
e2fsck -f /dev/sda1

# 在线调整大小(扩容,LVM 扩容后执行)
resize2fs /dev/sda1
resize2fs /dev/sda1 20G    # 指定目标大小

# 修改卷标
e2label /dev/sda1 "newlabel"
tune2fs -L "newlabel" /dev/sda1

# 调整 inode 数量(格式化时)
mkfs.ext4 -N 1000000 /dev/sda1

xfs ​

XFS 是高性能 64 位日志文件系统,适合大文件和高并发 I/O。

bash
# 创建 xfs 文件系统
mkfs.xfs /dev/sda2
mkfs.xfs -L "data" /dev/sda2

# 查看信息
xfs_info /mnt/data

# 检查并修复(需卸载)
xfs_repair /dev/sda2

# 在线扩容
xfs_growfs /mnt/data

# 碎片整理
xfs_fsr /mnt/data

tmpfs ​

基于内存(和 swap)的临时文件系统,重启后数据消失。

bash
# 挂载 tmpfs
mount -t tmpfs -o size=512m tmpfs /mnt/ramdisk

# /etc/fstab 中
tmpfs  /tmp   tmpfs  defaults,size=2G,noatime  0  0
tmpfs  /run   tmpfs  defaults,size=256m         0  0

# 查看 tmpfs 信息
df -h /tmp

链接 ​

bash
ln source.txt hard_link.txt
# 两个目录项指向同一个 inode,删除其中一个不影响另一个
# 不能跨文件系统,不能链接目录
bash
ln -s /path/to/target symlink_name
# 类似快捷方式,存储目标路径
# 可跨文件系统,可链接目录
# 目标删除后符号链接悬空(dangling)

# 查看链接目标
readlink symlink_name
readlink -f symlink_name    # 解析所有层级

文件系统检查工具 ​

bash
# 通用工具
fsck /dev/sda1          # 自动选择文件系统类型
fsck -t ext4 /dev/sda1  # 指定类型

# 查看挂载信息
mount
cat /proc/mounts
findmnt
findmnt -t ext4         # 只显示 ext4

# 磁盘使用率
df -Th    # 含文件系统类型

# 目录大小
du -sh /var/*