[POC] Double root partition sizes in the initrd#3684
Draft
Conversation
|
One or more environments require approval before deploying workflow runs. Maintainers, please inspect changes carefully for improper handling of secrets or other sensitive information. To approve pending deployments, submit an approved review, or a commented review with |
At this moment, root partition sizes are defined at build time and we have no way to resize them on running devices. On its own, this is a nontrivial problem to solve: * There are two root partitions, rootA and rootB, sandwiched between boot and state, so there is not enough space to grow them * On first boot we resize the data partition to fill the whole disk, moving it around the disk to make more space is very expensive * Though we try to avoid it, some device types do hardcode partition numbers/layout in the bootloader to implement the A/B rollback This patch adds an initrd script that doubles the root partition sizes by doing the following: * Shrink the data partition by 2 * original_root_size * Move rootB to the newly reclaimed space at the end of the disk * Expand rootB to double its original size * Expand rootA to double its original size, using the space formerly occupied by rootB This is obviously a one-time operation. Once rootA has eaten the space originally occupied by rootB, the same trick can't work again. It also creates ambiguity between partition layouts - newly provisioned devices with bigger partitions defined at build time will end up with a different partition layout than devices that went through the growroot procedure in the field. We do accept this as a compromise as on some device types we need to grow the root partitions on existing devices without reprovisioning. Change-type: minor Signed-off-by: Michal Toman <michalt@balena.io>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
At this moment, root partition sizes are defined at build time and we have no way to resize them on running devices.
On its own, this is a nontrivial problem to solve:
This patch adds an initrd script that doubles the root partition sizes by doing the following:
This is obviously a one-time operation. Once rootA has eaten the space originally occupied by rootB, the same trick can't work again. It also creates ambiguity between partition layouts - newly provisioned devices with bigger partitions defined at build time will end up with a different partition layout than devices that went through the growroot procedure in the field.
We do accept this as a compromise as on some device types we need to grow the root partitions on existing devices without reprovisioning.
Contributor checklist
Change-typepresent on at least one commitSigned-off-byis presentReviewer Guidelines