Last active 5 hours ago

gistfile1.txt Raw
1先说结论:
2**真正的报错点不是“odm 大小算不出来”,而是系统根本没能在 `/data/gsi/dsu/dsu/aui/` 下面创建 `odm_gsi.img` 这个文件,所以后面自然就“无法确定 odm 最大大小”,整次 DSU 安装被 `ERROR_IO` 直接终止了。**
3
4---
5
6## 1. 日志里关键几行在说什么
7
8我用你贴的日志串一下流程:
9
101. **你的设备环境**
11
12* Device: `PKG110` → 一加 Ace 5 国行。([百度知道][1])
13* 出厂系统:ColorOS 15,底层是 Android 15,后续更新到你现在的 Android 16(SDK 36)。([中关村在线][2])
14* DSU 工具:`DSU-Sideloader 2.03-8`,模式 `ROOT`。
15
162. **用户设置**
17
18```text
19userSelectedUserdata=10737418240 // 10GB userdata
20allocPercentage=0.4
21hasAvailableStorage=false
22maximumAllowedForAllocation=23
23checkUnavaiableStorage=false
24```
25
26* 你手动指定 DSU userdata 为 **10GB**。
27* App 算出来理论最多可分配 23GB,但 `hasAvailableStorage=false`,
28 你又把 “检查可用空间” 关掉了,所以依然强行开始安装。
29
303. **创建 userdata 分区是成功的**
31
32```text
33I/DynamicSystemService: startInstallation -> /data/gsi/dsu/dsu
34...
35partition name: userdata, progress: 0/10737418240 → 10737418240/10737418240
36I/gsid: [libfs_mgr] Created logical partition userdata_gsi on device /dev/block/dm-0
37```
38
39* 这说明 **userdata_gsi 这 10GB 已经成功创建**,并挂在了 dm-0 上,没有因为空间问题失败。
40
41tmemory 那两行基本可以忽略:
42
43```text
44I/gsid: close tmemory to flush writes to userdata.
45E/gsid: [libfs_mgr] findTmemoryPath opendir error: No such file or directory
46```
47
48这是 Android 15/16 新加的 tmemory(虚拟 A/B / 更新相关的一个组件)在你这台机子上找不到挂载点的警告,类似报错在别的 Android 15 设备用 DSU-Sideloader 时也能看到。([GitHub][3])
49
504. **真正失败的地方:odm 分区**
51
52```text
53E/gsid : Failed to create file at: /data/gsi/dsu/dsu/aui/odm_gsi.img: No such file or directory
54E/gsid : Could not determine maximum file size for /data/gsi/dsu/dsu/aui/odm_gsi.img
55E/gsid : Could not create userdata image
56I/DynamicSystemService: Failed to create partition: aui/odm
57E/gsid : image incomplete; expected 1667260416 bytes, waiting for 1667260416 bytes
58E/gsid : Installation failed: install_dir=/data/gsi/dsu/dsu/, dsu_slot=dsu, partition_name=aui/odm
59```
60
61逐条解释:
62
63* **`Failed to create file … odm_gsi.img: No such file or directory`**
64 → 这里不是“空间不足”,而是 **连空文件都建不出来**(父目录不存在 / 或路径逻辑出问题),内核返回的就是 `ENOENT`(No such file or directory)。
65
66* **`Could not determine maximum file size`**
67 gsid 通常会先创建一个文件,再根据底层设备/fiemap 估算能给这个逻辑分区分配多大空间。
68 但现在连文件都没有,当然就 “无法确定最大大小”。
69
70* **`expected 1667260416 bytes`**
71 说明元数据里对 `aui/odm` 的预期大小是 **1667260416 字节 ≈ 1.55 GB**(1667260416 ÷ 1024³ ≈ 1.55)。
72
73* 后面那串 “Could not create userdata image / Failed to create partition: aui/odm” 是连锁反应:
74 odm 分区没建起来,整个 DSU session 就算失败,只能清理。
75
76**所以:核心问题是 `aui/odm` 这个逻辑分区创建阶段,系统在 `/data/gsi/dsu/dsu/aui` 下根本没能创建 `odm_gsi.img` 文件,而不是你手动给 odm 设错了多大。**
77
78---
79
80## 2. 为什么会这样(可能的原因)
81
82结合你设备是一加 Ace 5 + 最新 Android 版本、工具是 DSU-Sideloader 现有版本,再对比 GitHub 上其他 Android 15 设备的报错,可以大致推测几个方向:([GitHub][3])
83
84### 2.1 DSU 包本身的问题(aui.zip)
85
86你选的是:
87
88```text
89DsuPackage(uri=.../aui.zip, type=DSU_PACKAGE)
90```
91
92DSU_PACKAGE 类型的 zip 里一般有:
93
94* `gsi.json` / `dsu.json` 等元数据
95* 一个或多个分区镜像:`system.img`, `product.img`, `vendor.img`, `odm.img` 等
96* 有时还有 `super_empty.img` + lp_metadata 描述动态分区结构
97
98从日志来看:
99
100* 元数据里确实声明了一个 `aui/odm`,大小约 1.55GB。
101* 但在创建对应的 `odm_gsi.img` 文件时就直接挂了。
102
103这比较像下面几种情况之一:
104
1051. **包里定义了 `odm` 分区,但镜像文件路径/名字不符合当前 Android 16 的 gsid 期望**
106 (例如以前版本用的命名或目录结构,在你这套新系统上解析错了)。
107
1082. **包是为 Pixel 或别的厂适配的 DSU 包**,
109 里面的动态分区布局、组名(这里是 `aui`)和你手机的 super 分区布局有冲突,
110 一加这边改过 DSU 实现,导致 gsid 在创建 `aui/odm` 目录/文件时翻车。
111
112### 2.2 Android 15/16 + 厂商魔改的 DSU 实现 Bug
113
114* 从 DSU-Sideloader 的 issue 看,**Android 15 开始**,很多机型在 DSU 安装时都会出现
115 tmemory 相关报错、`/data/gsi/dsu/dsu/...` 路径异常、lp_metadata 异常等,
116 这都是 **系统自带的 gsid** 弄出来的,而不是 DSU-Sideloader 代码本身。([GitHub][3])
117
118* 你的日志和这些很像:
119 先是 tmemory 找不到目录,再到对某个分区的 image 文件路径处理失败。
120
121在这种情况下,本质上就是:
122
123> **一加/ColorOS 在 Android 16 上对 Dynamic System Updates 做了改动,
124> DSU-Sideloader 现版本 + 你这个 aui.zip 的 DSU 包组合,触发了 gsid 的一个兼容性 bug。**
125
126### 2.3 空间 / 文件系统碎片的问题可能性较小
127
128* 一些 DSU 失败日志会出现 `too many extents`、`No space left on device` 之类的字样,那确实是 F2FS 碎片化或空间不足。([GitHub][4])
129* **你的日志没有这些,只是 `No such file or directory`,而且 10GB 的 userdata 已经创建成功**。
130 所以这次失败 **更像是路径/元数据逻辑问题,而不是单纯空间问题**。
131
132---
133
134## 3. 你可以尝试的几个方向
135
136下面的步骤我按“从最简单到最折腾”的顺序排一下,你可以挑自己愿意折腾的程度来做:
137
138---
139
140### 3.1 先排除最基本的:清理旧 DSU、关掉“跳过存储检查”、减小 userdata
141
1421. 在系统「开发者选项 → 动态系统更新」里看看有没有残留的 DSU,会的话先删掉/退出。
1432. 在 DSU-Sideloader 里:
144
145 * 把“禁用存储检查/忽略可用空间”**关掉**,让它自己判断一次。
146 * 把 userdata 先改成 **2GB 或 4GB** 试一次,看能不能走得更远一点。
147
148这一步主要是排除“空间、分配策略”带来的额外干扰;
149虽然日志不像是空间问题,但先简化环境总是有好处的。
150
151---
152
153### 3.2 换成「单系统镜像」GSI 试一遍
154
155如果你只是想体验 GSI,而不是非得用这个 aui.zip:
156
1571. 换一个常规的 GSI(`.img` 或 `.img.gz/.xz`),选 DSU-Sideloader 里的
158 **Single System Image / 单系统镜像** 模式,而不是 DSU_PACKAGE。
1592. 一般只会创建 `system_gsi` + `userdata_gsi` 两个逻辑分区,**不会单独搞一个 odm 分区**,
160 就能绕过这次卡在 `aui/odm` 上的问题。
161
162一加 Ace 系列是支持 GSI 的,社区里也有人用过 GSI,只是日用体验会有各种 bug。([gledos.science][5])
163如果单镜像 GSI 能成功,而 aui.zip 一直死在 odm,那基本可以确定问题就出在 **这个 DSU 包/多分区方案本身**。
164
165---
166
167### 3.3 检查 aui.zip 的结构(偏进阶)
168
169如果你本来就是从论坛 / 群里拿到的一个「专门给某机型的 DSU 包」,又确实想搞清楚它的问题,大概可以:
170
1711. 在电脑或手机上解压 `aui.zip`,看根目录下有什么:
172
173 * 是否有 `gsi.json` / `dsu.json` / `lp_metadata` 之类文件;
174 * 是否有 `odm.img` / `odm_a.img` 之类的镜像。
1752. 如果 **元数据里写着有 odm 分区,但 zip 里压根没有对应 odm 镜像**,
176 那就说明包本身有问题(或者只适配过别的系统版本)。
177
178再往下就比较折腾了,比如:
179
180* 编辑 `gsi.json` / `dsu.json` 之类的配置,把 `odm` 从分区列表里删掉;
181* 或者干脆从这个包里只抽出 `system.img`,自己当单系统镜像来刷。
182
183这些操作一旦搞错,轻则 DSU 起不来,重则刷机 / 回原厂 ROM,
184所以如果你不熟悉动态分区和 super 布局,不太建议硬上。
185
186---
187
188### 3.4 从 adb 自查一下路径(需要 root / adb)
189
190如果你愿意自己再观察细节,可以在 **失败之后**:
191
192```bash
193adb shell
194su # 如果你用的是 KernelSU / Magisk 等
195ls -R /data/gsi
196```
197
198你想看的重点是:
199
200* 有没有 `/data/gsi/dsu/dsu/aui/` 这个目录;
201* 里面有没有别的 `*_gsi.img`,只有 `odm_gsi.img` 不存在,还是整个 `aui` 目录都没建出来。
202
203如果连 `aui` 目录都没有,那几乎可以确定:
204
205> 是 **系统 gsid 在处理 DSU_PACKAGE + 动态分区组(aui)时自身出了 bug**,
206> 而不是简单地“包里少了个文件”。
207
208---
209
210### 3.5 认栽:当前版本的 DSU-Sideloader + Android 16 兼容性问题
211
212结合:
213
214* 其它 Android 15 设备在 DSU-Sideloader 仓库有类似 tmemory + 动态分区相关报错;([GitHub][3])
215* 你这台是一加 Ace 5,ColorOS 定制也很重;([中关村在线][2])
216* 报错发生在系统自带的 gsid,DSU-Sideloader 本身只是把包丢进去调用系统接口;
217
218如果:
219
220* 换成单系统镜像 GSI 没问题;
221* 或者你试过几种不同 DSU 包都在某个分区上类似地崩;
222
223那基本可以认为:
224
225> **这是 Android 16 + 一加自家 gsid 实现,对“带多分区(特别是 odm)DSU 包”的兼容性问题,
226> 普通设置层面已经没法绕过去了。**
227
228这时候更现实的路线就剩两条:
229
2301. **继续玩 GSI** → 优先用「单系统镜像」模式(只 system + userdata)。
2312. **真要类原生 / 别的系统** → 走解 BL + fastboot / recovery 刷机那条路,不走 DSU。
232
233---
234
235## 4. 小结一句人话版
236
237* 你的 DSU 不是因为 “空间不够” 挂的,而是 **在创建 aui/odm 分区时,系统连 `odm_gsi.img` 这个文件都没创建成功**,
238 所以后面的错误才会说 “无法确定 odm 大小”。
239* 在一加 Ace 5 这种新机 + Android 16 上,这更多是 **DSU 包结构 + 一加改过的 gsid 的兼容性问题**,
240 跟你点错哪个按钮关系不大。
241* 如果只是想试 GSI,**先用“单系统镜像”模式**,避开带 odm 的 DSU 包,会简单可靠很多。
242 如果非得用 aui 这种多分区 DSU 包,那就要深入拆包、改配置,或者等工具专门适配这一代系统了。
243
244如果你愿意贴一下 aui.zip 里解压出来的大致目录结构(不含私密信息),我可以帮你一起判断一下这个包本身有没有明显的问题。
245
246[1]: https://zhidao.baidu.com/question/1959645631137783868.html?utm_source=chatgpt.com "pkg110是什么型号手机 - 百度知道"
247[2]: https://detail.zol.com.cn/2118/2117416/param.shtml?utm_source=chatgpt.com "一加Ace 5 (16GB/512GB)参数 - 中关村在线"
248[3]: https://github.com/VegaBobo/DSU-Sideloader/issues/244?utm_source=chatgpt.com "Unknown error · Issue #244 · VegaBobo/DSU-Sideloader - GitHub"
249[4]: https://github.com/VegaBobo/DSU-Sideloader/issues/166?utm_source=chatgpt.com "Installation failing constantly · Issue #166 · VegaBobo/DSU-Sideloader"
250[5]: https://gledos.science/oneplus-ace-5-pro-superuser.html "一加 Ace 5 Pro 的 root 及其自定义玩法 - gledos的博客"
251