当前位置: 首页 > 工具软件 > EROFS > 使用案例 >

EROFS 和 方舟 辩证的看 —— EROFS

彭鹭洋
2023-12-01

——唯物辩证法说:

  • 一、新事物必然战胜旧事物
  • 二、前途是光明的,道路是曲折的

注:因为唯物辩证法原文对新事物有定义,并不光是字面的意思。所以我们简单改成被字句更接近原意 —— 旧事物必然被新事物战胜。
回到技术角度来说,就是总会有新的技术取代旧的技术。

关于 EROFS 和 方舟

刚听到 EROFS 和 方舟 时候,其实第一感觉是不以为意的。

我大概解释一下原因,EROFS 和 方舟 一个是文件系统,一个是编译系统。因为过往的经验,对这两块我也略有了解,下面分别说说。

文件系统

文件系统的速度的根源在存储介质,对收机来说就是FLASH的速度,在此基础上,为了满足不同场景下的使用,不同的文件系统是会有些差异的,比如加了为了纠错/容错加了日志功能、为了省空间加入压缩 等等,这样在效率(速度)上就会有一定的损失。当然也有很多细节设计能提高效率,比如大文件放到连续块中,FLASH 块对齐, 用 B-tree 等作文件名搜索。

当然实际操作上,是可以突破存储介质的速度限制的,那就是用缓存,但缓存很显然是有限的,怎么平衡大小以及用何种算法都是有技术含量的。

因此提高速度的办法就是尽量简化操作,提高缓存的命中率,还有就是加速文件名的查找。

通俗说来,存储介质的速度有决定性的影响,,但在实现使用中的一些场景提高速度是可能的。

说到 EROFS

最近正在玩一部 HW 手机,正好更新了用 EROFS 的系统,在更新的过程中我突然想到了一个问题,然后我就去看了它的源码。

它代码中写的全称是 Enhanced(Extended) ROM File System 而不是 Extendable Read-Only File System,它虽然确实是 Read-Only 。

目前看来它是通过 mkfs.erofs 来构建分区镜像,然后写到手机中并此分区必须 mount 成只读。
那么问题来了,如果有个小的更新,怎么操作?
以前的做法是下载了patch后合入(增、删、改写)相应的文件到分区。
现在怎么办?

  • 按之前下载patch包的做法,就只能把原始分区和patch包合入到一个临时目录下,然后把这个目录用 mkfs.erofs 生成新的分区镜像,然后把这个镜像文件写到相应分区。
    技术上看起来好像没问题,不过空间需要2倍分区大小,目前SYSTEM分区有差不多2.5G,这样升级就需要5G的剩余空间。还有就是时间,读数据的时间就不算了,写数据也是5G,这个时间可能会比较长。总的来说,这种方式升级版本需要的空间和时间都大大增加了。

  • 另一种方法就是把完整的新版本分区精选下载下来,这种比上一种方法只需一份分区大小。但写数据是一样的。不过省下了本地生成镜像的时间,并且容易检验它的正确性。但同时很明显增加了下载(网络)的数据量和下载时间。这也许是马上上5G的原因(玩笑啊)。

所以现在应该清楚了,所谓有得就有失,只是随着其实技术的发展存储空间和网速上来了,EROFS就成了可能的选择。

速度提升

网上有性能对比,EROFS 最快比 Ext4 随机读快5倍,顺序读相差不大(原因前面已经说过了)。
因此在真的实使用的情况下,只有大量随机读取的情况下用户才会有明显的感觉。
对 Android 来说,系统启动,系统应用加载会有提升,其它不会太明显。

在 HW 论坛看到用户对它有不切实际的期望,所以写这个希望大家理性看待新技术,技术进步它是一点一点的,优化也是,从量变到质变,有进步就是值得肯定的。

下一篇

 类似资料: