冰块的博客

日拱一卒 不期而至

EROFS advanced features

EROFS 高级特性

阶段 6:高级特性 本章的特性都”挂在主干上”,没有一个独立成体系。 按挂载点分类记忆,比按字母顺序背清单有效得多。 📌 先看这里:本章是概览,深度内容在特性专题(09–18) 本章用「① 解决什么问题 → ② 磁盘上怎么表示 → ③ 内核怎么用 → ④ 现状与坑」 四段式覆盖 9 个特性,每个约百行——目的是让你先建立全景。 若要深入理解某个特性(关键结构体、主要函数、...

EROFS back-end decompression

EROFS 后端解压

阶段 5:解压后端 本章聚焦解压后端的设计与实现:算法如何抽象、如何挂接, 同步与异步如何取舍,硬件加速如何接入。 读完你应该能说清”一个解压请求从发出到完成,中间经过了哪些设计决策”。 本阶段目标 读完这一章,你应该能够: 说出 EROFS 的解压后端是怎么抽象和挂接的 区分四种压缩算法的特点与适用场景,知道各自的 Kconfig 开关 解释同步解压与异步解压...

EROFS compressed reading-path

EROFS 压缩读路径

阶段 4:压缩读路径 这是全套材料最难的一章,也是最有价值的一章。 压缩相关代码(zmap.c + zdata.c + zutil.c)占全树约 33%。 建议分三步走:先看 zmap(映射),再看 zdata(状态机), 最后看两者如何联动。不要试图一次读懂整个压缩路径。 本阶段目标 读完这一章,你应该能够: 解释为什么压缩文件的”逻辑偏移 → 物理位置”不能靠...

EROFS uncompressed reading-path

EROFS 非压缩读路径

阶段 3:非压缩读路径 本章会做一件很爽的事:把阶段 1 里 dump.erofs 看到的现象, 和产生它的那段代码一一对上。 本阶段目标 读完这一章,你应该能够: 说出 EROFS 的读入口有哪几个,以及它们为什么都走 iomap 画出一次非压缩读从 read() 到设备的完整调用链 读懂 erofs_map_blocks(),并解释它如何对应阶段 1 的实测...

EROFS mount and metabuf

EROFS 挂载与元数据原语

阶段 2:挂载与元数据原语 本章最重要的内容是 erofs_buf 三件套。 它是 EROFS 取元数据的唯一方式——搞懂它,后面每个阶段的代码你都能读懂一大半。 本阶段目标 读完这一章,你应该能够: 说出挂载从 mount 命令到”能访问根目录”经过了哪几步 解释 superblock 校验时”拒绝不兼容特性”的必要性 说出 sbi 里 6~8 个关键字段...

EROFS on-disk format

EROFS 镜像格式

阶段 1:on-disk 格式 本章所有数字都来自真实镜像,不是编造的示例。 你可以照着 1.9 节的命令一步步复现,看到和我一样的结果。 本阶段目标 读完这一章,你应该能够: 说出 EROFS 镜像里什么位置固定、什么位置自由 解释 superblock 里那几个关键字段各自”内核拿它来干什么” 给你一个 nid,算出这个 inode 在磁盘的哪个字节 说...

EROFS Prerequisites

EROFS 前置知识

阶段 0:内核存储栈前置 这一章不出现任何 EROFS 代码。 但如果你跳过它,后面每一章你都会觉得”这句话在说什么”。 本阶段目标 读完这一章,你应该能够: 说出一次 read() 从用户程序到硬件经过哪几层,每层负责回答什么问题 说清 super_block / inode / dentry / file 四个对象各自代表什么 解释 page cache 为...

EROFS Overview

EROFS 概览

EROFS 文件系统概览 资料来源:USENIX ATC’19 论文、官方内核文档、OSS 2019 / OSS China 2023 / FOSDEM 2023 / OSS NA 2024 共 6 份演讲 由AI整理归纳总结 1. 什么是 EROFS EROFS(Enhanced Read-Only File System,增强型只读文件系统) 是华为于 2017...

QEMU two-stage startup scheme

QEMU 两段式启动方案

QEMU 两段式启动方案:loader initrd + ext4 根文件系统 适用对象:需要在 QEMU guest 里以 ext4 磁盘为根文件系统 运行测试,而测试内核的 ext4/virtio-blk 都是模块(=m)的场景 环境:Code Server + QEMU + 6.6 内核 产物:rootfs-ext4.img(ext4 根)+ boot-initr...

Zram Can't change algorithm for initialized device

zram切换算法失败问题

问题 zram: Can’t change algorithm for initialized device 原因 这不是 kernel 的 bug,而是用户态(init 脚本)写 /sys/block/zram0/comp_algorithm 的顺序错误。 在 drivers/block/zram/zram_drv.c 中,__comp_algorithm_store() 会先检查...