
本文为洛奇看世界(guyongqiangx)原创,转载请注明出处。
原文链接:https://blog.youkuaiyun.com/guyongqiangx/article/details/132389438
0. 导读
说来惭愧,几年前,我把 Android 的 system/update_engine 目录下早期的代码翻了一遍,很多地方提到了并且使用了 extent 这个概念来处理数据,但我一直没有搞懂 extent 到底是个什么东西,只是知道一个 extent 由两个数据表示,一个表示起始位置,另一个表示长度。在制作升级包时,差分操作基于 extent 进行;在设备端升级时基于 extent 进行还原。仅致于此,并没有继续深究~
最近才了解到 extent 是现在常见的文件系统组织方式,突然一惊,真是 out 了,这打破了我一直以为文件系统都是基于 blockmap 进行处理的陈旧观念。
本文对 Android OTA 中对 Extent 的处理进行深入全面的分析。
核心代码《Android Update Engine 分析》系列,文章列表:

本文深入分析了 Android OTA 更新中 extent 的概念和作用,介绍了 extent 在文件系统、Android OTA 升级过程中的应用。文章探讨了 update_metadata.proto 中的 extent 结构,以及在 payload_consumer 和 payload_generator 中的实现。此外,还讲解了全量包和差分包生成过程中如何处理 extent,包括全 0 的 extent、新旧分区数据一致的 extent 和不一致的 extent 的处理方式。最后,文章提供了一些关于 extent 和 bitmap 的扩展资料,以及与之相关的思考题。
订阅专栏 解锁全文
1150





