Hello Ys world ?

技術的なことや何か役立つこと、日々の活動を記録する

Android端末にカスタムROMを焼くにシステム領域が足りないためパーティションを拡張する

Google Nexus 5(2013年に発売)にAndroid 10ベースのUnofficialのLineageOS 17をインストールしようとしたところ TWRPで Error 70 がでてインストールできない。調べたら必要領域が足りないらしい。しょうがないので、システム領域を拡張することにした。

前提

Android端末にカスタムROMを入れようとしている時点で前提条件はクリアしているはずなので細かいことは書かない。

  1. ブートローダーのアンロック(アンロックできてないとそもそもカスタムROMが焼けない)
  2. カスタムリカバリーがインストールしてある(TWRPがインストール済み)
  3. adbコマンドが使える(SDK Platform Toolsを入れておく)

注意事項

今回行う方法はシステム領域やユーザーデータなどのパーティションを一度削除した上で、パーティションを再構築する方法であり、OSデータはもちろんユーザーデータも含めてすべて削除されることに注意すること。

本記事に書かれていることを実行したことによって生じる損失について、筆者は一切の責任を負いません。すべて自己責任にて行なってください。

その他

今回行う方法はシステム領域やユーザーデータなどのパーティションを一度削除した上で、パーティションを再構築する方法である。

しかしpartedやgdiskにはパーティションのリサイズ機能が備わっているらしい。(自分はめんどくさいので消して作ることにしたが...。)また、gdiskにはパーティションのバックアップ・リストア機能もあるのだとか。

準備

partedとgdiskのダウンロード

自分は以下のURLから parted_gdisk_fdisk_mkfs.ext4-ARM.zip をダウンロードして使用した。

forum.xda-developers.com

Android端末の接続確認

リカバリーモードを起動し、Android Debug Bridge (adb)でAndroid端末が接続できていることを確認する。

$ adb devices
List of devices attached
02bba21908e6bd54        device

パーティションエディタをコピー

PCからAndroid端末にpartedとgdiskをコピーする。以下の {ファイルパス} にそれぞれコピーするファイルのパスを入力または、ファイルをドラッグする。

adbのコマンドの詳細については Android Debug Bridge (adb)  |  Android Developers を参照。

$ adb push {ファイルパス} /

adbを用いてAndroid端末のシェルを起動

$ adb shell

パーティションエディタがコピーされていることを確認

~ # ls
cache                        proc
charger                      property_contexts
data                         res
default.prop                 root
dev                          sbin
etc                          sdcard
file_contexts                seapp_contexts
firmware                     selinux_version
fstab.hammerhead             sepolicy
gdisk                        service_contexts
init                         sideload
init.rc                      sys
init.recovery.hammerhead.rc  system
init.recovery.hlthchrg.rc    tmp
init.recovery.service.rc     twres
init.recovery.usb.rc         ueventd.hammerhead.rc
license                      ueventd.rc
parted                       usb-otg
persist                      vendor

パーティションエディタに実行権限を付与

~ # chmod +x parted
~ # chmod +x gdisk

バイスファイルを確認

バイスファイルの確認を行う。Nexus 5では mmcblk0 となるが、端末によっては mmc0blk0 となる場合もあるため確認すること。

~ # ls /dev/block
bootdevice   mmcblk0p1    mmcblk0p19   mmcblk0p28   platform     ram3
loop0        mmcblk0p10   mmcblk0p2    mmcblk0p29   ram0         ram4
loop1        mmcblk0p11   mmcblk0p20   mmcblk0p3    ram1         ram5
loop2        mmcblk0p12   mmcblk0p21   mmcblk0p4    ram10        ram6
loop3        mmcblk0p13   mmcblk0p22   mmcblk0p5    ram11        ram7
loop4        mmcblk0p14   mmcblk0p23   mmcblk0p6    ram12        ram8
loop5        mmcblk0p15   mmcblk0p24   mmcblk0p7    ram13        ram9
loop6        mmcblk0p16   mmcblk0p25   mmcblk0p8    ram14
loop7        mmcblk0p17   mmcblk0p26   mmcblk0p9    ram15
mmcblk0      mmcblk0p18   mmcblk0p27   mmcblk0rpmb  ram2

変更前のパーティション情報の確認

partedでmmcblk0を開く

~ # /parted /dev/block/mmcblk0
GNU Parted 3.2
Using /dev/block/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.

パーティションテーブルの確認

