Difference between revisions of "Partition Layout"

From postmarketOS
Jump to navigation Jump to search
Line 1: Line 1:
=== General partition layout (installation image) ===
=== General partition layout (installation image) ===
{{note|The postmarketOS initramfs detects the partitions by their partition label.}}
<pre class="shell">/dev/installp1 # label: pmOS_boot (contains kernel, initramfs, initramfs-extra)
/dev/installp2 # label: pmOS_root (encrypted, unless --no-fde is specified)</pre>
<pre class="shell">/dev/installp1 # pmOS boot (contains kernel, initramfs, initramfs-extra)
/dev/installp2 # pmOS root (encrypted, unless --no-fde is specified)</pre>
=== SD card ===
=== SD card ===

Revision as of 00:47, 23 January 2018

General partition layout (installation image)

The postmarketOS initramfs detects the partitions by their partition label.
/dev/installp1 # label: pmOS_boot (contains kernel, initramfs, initramfs-extra)
/dev/installp2 # label: pmOS_root (encrypted, unless --no-fde is specified)

SD card

This is the least awkward layout - both partitions from above get directly created on the SD card. If your device has a sdcard slot, it is recommended to use it. Because then you don't wear down the internal flash storage of the device and don't need to worry about the phone's internal storage partition layout.


$ ./pmbootstrap.py install --sdcard /dev/mmcblkX

Android internal storage

We don't want to modify the partition layout on the internal storage of Android systems. Because this seems somewhat risky, and then users couldn't simply install another ROM such as LineageOS anymore. So we came up with the following:

The Android internal storage is already partitioned - the layout seems to be different for every device, as well as the numbers they have assigned. But most notably the devices have the following partitions:


We usually flash a boot.img file (which is the kernel + initramfs) to Android's boot partition (see also: deviceinfo_flash_methods) - because that is what works and what all other ROMs do. Now the interesting part is the system partition, where we flash our installation image. But the installation image already has a partition layout and own partitions! So you will have subpartitions. In the end, it will look like this:

systemp1 # pmOS boot partition, only initramfs-extra gets used from there
systemp2 # pmOS (un)encrypted root filesystem

The initramfs (in the boot.img file!) will automatically find and mount the pmOS boot and root partition, load the initramfs-extra (which contains additional files, it was split to save space) and take care of booting through until OpenRC takes over.

The userdata partition is not used yet (proposal to do that is in #60). But as we are pretty flexible, you can also flash pmOS to the userdata partition, if it has more space and you can't fit it on the system partition. The initramfs will detect it anyway. Just make sure, that you don't have it flashed to both partitions!
To flash to the userdata partition instead of the system partition, use pmbootstrap flasher flash_system --partition=USERDATA.

Future ideas

See also: Allow booting from an image file (/data/postmarketOS.img) instead of flashing to a partition (#953)

There might be scenarios, in which the partition type of the system partition can not be changed through the flasher, because it only allows yaffs2 or simg with ext4 support (during research for the mozilla flame, we found that to be the case (#299) - however, it also has an SD slot, so we did not continue this way (#337)).

A proposal we have for that case, is to have one big ext4/yaffs partition, and include the whole system image file inside that. Then we would adjust the initramfs code to find the boot and root partitions inside that, and teach it how to resize the whole thing to the maximum partition size. We already did some experiments, and so far everything worked (talk to drebrez or ollieparanoid).