forked from wrenn/wrenn
Shrink minimal rootfs on graceful host agent shutdown
On startup EnsureImageSizes expands the minimal rootfs to the configured disk size. This adds the inverse: ShrinkMinimalImage runs e2fsck + resize2fs -M during graceful shutdown so the image is stored compactly on disk.
This commit is contained in:
@ -104,6 +104,37 @@ func ParseSizeToMB(s string) (int, error) {
|
||||
}
|
||||
}
|
||||
|
||||
// ShrinkMinimalImage shrinks the built-in minimal rootfs back to its minimum
|
||||
// size using resize2fs -M. This is the inverse of EnsureImageSizes and should
|
||||
// be called during graceful shutdown so the image is stored compactly on disk.
|
||||
func ShrinkMinimalImage(wrennDir string) {
|
||||
minimalRootfs := layout.TemplateRootfs(wrennDir, id.PlatformTeamID, id.MinimalTemplateID)
|
||||
shrinkImage(minimalRootfs)
|
||||
}
|
||||
|
||||
// shrinkImage shrinks a single rootfs image to its minimum size.
|
||||
func shrinkImage(rootfs string) {
|
||||
if _, err := os.Stat(rootfs); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
slog.Info("shrinking base image", "path", rootfs)
|
||||
|
||||
if out, err := exec.Command("e2fsck", "-fy", rootfs).CombinedOutput(); err != nil {
|
||||
if exitErr, ok := err.(*exec.ExitError); ok && exitErr.ExitCode() > 1 {
|
||||
slog.Warn("e2fsck before shrink failed", "path", rootfs, "output", string(out), "error", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if out, err := exec.Command("resize2fs", "-M", rootfs).CombinedOutput(); err != nil {
|
||||
slog.Warn("resize2fs -M failed", "path", rootfs, "output", string(out), "error", err)
|
||||
return
|
||||
}
|
||||
|
||||
slog.Info("base image shrunk", "path", rootfs)
|
||||
}
|
||||
|
||||
// expandImage expands a single rootfs image if it is smaller than targetBytes.
|
||||
func expandImage(rootfs string, targetBytes int64, targetMB int) error {
|
||||
info, err := os.Stat(rootfs)
|
||||
|
||||
Reference in New Issue
Block a user