冰块的博客

日拱一卒 不期而至

EROFS trace dedupe ishare reading-path

EROFS 跟踪 dedupe 与 ishare 读路径

EROFS dedupe 与 ishare 读路径实测 15 专题讲 dedupe 时有个说法不太好验证:「跨文件重复只存一份,其余位置记为引用」。 光看代码只能看到 Z_EROFS_LI_PARTIAL_REF 这个标志位和 partial_decoding 这个开关, 但「引用」到底长什么样、读起来有什么不同,得实测。 而 11 专题的 ishare(page cache shari...

EROFS 48-bit block address

EROFS 48比特块地址

16 · 特性专题:48-bit 地址 特性标志:EROFS_FEATURE_INCOMPAT_48BIT(internal.h) 相关源码:zmap.c(越界检查)、super.c(读高位字段)、internal.h(辅助函数) 关键字段:blocks_hi、uniaddr_hi(on-disk);sbi->blkszbits 本文回答:为什么 32 位不够 → 48-...

EROFS trace fragment/ztailpacking reading-path

EROFS 跟踪 fragment/ztailpacking 读路径

EROFS fragment 与 ztailpacking:读路径实测 读 14 专题时最容易卡住的地方是:fragment 和 ztailpacking 到底在读路径上差在哪。 两者都跟「文件尾部那点数据」有关,但一个把数据放进 packed inode, 另一个把数据内联进 inode 自己的元数据区。 光看代码不够直观,于是造了三个对照镜像,用同一套 ftrace 手法各抓一次读路...

EROFS dedupe

EROFS 去重

15 · 特性专题:rolling-hash 去重(dedupe) 特性标志:EROFS_FEATURE_INCOMPAT_DEDUPE(internal.h) 内核侧代码:很少——主要在 decompressor.c(处理 deduped 页)与 sysfs 暴露 重要:本特性以 mkfs 侧为主,内核只负责”认得它 + 正确处理去重页” 本文回答:为什么压缩之后还要去重 →...

EROFS fragment and ztailpacking

14 · 特性专题:fragment 与 ztailpacking 相关源码:zmap.c(映射时判断)、zdata.c(z_erofs_read_fragment())、 super.c(packed_inode 初始化) 关键字段:vi->z_fragmentoff、vi->z_idata_size、sbi->packed_nid 本文回答:压缩后剩下的”...

EROFS multdev and device table

EROFS 多设备和设备表

13 · 特性专题:多设备与 device table 相关源码:super.c(挂载时建表)、data.c(erofs_map_dev() 解析)、 internal.h(erofs_device_info / erofs_dev_context) 配置:随主功能编译,无独立 CONFIG 本文回答:为什么要一个文件系统挂多个设备 → 两种模式(flat / 非 flat)差...

EROFS xattr

EROFS 扩展属性

12 · 特性专题:xattr(扩展属性) 对应配置:CONFIG_EROFS_FS_XATTR(及其子项 _POSIX_ACL / _SECURITY) 主源码: xattr.c、xattr.h 相关:internal.h(xattr_isize、xattr_blkaddr 等字段) 本文回答:xattr 是什么、EROFS 为什么需要它 → 两种存储方式怎么权衡 → 内核怎...

EROFS trace read funcgraph

EROFS 跟踪读调用路径

EROFS read 流程追踪 内容分两部分,两者除「镜像怎么挂」之外,追踪手法完全一致: 实验 A — fileio(文件后端)read 路径 实验 B — bdev(块设备)read 路径 0. 环境 / 前提 项 值 宿主机内核 5.10.0.x86_64(ftrace...

EROFS page cache sharing

EROFS 页缓存共享

11 · 特性专题:page cache sharing(ishare) 对应配置:CONFIG_EROFS_FS_PAGE_CACHE_SHARE 主源码:ishare.c(223 行);相关:xattr.c(指纹来源)、internal.h(erofs_real_inode()) 本文回答:为什么同一份数据会被缓存多份 → EROFS 怎么让多个文件共享一份页缓存 → 指纹...

EROFS FSDAX

EROFS 文件系统直接访问持久内存

10 · 特性专题:FSDAX(文件系统直接访问持久内存) 对应配置:CONFIG_FS_DAX(内核通用)+ EROFS 的 dax=always 挂载选项 相关源码:data.c(I/O 与 mmap)、inode.c(S_DAX 标志设置) 本文回答:为什么只读文件系统也需要 DAX → EROFS 的 DAX 与常规路径差在哪 → 用到哪些结构 → 关键函数做什么 → ...