如何以读写模式挂载Android GSI的system.img镜像文件?
Android GSI system.img 读写挂载问题
问题背景
我编译了一个Android GSI,生成了system.img文件,查看文件信息:
$ file out/target/product/generic_arm64/system.img out/target/product/generic_arm64/system.img: Linux rev 1.0 ext2 filesystem data, UUID=2c8eea3b-0bb2-46f9-a3d6-3e19c4968bff (extents) (large files) (huge files)
尝试以读写模式挂载该镜像时失败:
$ sudo mount -o loop out/target/product/generic_arm64/system.img /home/user/tmp/mnt mount: /home/chrisk/tmp/mnt: wrong fs type, bad option, bad superblock on /dev/loop33, missing codepage or helper program, or other error.
但以只读模式挂载成功:
$ sudo mount -o ro,loop out/target/product/generic_arm64/system.img /home/user/tmp/mnt $ df <stuff> /dev/loop33 1928320 1862664 49272 98% /home/user/tmp/mnt $ ls /home/user/tmp/mnt acct d etc metadata postinstall sys apex data firmware mnt proc system bin data_mirror init odm product system_dlkm bugreports debug_ramdisk init.environ.rc odm_dlkm sdcard system_ext cache dev linkerconfig oem second_stage_resources vendor config dsp lost+found persist storage vendor_dlkm
疑问与需求
- 是否因可用空间不足导致无法读写挂载?
- 如何实现读写挂载并向该镜像添加小文件?
解决方法
1. 先检查修复文件系统
只读挂载成功但读写失败,大概率是文件系统存在错误,先修复:
- 卸载已挂载的只读镜像:
sudo umount /home/user/tmp/mnt - 用
e2fsck检查修复ext2文件系统:
按提示输入sudo e2fsck -f out/target/product/generic_arm64/system.imgy确认修复操作,完成后尝试重新挂载读写。
2. 扩容镜像(空间不足+修复无效时使用)
从df输出看,镜像使用率达98%,剩余空间仅约48MB,即使修复成功,添加文件也容易触发空间不足,建议先扩容:
- 给镜像增加空间(示例增加100MB):
truncate -s +100M out/target/product/generic_arm64/system.img - 调整文件系统大小,让它利用新增空间:
sudo resize2fs out/target/product/generic_arm64/system.img
3. 重新挂载读写
完成修复/扩容后,执行以下命令挂载读写:
sudo mount -o loop,rw out/target/product/generic_arm64/system.img /home/user/tmp/mnt
补充:清除只读属性(极端情况)
如果上述操作仍失败,可能是镜像被标记为只读,可通过tune2fs清除相关标志:
sudo tune2fs -r 0 out/target/product/generic_arm64/system.img sudo tune2fs -c 0 -i 0 out/target/product/generic_arm64/system.img
内容的提问来源于stack exchange,提问作者chriskot
相关产品推荐
相关产品推荐

