0%

Android使用gdisk调整system分区大小

前言

  • 最近尝试给谷歌nexus 5编译HavocOS (android 11分支),折腾一大堆后终于生成了zip刷机包,结果死活刷不进去,卡在"E1001: Failed to update system image",原因推测是:system分区太小,因为编译时报错提示system镜像过小,所以在编译配置文件中BoardConfig.mk调整过system分区的大小,修改后才编译打包成功。
  • 显然只改BoardConfig.mk,只是能正常编译打包,但是手机(物理)上的system分区还是那么大,太大刷不进去
  • 为了验证是否是system分区太小缘故,因为编译还生成了system.img的中间文件,这个img是可以用fastboot刷入的,手机usb连接到电脑,进入bootloader模式,运行fastboot system system.img,不出意外失败了,而且报错信息为:"remote: 'size too large'",这就验证了是手机/system分区不够大的原因。所以问题就变为了怎么扩增system分区?
  • 经过网上查找相关教程,最终按这个问题里的答案:https://android.stackexchange.com/questions/216123/android-how-to-increase-system-partition-and-decrease-data-partition尝试成功

准备阶段

开始

  • 手机进入recovery模式

  • 下载解压gdisk,电脑usb连接手机,adb push将gdisk传至手机

    1
    2
    adb push gdisk /sbin/
    adb push mkfs.ext4 /sbin/
  • 运行

    1
    adb shell
    1
    2
    # 给 gdisk mkfs.ext4赋予可执行权限
    chmod +x /sbin/*
  • twrp中选择挂载/system分区,终端运行df -h

    image-20210804164621667

  • 可以看到system分区对应的区块为"/dev/block/platform/msm_sdcc.1/by-name/system",userdata分区对应的区块为"/dev/block/platform/msm_sdcc.1/by-name/userdata",但这个by-name说明是软连接,我们需要获得它真实的区块位置,运行ls -lah /dev/block/platform/msm_sdcc.1/by-name/systemls -lah /dev/block/platform/msm_sdcc.1/by-name/userdata即可获得

    image-20210804165043465

  • 可以看到/system分区对应的为"/dev/block/mmcblk0p25",/data分区对应的为"/dev/block/mmcblk0p28",记下这两个值,后面需要使用,不同手机这两个可能跟本文不一样,要以实际情况为准

  • 运行gdisk /dev/block/mmcblk0,注意这里没有"p25","p28","p*"

  • 输入help可以查看帮助image-20210804165518769

  • 这里因为要扩增system分区,所以最好的办法是从减小userdata分区的大小来实现

  • 直接调整已有分区大小(增加或者减小),需要下载工具里parted命令(使用方法最开始的链接有,这里没有使用parted,因为使用parted比较繁琐),这里不打算直接调整userdata分区大小,而是将userdata分区和system分区都删除掉,再重新分区

  • gdisk删除分区

  • 先输入d,回车后输入需要删除的分区这里需要删除的为system(25)和userdata(28),这两个数值即为mmcblk0p25和mmcblk0p28里的数字

    image-20210804170455330

  • 删除后新建分区,输入n,然后输入原system分区数字,接着会提示选择分区起始扇区位置,回车默认即可,接着会提示选择分区终止扇区位置,这里选择**"+2G"**,表示分配2GB空间,之后回车默认即可

    image-20210804170626103

  • 再输入n,输入原userdata分区数字,接着会提示选择分区起始扇区位置,回车默认即可,接着会提示选择分区终止扇区位置,这里可以直接回车使用默认即可(这里不使用+*G的原因是,让剩余未分配空间都尽可能利用),然后一路回车即可

    image-20210804170958139

  • 接下来输入c,来重命名新增加的两个分区,选择原system分区的数字,输入名字system,同样的将另一个分区命名为userdata

    image-20210804171254615

  • 输入p,查看所有分区信息,检查分区大小和分区名称是否正确,如下图可以看到25对应分区大小为2GB名称为system,28对应的分区大小为25.2GB名称为userdata,说明修改没有问题

    image-20210804171517220

  • 接着保存分区的改动,输入:w,按提示选择y即可

    image-20210804171742985

  • 最后格式化system分区和userdata分区为ext4

    1
    2
    3
    4
    # 将mmc0blk0p25修改为实际system分区所在分块
    mkfs.ext4 /dev/block/mmc0blk0p25
    # 将mmc0blk0p25修改为实际userdata分区所在分块
    mkfs.ext4 /dev/block/mmc0blk0p28
  • 至此/system分区大小调整完毕,可以用twrp正常刷入编译的rom包了

参考链接