Skip to content

Use multi-threaded unsquashfs to extract untethered images - #247

Merged
jjohnson42 merged 4 commits into
xcat2:masterfrom
Obihoernchen:unsquashfs
Jul 28, 2026
Merged

Use multi-threaded unsquashfs to extract untethered images#247
jjohnson42 merged 4 commits into
xcat2:masterfrom
Obihoernchen:unsquashfs

Conversation

@Obihoernchen

@Obihoernchen Obihoernchen commented Jul 16, 2026

Copy link
Copy Markdown
Member

unsquashfs can use multiple CPU cores during image extraction, significantly reducing boot time.
For example the whole boot time from PXE to shell on a 8-core VM and the default alma10 image, from approximately 45 seconds to 20 seconds. Bigger images and more cores will make this gap even larger.

This PR adds squashfs-tools as a dependency. Since the package is smaller than 1 MB, the additional image size is justified by the performance improvement.

For backward compatibility, the existing cp-based extraction method is used when unsquashfs is unavailable, such as with images built before this change.

The extraction logic has also been moved into the common functions and is now shared between EL9, EL10, and Ubuntu.

Both untethered squashfs images and confluent_multisquash images are supported.

Images must be rebuilt to include unsquashfs and benefit from the faster extraction path.

`unsquashfs` can use multiple CPU cores during image extraction, significantly reducing boot time.
For example the whole boot time from PXE to shell on a 8-core VM, from approximately 45 seconds to 20 seconds.

This PR adds `squashfs-tools` as a dependency. Since the package is smaller than 1 MB, the additional image size is justified by the performance improvement.

For backward compatibility, the existing `cp`-based extraction method is used when `unsquashfs` is unavailable, such as with images built before this change.

The extraction logic has also been moved into the common functions and is now shared between EL9, EL10, and Ubuntu.

Both untethered `squashfs` images and `confluent_multisquash` images are supported.

Images must be rebuilt to include `unsquashfs` and benefit from the faster extraction path.
imageboot falls back to cp when unsquashfs is unavailable, but the build
side did not: a bare dracut_install/copy_exec aborts initramfs generation
when the binary is absent, and the capture prerequisite check refused to
capture the image at all.

Mark the initramfs copies optional and report the missing package as an
advisory rather than a hard prerequisite, so such images still build and
capture, just without the faster extraction path. Widen the EL check to
every release past el8 so future ones inherit it.
source_remote imageboot.sh is the last thing the diskless cmdline hook
runs, so returning early on a failed extraction ended the hook and left
dracut to time out. Falling through instead reaches the existing
/sysroot/sbin/init guard, which reports the failure and holds the node so
it stays reachable over ssh, as it did before extraction was checked.
@jjohnson42
jjohnson42 merged commit 3501f70 into xcat2:master Jul 28, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants