几年前,我能够轻松执行此决议(2019)中描述的方法。然而,当我今天再次尝试测试并尝试挂载镜像时,遇到了以下错误:
# mount -o loop,offset=1048576 system.img /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/loop2, missing codepage or helper program, or other error.
因此,我调查了system.img图像是否有任何变化:
file system.img
system.img: DOS/MBR boot sector; partition 1: ID=0xee, start-CHS (0x0,0,2), end-CHS (0x15c,71,43), startsector 1, 5595135 sectors, extended partition table (last entry)
进行此项调查的原因是,随着时间的推移,该图像经历了多次格式更改。最初,system.img 是一个 VMS Alpha 可执行文件,可以使用“unyaffs”解压。后来转为ext4,图像变得稀疏。随后,进行了另一次迁移,这次迁移到包含分区的完整磁盘映像。
我还进行了一个测试来检查偏移量是否已被修改。我注意到,截至 2023 年,所有官方图像似乎仍然保持
1048576
的值。
parted system.img unit B print
Model: (file)
Disk /root/system.img: 2864709632B
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File System Name Flags
1 1048576B 2097151B 1048576B vbmeta
2 2097152B 2863661055B 2861563904B super
最后,我进行了一项最终测试:
simg2img system.img simg2img system.raw.img
Invalid sparse file format at header magic
Failed to read sparse file
我在两个不同的 Linux 系统(Ubuntu 和 Debian - 最新稳定版本)和 Mac Ventura 上进行了测试,但到目前为止,我还没有找到可行的解决方案。如果有人有其他想法来解决这个问题,我将不胜感激。
我已经在 Android TV 模拟器 API 31 中做了一些测试。
~/库/Android/sdk/system-images/android-31/android-tv/arm64-v8a/system.img
我可以用7zip提取图像。
7zz x system.img
它提取 0.vbmeta.img 和 1.super.img
之后你可以lpunpack 1.super.img
lpunpack 1.super.img
这会提取 system.img system_ext.img product.img 和 vendor.img 这些图像具有 ext2 文件系统。稍后您可以安装这些图像或使用 7zz 提取其内容。
https://github.com/LonelyFool/lpunpack_and_lpmake
现在我的问题是把它们全部重新打包回去。 我尝试过使用 lpmake 命令,但没有成功。欢迎任何建议。