(parted) unit MiB
(parted) p
Model: MMC SEM16G (sd/mmc)
Disk /dev/block/mmcblk0: 15028MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start     End       Size      File system  Name      Flags
 1      0.50MiB   64.5MiB   64.0MiB   fat16        modem     msftdata
 2      64.5MiB   65.5MiB   1.00MiB                sbl1
 3      65.5MiB   66.0MiB   0.50MiB                rpm
 4      66.0MiB   66.5MiB   0.50MiB                tz
 5      66.5MiB   67.0MiB   0.50MiB                sdi
 6      67.0MiB   67.5MiB   0.50MiB                aboot
 7      67.5MiB   69.5MiB   2.00MiB                pad       msftdata
 8      69.5MiB   70.5MiB   1.00MiB                sbl1b
 9      70.5MiB   71.0MiB   0.50MiB                tzb
10      71.0MiB   71.5MiB   0.50MiB                rpmb
11      71.5MiB   72.0MiB   0.50MiB                abootb
12      72.0MiB   75.0MiB   3.00MiB                modemst1
13      75.0MiB   78.0MiB   3.00MiB                modemst2
14      78.0MiB   78.5MiB   0.50MiB                metadata
15      78.5MiB   94.5MiB   16.0MiB                misc
16      94.5MiB   110MiB    16.0MiB   ext4         persist
17      111MiB    113MiB    3.00MiB                imgdata
18      114MiB    135MiB    22.0MiB                laf
19      136MiB    157MiB    22.0MiB                boot
20      158MiB    179MiB    22.0MiB                recovery
21      180MiB    182MiB    3.00MiB                fsg
22      183MiB    183MiB    0.50MiB                fsc
23      183MiB    183MiB    0.50MiB                ssd
24      184MiB    184MiB    0.50MiB                DDR
25      184MiB    1208MiB   1024MiB   ext4         system
26      1208MiB   1238MiB   30.0MiB                crypto
27      1238MiB   1938MiB   700MiB    ext4         cache     msftdata
28      1938MiB   14538MiB  12600MiB  ext4         userdata  msftdata
29      15028MiB  15028MiB  0.01MiB                grow      msftdata

gdiskでmmcblk0を開く

~ # /gdisk /dev/block/mmcblk0
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

パーティションテーブルの確認

