618 的时候换了 Redmi K60 ,有次无聊的时候看了下手机的分区表发现有个 cust 分区有 2G 大。查了下发现 cust 分区是厂商专门用来放推广的 apk 的。 一开始的时候是把 cust 格掉,格掉之后手机不会自动挂载 cust 分区,但也没有影响到其他功能,开机后可以手动挂载上去。 不过 2G 说大不大,说小也不小,放不了什么东西,摆在那里又浪费。 正好刷 DerpFest 要格式化 userdata 分区,所以就想顺便试试看能不能调整下大小。
查看分区表 Disk /dev/block/sda: 61731840 sectors, 235.5 GiB Sector size (logical/physical): 4096/4096 bytes Disk identifier (GUID): E77371AE-5248-4869-98B0-2285DF076732 Partition table holds up to 64 entries Main partition table begins at sector 2 and ends at sector 3 First usable sector is 6, last usable sector is 61731834 Partitions will be aligned on 2-sector boundaries Total free space is 0 sectors (0 bytes) Number Start (sector) End (sector) Size Code Name 1 6 7 8.0 KiB FFFF switch 2 8 15 32.0 KiB A02C ssd 3 16 23 32.0 KiB FFFF dbg 4 24 31 32.0 KiB FFFF bk01 5 32 63 128.0 KiB FFFF bk02 6 64 127 256.0 KiB FFFF bk03 7 128 255 512.0 KiB FFFF bk04 8 256 383 512.0 KiB A02D keystore 9 384 511 512.0 KiB FFFF frp 10 512 1023 2.0 MiB FFFF countrycode 11 1024 2047 4.0 MiB A01F misc 12 2048 4095 8.0 MiB FFFF bk05 13 4096 6143 8.0 MiB FFFF logfs 14 6144 8191 8.0 MiB FFFF ffu 15 8192 12287 16.0 MiB FFFF oops 16 12288 16383 16.0 MiB A021 devinfo 17 16384 20479 16.0 MiB FFFF metadata 18 20480 24575 16.0 MiB FFFF bk06 19 24576 32767 32.0 MiB FFFF bk07 20 32768 49151 64.0 MiB FFFF bk08 21 49152 65535 64.0 MiB A026 persist 22 65536 81919 64.0 MiB FFFF persistbak 23 81920 90111 32.0 MiB FFFF mtdblk 24 90112 104959 58.0 MiB FFFF crash_history 25 104960 129535 96.0 MiB FFFF minidump 26 129536 206335 300.0 MiB A01C rawdump 27 206336 730623 2.0 GiB FFFF cust 28 730624 2958847 8.5 GiB FFFF super 29 2958848 2958879 128.0 KiB FFFF vbmeta_system_a 30 2958880 2958911 128.0 KiB FFFF vbmeta_system_b 31 2958912 2966015 27.8 MiB FFFF bk010 32 2966016 2967039 4.0 MiB FFFF mem 33 2967040 2972159 20.0 MiB FFFF opconfig 34 2972160 2980351 32.0 MiB FFFF mbnconfig 35 2980352 3013119 128.0 MiB A039 rescue 36 3013120 3115519 400.0 MiB FFFF opcust 37 3115520 61731834 223.6 GiB A03A userdata
可以看到 cust
分区有 2.0 GiB
,并且在中间,要调整大小的话只能删掉 cust
及之后的分区再重新创建。 这手机的 recovery 分区在/dev/block/sde
,操作 /dev/block/sda
不会对 recovery 造成影响。 所以接下来重启到 recovery ,我用的是 OrangeFox Recovery 。
备份分区表和分区 既然要对分区表和分区动手,那肯定就先要做备份啦。
sgdisk --print /dev/block/sda > /sdcard/backup/sda.txt dd if =/dev/block/sda of=/sdcard/backup/sdapartitiontable.bak bs=512 count=35dd if =/dev/block/by-name/super of=/sdcard/backup/super.imgdd if =/dev/block/by-name/vbmeta_system_a of=/sdcard/backup/vbmeta_system_a.imgdd if =/dev/block/by-name/vbmeta_system_b of=/sdcard/backup/vbmeta_system_b.imgdd if =/dev/block/by-name/bk010 of=/sdcard/backup/bk010.imgdd if =/dev/block/by-name/mem of=/sdcard/backup/mem.imgdd if =/dev/block/by-name/opconfig of=/sdcard/backup/opconfig.imgdd if =/dev/block/by-name/mbnconfig of=/sdcard/backup/mbnconfig.imgdd if =/dev/block/by-name/rescue of=/sdcard/backup/rescue.imgdd if =/dev/block/by-name/opcust of=/sdcard/backup/opcust.img
动手 备份好之后就可以调整分区了,用 adb
连上手机的 recovery 。
sgdisk --delete=27 /dev/block/sda sgdisk --delete=28 /dev/block/sda sgdisk --delete=29 /dev/block/sda sgdisk --delete=30 /dev/block/sda sgdisk --delete=31 /dev/block/sda sgdisk --delete=32 /dev/block/sda sgdisk --delete=33 /dev/block/sda sgdisk --delete=34 /dev/block/sda sgdisk --delete=35 /dev/block/sda sgdisk --delete=36 /dev/block/sda sgdisk --delete=37 /dev/block/sda
删除之后就可以重建分区了,cust
挂载失败不影响开机,想来直接删掉也是可以的,不过为了保险我还是建了一个 4M 大小的 cust
分区。
sgdisk --new=27:0:+1024 --typecode=27:FFFF --change-name=27:cust /dev/block/sda sgdisk --new=28:0:+2228224 --typecode=28:FFFF --change-name=28:super /dev/block/sda sgdisk --new=29:0:+32 --typecode=29:FFFF --change-name=29:vbmeta_system_a /dev/block/sda sgdisk --new=30:0:+32 --typecode=30:FFFF --change-name=30:vbmeta_system_b /dev/block/sda sgdisk --new=31:0:+7104 --typecode=31:FFFF --change-name=31:bk010 /dev/block/sda sgdisk --new=32:0:+1024 --typecode=32:FFFF --change-name=32:mem /dev/block/sda sgdisk --new=33:0:+5120 --typecode=33:FFFF --change-name=33:opconfig /dev/block/sda sgdisk --new=34:0:+8192 --typecode=34:FFFF --change-name=34:mbnconfig /dev/block/sda sgdisk --new=35:0:+32768 --typecode=35:A039 --change-name=35:rescue /dev/block/sda sgdisk --new=36:0:+102400 --typecode=36:FFFF --change-name=36:opcust /dev/block/sda sgdisk --new=37:0:0 --typecode=37:A03A --change-name=37:userdata /dev/block/sda
中间会出警告说 typecode FFFF
无效,会被改成 8300
,不管他。 然后重启进 recovery。
恢复 这时候 recovery 会提示各种错误,但是不影响 adb
和 fastboot
的使用。可以把之前备份的分区用 dd
或者 fastboot
刷回去。 我用的是 fastboot
,在 OrangeFox Recovery 里面点启用 fastboot 电脑会提示没有驱动,不过重启选项里面会有 reboot to Bootloader
。 进到 Bootloader 之后开始恢复。
fastboot flash super backup/super.img fastboot flash vbmeta_system_a backup/vbmeta_system_a.img fastboot flash vbmeta_system_b backup/vbmeta_system_b.img fastboot flash bk010 backup/bk010.img fastboot flash mem backup/mem.img fastboot flash opconfig backup/opconfig.img fastboot flash mbnconfig backup/mbnconfig.img fastboot flash rescue backup/rescue.img fastboot flash opcust backup/opcust.img
这次因为要刷 DerpFest,所以重启进 recovery 刷入 DerpFest 再格式化 userdata
分区然后重启。 不刷的话在进 Bootloader 之前,用 recovery 格式化 userdata
分区,恢复完备份的分区后直接重启应该就可以开机了。
完成 开机后再查看分区表,可以看到 cust
变成 4.0 MiB
,userdata
也变成 225.6 GiB
了。
Disk /dev/block/sda: 61731840 sectors, 235.5 GiB Sector size (logical/physical): 4096/4096 bytes Disk identifier (GUID): E77371AE-5248-4869-98B0-2285DF076732 Partition table holds up to 64 entries Main partition table begins at sector 2 and ends at sector 3 First usable sector is 6, last usable sector is 61731834 Partitions will be aligned on 2-sector boundaries Total free space is 0 sectors (0 bytes) Number Start (sector) End (sector) Size Code Name 1 6 7 8.0 KiB FFFF switch 2 8 15 32.0 KiB A02C ssd 3 16 23 32.0 KiB FFFF dbg 4 24 31 32.0 KiB FFFF bk01 5 32 63 128.0 KiB FFFF bk02 6 64 127 256.0 KiB FFFF bk03 7 128 255 512.0 KiB FFFF bk04 8 256 383 512.0 KiB A02D keystore 9 384 511 512.0 KiB FFFF frp 10 512 1023 2.0 MiB FFFF countrycode 11 1024 2047 4.0 MiB A01F misc 12 2048 4095 8.0 MiB FFFF bk05 13 4096 6143 8.0 MiB FFFF logfs 14 6144 8191 8.0 MiB FFFF ffu 15 8192 12287 16.0 MiB FFFF oops 16 12288 16383 16.0 MiB A021 devinfo 17 16384 20479 16.0 MiB FFFF metadata 18 20480 24575 16.0 MiB FFFF bk06 19 24576 32767 32.0 MiB FFFF bk07 20 32768 49151 64.0 MiB FFFF bk08 21 49152 65535 64.0 MiB A026 persist 22 65536 81919 64.0 MiB FFFF persistbak 23 81920 90111 32.0 MiB FFFF mtdblk 24 90112 104959 58.0 MiB FFFF crash_history 25 104960 129535 96.0 MiB FFFF minidump 26 129536 206335 300.0 MiB A01C rawdump 27 206336 207359 4.0 MiB 8300 cust 28 207360 2435583 8.5 GiB 8300 super 29 2435584 2435615 128.0 KiB 8300 vbmeta_system_a 30 2435616 2435647 128.0 KiB 8300 vbmeta_system_b 31 2435648 2442751 27.8 MiB 8300 bk010 32 2442752 2443775 4.0 MiB 8300 mem 33 2443776 2448895 20.0 MiB 8300 opconfig 34 2448896 2457087 32.0 MiB 8300 mbnconfig 35 2457088 2489855 128.0 MiB A039 rescue 36 2489856 2592255 400.0 MiB 8300 opcust 37 2592256 61731834 225.6 GiB A03A userdata