为什么目前没有 Android 系统用 Btrfs(及可行性讨论)

2022-10-06 07:58:01 +08:00
 liyafe1997

看华为 Mate50 发布会得到的启发,上面宣传的那个什么存储压缩技术以及从 B 站网友测的结果看,这其实不就是 CoW 和透明压缩嘛。

虽然华为用什么底层技术目前不得而知,但是似乎这些( CoW 重复文件,压缩读多写少的文件)都可以用 Btrfs 文件系统实现。

现在似乎没有见过哪个 Android 厂家也好网友的 ROM 也好用上了 Btrfs 文件系统及用上这些特性,似乎用个 F2FS 都不得了了。。。杂粮手机到现在似乎都还是全盘 ext4 ( system/data/cache )

于是有点想开个坑,魔改下 Android 给 data 配上 Btrfs 会如何,然后看看利用好这些特性能省多少空间,从目前我的脑补来看似乎技术上没有什么障碍(但可能会得到一个性能不太佳的 result )。

还有个脑洞,就是现在很多 App 都加载大量第三方 SDK ,有大量的 native so 库,而且很多是相同的,是不是可以弄一套机制(也许用 Btrfs 的 CoW 就能直接实现),使得同版本的库可以共享一个 so 文件,节约空间。

12726 次点击
所在节点    Android
29 条回复
yanqiyu
2022-10-08 12:42:19 +08:00
@jjpprrrr fs-verity 对于 btrfs 应该是已经实现了,这么一看整个拼图缺的只是 fs-crypt ?近期有人在提交 patch ,但是估计也要很长时间才能合并并稳定到可用的程度


@krixaar btrfs 的设计应该没那么容易就 corrupted ,或者说恰好选了一个有 bug 的内核版本?
yanqiyu
2022-10-08 12:49:44 +08:00
@kkocdko
> 2. 我觉得目前 Android 使用的 AB 分区机制很糟糕,会浪费大量空间。同样地,如果使用 btrfs 快照来兜底更新,会自然很多(我在桌面 linux 下就是这样做的,fedora 36 )。

android 现在更新机制应该是块级的 diff ?要是借助子卷的话可能只能分发 btrfs send stream
这样子就和 android 喜欢的 dm-verity 机制又不兼容了,当然,一起迁移到 fs-verity/想办法基于 btrfs HMAC 实现验证也是办法
krixaar
2022-10-08 14:22:29 +08:00
@yanqiyu #21 前情提要:Jolla Phone 是 2013 年的产品。
当年 JP1 上面那个 btrfs 什么都好,就是要 balance ,不然 metadata 写满了,你看着有 1 个 G 的空闲空间,一个字节都写不进去。那个 balance 的过程不能意外断(可以手动停),自己得盯着手机电量,确保流程正常结束,万一出了差错大概率直接砖掉(或者 boot loop ,然后去 btrfs recovery )。
那个版本连官方都建议 16G 的手机内置存储使用不要超过 7G ,多了自己要去 btrfs-balancer allocation 去查 metadata 还剩多少,快满了赶紧 balance 。特别闹心的一段使用体验,每次系统更新都得心惊胆战一下。
这事儿就像我当年预购了 No Man's Sky ,你说现在这么多年了 NMS 已经是个好游戏了,但当年给我带来的失望就让我完全不想再去玩一下。
jjpprrrr
2022-10-08 20:20:56 +08:00
@yanqiyu #22 从 android 11 开始,绝大多数新设备出厂就是 virtual a/b 了,android 13 开始应该是强制要求新设备必须 virtual a/b 。virtual a/b 已经不怎么浪费空间了,我觉得最大的缺点是 OTA 比较慢,耗费 CPU ,好在可以后台慢慢做。
weixiansen574
2022-10-08 21:34:24 +08:00
Android11 的 fuse 文件系统够蛋疼了,红米 k40Pro+,文件系统性能为 59 IO/s ,10 年前的小米 2s 都有 200 多 IO/s 的性能,倒车油门踩到底呢这是!解压个安卓内核源码压缩包要死人了,虽然不大但是都是零碎的小文件,费几个小时才解压完成。老前辈小米 8 正常多了,1000 多的 IO/s ,解压安卓内核也几分钟的时间。
liyafe1997
2022-10-08 21:51:01 +08:00
@krixaar 感觉这个完全可以软件优化好,比如可以充电的时候自动 balance ,或者采取一些其它的 workaround
EnochZack
2022-11-17 07:24:43 +08:00
btrfs 虽然看起来很好,但是并不是一个稳定的文件系统,ext4 虽然比较古老,但是非常稳,手机的用户太多了,只要出任何一点问题都会有不可估量的损失
sky96111
2023-01-14 21:05:23 +08:00
@deorth OpenSUSE 企业版 SLES 已经系统盘默认 btrfs ,并利用 CoW 特性实现系统快照了
Songine
2023-05-04 08:59:31 +08:00
确实,特别是几个媒体文件目录,占的多,用的少,完全可以用 btrfs 作透明压缩

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/884834

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX