Linux 文件系统与磁盘设备管理专栏导览

专栏定位

本专栏的目标是系统、深入地解析 Linux 存储栈的每一层:从用户程序调用 open()/read() 的那一刻,到数据最终落在磁盘扇区;从 VFS 抽象接口,到 ext4/XFS 的磁盘布局细节;从内核 Page Cache 的脏页管理,到 blk-mq 多队列架构的 IO 路径;从传统 IO 调度器的设计演进,到 NVMe 与 io_uring 带来的现代存储革命。

理解文件系统不只是为了用好 lsdfmount——更是为了在性能调优、故障排查、存储架构选型时,能从第一性原理出发做出正确判断。


专栏目录

篇号标题核心问题
01 文件系统的本质——从 open() 到磁盘扇区文件系统的本质一次 read() 调用经历了哪些内核层次?VFS 为什么存在?
02 VFS 虚拟文件系统——超级块、inode、dentry 与 fileVFS 四大核心对象inode 与目录项(dentry)的关系?struct file 与 fd 如何对应?
03 ext4 深度解析——日志、盘区树与 Flex BGext4 内部实现Extent 树如何描述文件数据位置?日志(journal)如何保证崩溃一致性?
04 Page Cache 与脏页回写——Linux IO 的秘密缓冲层Page Cache 原理为什么 Linux 要用几乎全部可用内存做缓存?脏页何时写回磁盘?
05 块设备栈——从 bio 到 blk-mq 的 IO 路径IO 请求的内核路径bio 是什么?blk-mq 多队列架构比单队列好在哪里?
06 IO 调度器——CFQ、Deadline 与 mq-deadline 的演进IO 调度策略为什么 SSD 不需要 CFQ?noop/deadline/mq-deadline 如何选型?
07 XFS 文件系统深度解析——B+ 树与日志架构XFS 内部实现XFS 的 AG 分组设计为什么适合大文件和高并发?延迟分配的本质是什么?
08 存储栈性能调优——从 fio 到 iotop 的全套方法论存储性能调优如何用 fio 精确测量存储性能?读写放大的根源与消除方法?
09 文件系统的安全边界——权限、ACL 与 Capabilities文件权限体系POSIX ACL 与传统 rwx 权限的关系?setuid 的安全风险与 Capability 的替代?
10 现代存储技术——NVMe、io_uring 与用户态存储现代存储革命NVMe 比 SATA SSD 快在哪里?io_uring 如何近乎消除系统调用开销?

阅读建议

基础路线(理解存储全貌):01 → 02 → 03 → 04 → 05

性能调优路线(解决 IO 瓶颈):04 → 05 → 06 → 08

深度原理路线(内核开发/存储工程师):02 → 03 → 05 → 07 → 10

安全合规路线:09(独立阅读)


关联专栏

  • 内存管理专栏:Page Cache 是内存管理与文件系统的核心交叉点
  • 性能优化专栏:fio 方法论、IO 模式选型、blk 调优
  • CephJuiceFS:分布式存储系统依赖本地文件系统作为底层存储
  • HDFS:HDFS DataNode 底层使用本地文件系统存储 Block

核心概念地图


graph TD
    classDef user fill:#ffb86c,stroke:#ffb86c,color:#282a36
    classDef vfs fill:#6272a4,stroke:#bd93f9,color:#f8f8f2
    classDef fs fill:#50fa7b,stroke:#69ff47,color:#282a36
    classDef block fill:#ff79c6,stroke:#ff5555,color:#282a36
    classDef hw fill:#8be9fd,stroke:#6be5fd,color:#282a36

    U["用户程序:open/read/write/close"]:::user

    VFS["VFS 层:super_block / inode / dentry / file"]:::vfs
    PC["Page Cache:address_space / 脏页回写"]:::vfs

    EXT4["ext4:Extent树 / 日志 / Flex BG"]:::fs
    XFS["XFS:AG分组 / B+树 / 延迟分配"]:::fs

    BIO["bio 层:IO请求封装"]:::block
    BLKMQ["blk-mq:多队列 IO 调度"]:::block
    IOSCHED["IO 调度器:mq-deadline / none"]:::block

    DISK["块设备:HDD / SSD / NVMe"]:::hw
    NVME["NVMe 驱动:多队列提交/完成"]:::hw

    U -->|"系统调用"| VFS
    VFS <-->|"地址空间"| PC
    VFS -->|"具体实现"| EXT4
    VFS -->|"具体实现"| XFS
    PC -->|"writeback/readahead"| BIO
    EXT4 -->|"块 IO 请求"| BIO
    XFS -->|"块 IO 请求"| BIO
    BIO --> BLKMQ
    BLKMQ --> IOSCHED
    IOSCHED --> DISK
    IOSCHED --> NVME