Command (? for help): p
Disk /dev/block/mmcblk0: 30777344 sectors, 14.7 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 98101B32-BBE2-4BF2-A06E-2BB33D000C20
Partition table holds up to 32 entries
Main partition table begins at sector 2 and ends at sector 9
First usable sector is 34, last usable sector is 30777310
Partitions will be aligned on 4-sector boundaries
Total free space is 1004465 sectors (490.5 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            1024          132095   64.0 MiB    0700  modem
   2          132096          134143   1024.0 KiB  FFFF  sbl1
   3          134144          135167   512.0 KiB   FFFF  rpm
   4          135168          136191   512.0 KiB   FFFF  tz
   5          136192          137215   512.0 KiB   FFFF  sdi
   6          137216          138239   512.0 KiB   FFFF  aboot
   7          138240          142335   2.0 MiB     0700  pad
   8          142336          144383   1024.0 KiB  FFFF  sbl1b
   9          144384          145407   512.0 KiB   FFFF  tzb
  10          145408          146431   512.0 KiB   FFFF  rpmb
  11          146432          147455   512.0 KiB   FFFF  abootb
  12          147456          153599   3.0 MiB     FFFF  modemst1
  13          153600          159743   3.0 MiB     FFFF  modemst2
  14          159744          160767   512.0 KiB   8301  metadata
  15          160768          193535   16.0 MiB    FFFF  misc
  16          193536          226303   16.0 MiB    8300  persist
  17          226304          232447   3.0 MiB     FFFF  imgdata
  18          232448          277503   22.0 MiB    FFFF  laf
  19          277504          322559   22.0 MiB    FFFF  boot
  20          322560          367615   22.0 MiB    FFFF  recovery
  21          367616          373759   3.0 MiB     FFFF  fsg
  22          373760          374783   512.0 KiB   FFFF  fsc
  23          374784          375807   512.0 KiB   FFFF  ssd
  24          375808          376831   512.0 KiB   FFFF  DDR
  25          376832         2473983   1024.0 MiB  0700  system
  26         2473984         2535423   30.0 MiB    FFFF  crypto
  27         2535424         3969023   700.0 MiB   0700  cache
  28         3969024        29773824   12.3 GiB    0700  userdata
  29        30777300        30777310   5.5 KiB     0700  grow

パーティションの編集

今回行う方法はシステム領域やユーザーデータなどのパーティションを一度削除した上で、パーティションを再構築する方法であり、OSデータはもちろんユーザーデータも含めてすべて削除されることに注意すること。

すべて自己責任にて行なってください。

パーティションの削除

上記で確認したパーティション番号を入力して、パーティションを削除する。下記に書かれているもの以外を削除すると、ブートローダーやリカバリーモードすら起動できなくなる可能性があるので注意。

Command (? for help): d
Partition number (1-29): 25

Command (? for help): d 26
Partition number (1-29): 26

Command (? for help): d
Partition number (1-29): 27

Command (? for help): d 28
Partition number (1-29): 28

Command (? for help): d
Partition number (1-29): 29

削除後のパーティションの確認

Command (? for help): p
Disk /dev/block/mmcblk0: 30777344 sectors, 14.7 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 98101B32-BBE2-4BF2-A06E-2BB33D000C20
Partition table holds up to 32 entries
Main partition table begins at sector 2 and ends at sector 9
First usable sector is 34, last usable sector is 30777310
Partitions will be aligned on 4-sector boundaries
Total free space is 30401469 sectors (14.5 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            1024          132095   64.0 MiB    0700  modem
   2          132096          134143   1024.0 KiB  FFFF  sbl1
   3          134144          135167   512.0 KiB   FFFF  rpm
   4          135168          136191   512.0 KiB   FFFF  tz
   5          136192          137215   512.0 KiB   FFFF  sdi
   6          137216          138239   512.0 KiB   FFFF  aboot
   7          138240          142335   2.0 MiB     0700  pad
   8          142336          144383   1024.0 KiB  FFFF  sbl1b
   9          144384          145407   512.0 KiB   FFFF  tzb
  10          145408          146431   512.0 KiB   FFFF  rpmb
  11          146432          147455   512.0 KiB   FFFF  abootb
  12          147456          153599   3.0 MiB     FFFF  modemst1
  13          153600          159743   3.0 MiB     FFFF  modemst2
  14          159744          160767   512.0 KiB   8301  metadata
  15          160768          193535   16.0 MiB    FFFF  misc
  16          193536          226303   16.0 MiB    8300  persist
  17          226304          232447   3.0 MiB     FFFF  imgdata
  18          232448          277503   22.0 MiB    FFFF  laf
  19          277504          322559   22.0 MiB    FFFF  boot
  20          322560          367615   22.0 MiB    FFFF  recovery
  21          367616          373759   3.0 MiB     FFFF  fsg
  22          373760          374783   512.0 KiB   FFFF  fsc
  23          374784          375807   512.0 KiB   FFFF  ssd
  24          375808          376831   512.0 KiB   FFFF  DDR

パーティションの作成

以下のコマンドでは変更前のパーティションのタイプコードと違うコード(例:systemnの0700をa006)を入力していますが、OSインストール後に確認したところ変更前と同じものになっていたので大丈夫であると思われる。心配であれば変更前のものと同じものを入力してください。

Command (? for help): n
Partition number (25-32, default 25):
First sector (34-30777310, default = 376832) or {+-}size{KMGTP}:
Last sector (376832-30777310, default = 30777310) or {+-}size{KMGTP}: +1280MiB
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): a006
Changed type of partition to 'Android system'

Command (? for help): n
Partition number (26-32, default 26):
First sector (34-30777310, default = 2998272) or {+-}size{KMGTP}:
Last sector (2998272-30777310, default = 30777310) or {+-}size{KMGTP}: +30MiB
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (27-32, default 27):
First sector (34-30777310, default = 3059712) or {+-}size{KMGTP}:
Last sector (3059712-30777310, default = 30777310) or {+-}size{KMGTP}: +700MiB
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): a007
Changed type of partition to 'Android cache'

Command (? for help): n
Partition number (28-32, default 28):
First sector (34-30777310, default = 4493312) or {+-}size{KMGTP}:
Last sector (4493312-30777310, default = 30777310) or {+-}size{KMGTP}: +12600MiB
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): a008
Changed type of partition to 'Android data'

Command (? for help): n
Partition number (29-32, default 29):
First sector (34-30777310, default = 4493324) or {+-}size{KMGTP}:
Last sector (4493324-30777310, default = 30777310) or {+-}size{KMGTP}: +5.5KiB
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 0700
Changed type of partition to 'Microsoft basic data'

