【Linux】Linux文件系统笔记

一、文件系统基础

1. 定义与作用

  • 文件系统(file system,简称fs):Linux内核中用于管理磁盘文件的软件系统,核心功能包括文件的存储、读取、查找、删除等,是操作系统与磁盘硬件之间的中间层。
  • 与内核(kernel)的关系:内核是操作系统的核心软件,负责管理CPU、内存、进程、文件系统(关联磁盘)及其他硬件,文件系统的管理是内核的重要功能之一。
  • 示例路径 :XFS文件系统内核模块路径为/usr/lib/modules/5.15.0-136-generic/kernel/fs/xfs

二、磁盘分区与引导

1. 分区查看命令

  • fdisk -l:列出磁盘分区详细信息(包括分区表类型、大小等)。
  • lsblk:以树形结构展示块设备(磁盘及分区)的关系。

2. 分区表类型

类型 特点
dos(MBR) - 基于主引导记录(MBR),仅支持2TB以下磁盘 - 分区表占64字节,最多4个主分区
GPT(GUID) - 支持2TB以上磁盘(最大支持18EB) - 最多128个主分区(不同系统可能有差异) - 具备分区表备份和校验功能

3. dos分区表中的分区类型

  • 主分区:可安装系统或存放数据,编号1-4,最多4个。
  • 扩展分区:突破4个主分区限制,最多1个,不直接存放数据,占用1个主分区编号。
  • 逻辑分区:基于扩展分区创建,数量不限,编号从5开始。

4. MBR(主引导记录)

  • 位置:硬盘的0柱面、0磁头、1扇区(主引导扇区)。
  • 结构(共512字节)
    1. 主引导程序(如GRUB):446字节,负责引导操作系统。
    2. 分区表(DPT):64字节,记录分区信息(每个分区项16字节,共4项)。
    3. 结束标记:2字节(固定为0x55AA)。

三、挂载配置文件(fstab)

1. 参数格式解析

示例:/dev/disk/by-uuid/... /boot ext4 defaults 0 1

  • 字段含义:设备标识(UUID)、挂载点、文件系统类型、挂载选项、dump备份标识、fsck检查优先级。

2. 关键参数说明

  • defaults(默认挂载选项)

    • rw:读写模式挂载。
    • suid:允许文件设置SUID/SGID特殊权限。
    • dev:识别设备文件(如/dev/sda)。
    • exec:允许执行分区内的可执行文件。
    • auto:开机自动挂载。
    • nouser:仅root用户可执行mount/umount
    • async:异步I/O(数据先入缓存,再批量写入磁盘,提升性能)。
  • 其他常用选项

    • ro:只读模式挂载。
    • noexec:禁止执行分区内的可执行文件(如/tmp分区常用)。
    • sync:同步I/O(数据直接写入磁盘,牺牲性能换安全性)。
  • dump备份标识(第一个数字)

    • 0:不使用dump工具备份(默认)。
    • 1:需要定期备份(通常仅根分区/可能设置)。
  • fsck检查优先级(第二个数字)

    • 0:不检查。
    • 1:最高优先级(根分区/通常设为1)。
    • 2:次高优先级(其他分区通常设为2)。

四、文件系统核心组件

1. 核心概念

  • 目录项(dentry):记录目录内的文件/子目录,存储"文件名→inode号"的映射关系。
  • inode(索引节点):128字节(或更大),存放文件属性(权限、所有者、大小、修改时间等),每个文件对应唯一inode号。
  • block(数据块):真正存储文件内容的空间,大小固定(如4KB),由inode中的指针指向。

2. 文件存取流程

文件名 → 目录项(查inode号) → inode(获取block位置) → block(读取数据)

3. 文件删除原理

  • 逻辑删除:删除目录项中"文件名→inode号"的映射,inode和block的位图标记从1(使用中)改为0(空闲),数据仍存于磁盘。
  • 物理删除:仅当新数据覆盖原block时,旧数据才真正消失。
  • 删除大文件较慢的原因:大文件占用的block更多,需将更多block位图的1改为0。

五、链接文件(软链接vs硬链接)

1. 区别对比

特性 软链接(符号链接) 硬链接
inode号 有独立inode 与源文件相同inode
block内容 存储源文件的路径 与源文件共享block(无独立数据)
源文件删除 软链接失效(显示"断链") 硬链接仍可访问(inode引用计数-1)
跨文件系统 支持 不支持(inode仅在同一文件系统内唯一)
目录支持 支持(常用作目录快捷方式) 不支持(防止目录循环引用)

2. 示例

  • 创建硬链接:ln 源文件 硬链接文件,执行ll -i可看到源文件与硬链接的inode号相同,硬链接计数(第二列数字)增加。
  • 注意:目录中的.(当前目录)和..(上级目录)是特殊硬链接,分别指向自身和父目录的inode。

六、常见问题与工具

1. 磁盘空间异常

  • 空间未满但无法创建文件 :可能是inode耗尽(df -i查看inode使用率),需清理无用小文件释放inode。
  • 释放被占用的日志文件
    直接rm -rf log无效(程序仍持有inode引用),需用> log清空内容(释放block)。

2. 分区工具对比

工具 适用场景 生效方式
fdisk 2TB以下磁盘,dos分区表 执行w命令后生效
parted 2TB以上磁盘,GPT分区表 操作立即生效(需谨慎)

七、常见文件系统类型

类型 特点
ext4 主流文件系统,支持日志功能、大文件(最大16TB),兼容性好。
xfs 高性能日志文件系统,适合大文件和高吞吐量场景(如服务器),支持动态扩容。
btrfs 支持快照、 RAID、动态调整大小,适合需要灵活管理的场景(实验性较强)。
swap 交换分区专用,内存不足时临时存储数据,提升系统稳定性。

通过以上内容,可系统掌握Linux文件系统的核心原理、分区管理及常见问题处理,结合实际操作(如mount挂载、df -h查看空间、ls -i查看inode等)可加深理解。