Android端末にカスタムROMを焼くにシステム領域が足りないためパーティションを拡張する
Google Nexus 5(2013年に発売)にAndroid 10ベースのUnofficialのLineageOS 17をインストールしようとしたところ TWRPで Error 70 がでてインストールできない。調べたら必要領域が足りないらしい。しょうがないので、システム領域を拡張することにした。
前提
Android端末にカスタムROMを入れようとしている時点で前提条件はクリアしているはずなので細かいことは書かない。
- ブートローダーのアンロック(アンロックできてないとそもそもカスタムROMが焼けない)
- カスタムリカバリーがインストールしてある(TWRPがインストール済み)
- adbコマンドが使える(SDK Platform Toolsを入れておく)
注意事項
今回行う方法はシステム領域やユーザーデータなどのパーティションを一度削除した上で、パーティションを再構築する方法であり、OSデータはもちろんユーザーデータも含めてすべて削除されることに注意すること。
本記事に書かれていることを実行したことによって生じる損失について、筆者は一切の責任を負いません。すべて自己責任にて行なってください。
その他
今回行う方法はシステム領域やユーザーデータなどのパーティションを一度削除した上で、パーティションを再構築する方法である。
しかしpartedやgdiskにはパーティションのリサイズ機能が備わっているらしい。(自分はめんどくさいので消して作ることにしたが...。)また、gdiskにはパーティションのバックアップ・リストア機能もあるのだとか。
準備
partedとgdiskのダウンロード
自分は以下のURLから parted_gdisk_fdisk_mkfs.ext4-ARM.zip
をダウンロードして使用した。
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をインストールする。
無事にインストールされ、今の所不具合もなく動作しています。前にインストールしていたAndroid 8のカスタムROMよりサクサク動いている。