作成したパーティションの確認

Command (? for help): p
Disk /dev/block/mmcblk0: 30777344 sectors, 14.7 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 98101B32-BBE2-4BF2-A06E-2BB33D000C20
Partition table holds up to 32 entries
Main partition table begins at sector 2 and ends at sector 9
First usable sector is 34, last usable sector is 30777310
Partitions will be aligned on 4-sector boundaries
Total free space is 480184 sectors (234.5 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            1024          132095   64.0 MiB    0700  modem
   2          132096          134143   1024.0 KiB  FFFF  sbl1
   3          134144          135167   512.0 KiB   FFFF  rpm
   4          135168          136191   512.0 KiB   FFFF  tz
   5          136192          137215   512.0 KiB   FFFF  sdi
   6          137216          138239   512.0 KiB   FFFF  aboot
   7          138240          142335   2.0 MiB     0700  pad
   8          142336          144383   1024.0 KiB  FFFF  sbl1b
   9          144384          145407   512.0 KiB   FFFF  tzb
  10          145408          146431   512.0 KiB   FFFF  rpmb
  11          146432          147455   512.0 KiB   FFFF  abootb
  12          147456          153599   3.0 MiB     FFFF  modemst1
  13          153600          159743   3.0 MiB     FFFF  modemst2
  14          159744          160767   512.0 KiB   8301  metadata
  15          160768          193535   16.0 MiB    FFFF  misc
  16          193536          226303   16.0 MiB    8300  persist
  17          226304          232447   3.0 MiB     FFFF  imgdata
  18          232448          277503   22.0 MiB    FFFF  laf
  19          277504          322559   22.0 MiB    FFFF  boot
  20          322560          367615   22.0 MiB    FFFF  recovery
  21          367616          373759   3.0 MiB     FFFF  fsg
  22          373760          374783   512.0 KiB   FFFF  fsc
  23          374784          375807   512.0 KiB   FFFF  ssd
  24          375808          376831   512.0 KiB   FFFF  DDR
  25          376832         2998271   1.3 GiB     A006  Android system
  26         2998272         3059711   30.0 MiB    8300  Linux filesystem
  27         3059712         4493311   700.0 MiB   A007  Android cache
  28         4493312        30298111   12.3 GiB    A008  Android data
  29        30298112        30298116   2.5 KiB     0700  Microsoft basic data

パーティション名の変更

Command (? for help): c
Partition number (1-29): 25
Enter name: system

Command (? for help): c
Partition number (1-29): 26
Enter name: crypto

Command (? for help): c
Partition number (1-29): 27
Enter name: cache

Command (? for help): c
Partition number (1-29): 28
Enter name: userdata

Command (? for help): c
Partition number (1-29): 29
Enter name: grow

名前変更後のパーティションの確認

Command (? for help): p
Disk /dev/block/mmcblk0: 30777344 sectors, 14.7 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 98101B32-BBE2-4BF2-A06E-2BB33D000C20
Partition table holds up to 32 entries
Main partition table begins at sector 2 and ends at sector 9
First usable sector is 34, last usable sector is 30777310
Partitions will be aligned on 4-sector boundaries
Total free space is 480184 sectors (234.5 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            1024          132095   64.0 MiB    0700  modem
   2          132096          134143   1024.0 KiB  FFFF  sbl1
   3          134144          135167   512.0 KiB   FFFF  rpm
   4          135168          136191   512.0 KiB   FFFF  tz
   5          136192          137215   512.0 KiB   FFFF  sdi
   6          137216          138239   512.0 KiB   FFFF  aboot
   7          138240          142335   2.0 MiB     0700  pad
   8          142336          144383   1024.0 KiB  FFFF  sbl1b
   9          144384          145407   512.0 KiB   FFFF  tzb
  10          145408          146431   512.0 KiB   FFFF  rpmb
  11          146432          147455   512.0 KiB   FFFF  abootb
  12          147456          153599   3.0 MiB     FFFF  modemst1
  13          153600          159743   3.0 MiB     FFFF  modemst2
  14          159744          160767   512.0 KiB   8301  metadata
  15          160768          193535   16.0 MiB    FFFF  misc
  16          193536          226303   16.0 MiB    8300  persist
  17          226304          232447   3.0 MiB     FFFF  imgdata
  18          232448          277503   22.0 MiB    FFFF  laf
  19          277504          322559   22.0 MiB    FFFF  boot
  20          322560          367615   22.0 MiB    FFFF  recovery
  21          367616          373759   3.0 MiB     FFFF  fsg
  22          373760          374783   512.0 KiB   FFFF  fsc
  23          374784          375807   512.0 KiB   FFFF  ssd
  24          375808          376831   512.0 KiB   FFFF  DDR
  25          376832         2998271   1.3 GiB     A006  system
  26         2998272         3059711   30.0 MiB    8300  crypto
  27         3059712         4493311   700.0 MiB   A007  cache
  28         4493312        30298111   12.3 GiB    A008  userdata
  29        30298112        30298116   2.5 KiB     0700  grow

パーティション情報の書き込み

パーティション情報を書き込むと元に戻せないので注意してください。

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/block/mmcblk0.
The operation has completed successfully.

フラグやフォーマットの指定

変更前のパーティション情報を元に、パーティションのフラグ設定やフォーマットの指定を行う。

partedで開く

~ # /parted /dev/block/mmcblk0
GNU Parted 3.2
Using /dev/block/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.

Flagの設定

(parted) set 25
Flag to Invert? msftdata
New state?  [on]/off? on

(parted) set 27
Flag to Invert? msftdata
New state?  [on]/off? on

(parted) set 28 msftdata
New state?  [on]/off? on

ファイルシステムext4にフォーマット

~ # make_ext4fs /dev/block/mmcblk0p27
Creating filesystem with parameters:
    Size: 734003200
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7472
    Inode size: 256
    Journal blocks: 2800
    Label:
    Blocks: 179200
    Block groups: 6
    Reserved block group size: 47
Created filesystem with 11/44832 inodes and 5813/179200 blocks

~ # make_ext4fs /dev/block/mmcblk0p28
Creating filesystem with parameters:
    Size: 13212057600
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8160
    Inode size: 256
    Journal blocks: 32768
    Label:
    Blocks: 3225600
    Block groups: 99
    Reserved block group size: 791
Created filesystem with 11/807840 inodes and 91389/3225600 blocks

パーティションの確認

~ # /parted /dev/block/mmcblk0
GNU Parted 3.2
Using /dev/block/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: MMC SEM16G (sd/mmc)
Disk /dev/block/mmcblk0: 15.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name      Flags
 1      524kB   67.6MB  67.1MB  fat16        modem     msftdata
 2      67.6MB  68.7MB  1049kB               sbl1
 3      68.7MB  69.2MB  524kB                rpm
 4      69.2MB  69.7MB  524kB                tz
 5      69.7MB  70.3MB  524kB                sdi
 6      70.3MB  70.8MB  524kB                aboot
 7      70.8MB  72.9MB  2097kB               pad       msftdata
 8      72.9MB  73.9MB  1049kB               sbl1b
 9      73.9MB  74.4MB  524kB                tzb
10      74.4MB  75.0MB  524kB                rpmb
11      75.0MB  75.5MB  524kB                abootb
12      75.5MB  78.6MB  3146kB               modemst1
13      78.6MB  81.8MB  3146kB               modemst2
14      81.8MB  82.3MB  524kB                metadata
15      82.3MB  99.1MB  16.8MB               misc
16      99.1MB  116MB   16.8MB  ext4         persist
17      116MB   119MB   3146kB               imgdata
18      119MB   142MB   23.1MB               laf
19      142MB   165MB   23.1MB               boot
20      165MB   188MB   23.1MB               recovery
21      188MB   191MB   3146kB               fsg
22      191MB   192MB   524kB                fsc
23      192MB   192MB   524kB                ssd
24      192MB   193MB   524kB                DDR
25      193MB   1535MB  1342MB  ext4         system    msftdata
26      1535MB  1567MB  31.5MB               crypto
27      1567MB  2301MB  734MB   ext4         cache     msftdata
28      2301MB  15.5GB  13.2GB  ext4         userdata  msftdata
29      15.5GB  15.5GB  2560B                grow      msftdata

Android端末にカスタムROMを焼く

adb push のコマンドを使い、OSのイメージデータとOpenGAppsをPCからAndroid端末にコピーし、OSイメージとOpenGAppsをインストールする。

f:id:Ysss:20200425143139j:plain

無事にインストールされ、今の所不具合もなく動作しています。前にインストールしていたAndroid 8のカスタムROMよりサクサク動いている。

参考資料

android.stackexchange.com

forum.xda-developers.com