Akuma-real gist felülvizsgálása 2 weeks ago. Revízióhoz ugrás
1 file changed, 250 insertions
gistfile1.txt(fájl létrehozva)
| @@ -0,0 +1,250 @@ | |||
| 1 | + | 先说结论: | |
| 2 | + | **真正的报错点不是“odm 大小算不出来”,而是系统根本没能在 `/data/gsi/dsu/dsu/aui/` 下面创建 `odm_gsi.img` 这个文件,所以后面自然就“无法确定 odm 最大大小”,整次 DSU 安装被 `ERROR_IO` 直接终止了。** | |
| 3 | + | ||
| 4 | + | --- | |
| 5 | + | ||
| 6 | + | ## 1. 日志里关键几行在说什么 | |
| 7 | + | ||
| 8 | + | 我用你贴的日志串一下流程: | |
| 9 | + | ||
| 10 | + | 1. **你的设备环境** | |
| 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 | + | ||
| 16 | + | 2. **用户设置** | |
| 17 | + | ||
| 18 | + | ```text | |
| 19 | + | userSelectedUserdata=10737418240 // 10GB userdata | |
| 20 | + | allocPercentage=0.4 | |
| 21 | + | hasAvailableStorage=false | |
| 22 | + | maximumAllowedForAllocation=23 | |
| 23 | + | checkUnavaiableStorage=false | |
| 24 | + | ``` | |
| 25 | + | ||
| 26 | + | * 你手动指定 DSU userdata 为 **10GB**。 | |
| 27 | + | * App 算出来理论最多可分配 23GB,但 `hasAvailableStorage=false`, | |
| 28 | + | 你又把 “检查可用空间” 关掉了,所以依然强行开始安装。 | |
| 29 | + | ||
| 30 | + | 3. **创建 userdata 分区是成功的** | |
| 31 | + | ||
| 32 | + | ```text | |
| 33 | + | I/DynamicSystemService: startInstallation -> /data/gsi/dsu/dsu | |
| 34 | + | ... | |
| 35 | + | partition name: userdata, progress: 0/10737418240 → 10737418240/10737418240 | |
| 36 | + | I/gsid: [libfs_mgr] Created logical partition userdata_gsi on device /dev/block/dm-0 | |
| 37 | + | ``` | |
| 38 | + | ||
| 39 | + | * 这说明 **userdata_gsi 这 10GB 已经成功创建**,并挂在了 dm-0 上,没有因为空间问题失败。 | |
| 40 | + | ||
| 41 | + | tmemory 那两行基本可以忽略: | |
| 42 | + | ||
| 43 | + | ```text | |
| 44 | + | I/gsid: close tmemory to flush writes to userdata. | |
| 45 | + | E/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 | + | ||
| 50 | + | 4. **真正失败的地方:odm 分区** | |
| 51 | + | ||
| 52 | + | ```text | |
| 53 | + | E/gsid : Failed to create file at: /data/gsi/dsu/dsu/aui/odm_gsi.img: No such file or directory | |
| 54 | + | E/gsid : Could not determine maximum file size for /data/gsi/dsu/dsu/aui/odm_gsi.img | |
| 55 | + | E/gsid : Could not create userdata image | |
| 56 | + | I/DynamicSystemService: Failed to create partition: aui/odm | |
| 57 | + | E/gsid : image incomplete; expected 1667260416 bytes, waiting for 1667260416 bytes | |
| 58 | + | E/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 | |
| 89 | + | DsuPackage(uri=.../aui.zip, type=DSU_PACKAGE) | |
| 90 | + | ``` | |
| 91 | + | ||
| 92 | + | DSU_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 | + | ||
| 105 | + | 1. **包里定义了 `odm` 分区,但镜像文件路径/名字不符合当前 Android 16 的 gsid 期望** | |
| 106 | + | (例如以前版本用的命名或目录结构,在你这套新系统上解析错了)。 | |
| 107 | + | ||
| 108 | + | 2. **包是为 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 | + | ||
| 142 | + | 1. 在系统「开发者选项 → 动态系统更新」里看看有没有残留的 DSU,会的话先删掉/退出。 | |
| 143 | + | 2. 在 DSU-Sideloader 里: | |
| 144 | + | ||
| 145 | + | * 把“禁用存储检查/忽略可用空间”**关掉**,让它自己判断一次。 | |
| 146 | + | * 把 userdata 先改成 **2GB 或 4GB** 试一次,看能不能走得更远一点。 | |
| 147 | + | ||
| 148 | + | 这一步主要是排除“空间、分配策略”带来的额外干扰; | |
| 149 | + | 虽然日志不像是空间问题,但先简化环境总是有好处的。 | |
| 150 | + | ||
| 151 | + | --- | |
| 152 | + | ||
| 153 | + | ### 3.2 换成「单系统镜像」GSI 试一遍 | |
| 154 | + | ||
| 155 | + | 如果你只是想体验 GSI,而不是非得用这个 aui.zip: | |
| 156 | + | ||
| 157 | + | 1. 换一个常规的 GSI(`.img` 或 `.img.gz/.xz`),选 DSU-Sideloader 里的 | |
| 158 | + | **Single System Image / 单系统镜像** 模式,而不是 DSU_PACKAGE。 | |
| 159 | + | 2. 一般只会创建 `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 | + | ||
| 171 | + | 1. 在电脑或手机上解压 `aui.zip`,看根目录下有什么: | |
| 172 | + | ||
| 173 | + | * 是否有 `gsi.json` / `dsu.json` / `lp_metadata` 之类文件; | |
| 174 | + | * 是否有 `odm.img` / `odm_a.img` 之类的镜像。 | |
| 175 | + | 2. 如果 **元数据里写着有 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 | |
| 193 | + | adb shell | |
| 194 | + | su # 如果你用的是 KernelSU / Magisk 等 | |
| 195 | + | ls -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 | + | ||
| 230 | + | 1. **继续玩 GSI** → 优先用「单系统镜像」模式(只 system + userdata)。 | |
| 231 | + | 2. **真要类原生 / 别的系统** → 走解 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的博客" | |
Újabb
Régebbi