GPT allows a large number of partitions on a drive. In an attempt to reduce the effect that later partitioning changes might have on deployed systems, we are trying to enumerate the known partitions first, while leaving room for future growth. Here’s the current layout:
|1||user state, aka “stateful partition”||User’s browsing history, downloads, cache, etc. Encrypted per-user.|
|2||kernel A||Initially installed kernel.|
|3||rootfs A||Initially installed rootfs.|
|4||kernel B||Alternate kernel, for use by automatic upgrades.|
|5||rootfs B||Alternate rootfs, for use by automatic upgrades.|
|6||kernel C||Minimal-size partition for future third kernel. There are rare cases where a third partition could help us avoid recovery mode (AU in progress + random corruption on boot partition + system crash). We decided it’s not worth the space in V1, but that may change.|
|7||rootfs C||Minimal-size partition for future third rootfs. Same reasons as above.|
|8||OEM customization||Web pages, links, themes, etc. from OEM.|
|9||reserved||Minimal-size partition, for unknown future use.|
|10||reserved||Minimal-size partition, for unknown future use.|
|11||reserved||Minimal-size partition, for unknown future use.|
|12||EFI System Partition||Contains 64-bit grub2 bootloader for EFI BIOSes, and second-stage syslinux bootloader for legacy BIOSes.|
Note that the reserved partitions will actually be present on the image, so that the partition numbering remains constant from now on. Each minimal-size partition (including the C kernel and C rootfs) is only 512 bytes, and is shoved into some space lost to filesystem alignment (between the primary partition table and the stateful partition). 64M of empty space is set aside for use by those reserved partitions if they ever need it.
Bootable USB keys have the same layout, except that kernel B and rootfs B are minimal-size, and partition 1 is limited to 720M. The total USB image size is around 1.5G. When the USB image is installed on a fixed drive, the B image is duplicated from the A image, and partition 1 is made as large as possible so that the entire disk is in use.