Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nixos/lib/make-ext4-fs: Fix: `resize2fs -M' can leave insufficient slack #125121

Merged
merged 1 commit into from
Jun 1, 2021

Commits on May 31, 2021

  1. nixos/lib/make-ext4-fs: Fix: `resize2fs -M' can leave insufficient slack

    The root filesystem resizing step, `resize2fs -M', does not provide any
    control over the amount of slack left in the result.  It can produce an
    arbitrarily tight fit, depending on how well the payload aligns with
    ext4 data structures.
    
    This is problematic, as NixOS must create a few files and directories
    during its first boot, before the root is enlarged to match the size of
    the containing SD card.
    
    An overly tight fit can cause failures in the first stage:
    
        mkdir: can't create directory '/mnt-root/proc': No space left on device
    
    or in the second stage:
    
        install: cannot create directory '/var': No space left on device
    
    A previous version of `make-ext4-fs' (before PR NixOS#79368) was explicitly
    "reserving" 16 MiB of free space in the final filesystem.  Manually
    calculating the size of an ext4 filesystem is a perilous endeavor,
    however, and the method it employed was apparently unreliable.
    
    Reverting is consequently not a good option.
    
    A solution would be to create some sort of "balloon" occupying inodes
    and blocks in the image prior to invoking `resize2fs -M', and to remove
    these temporary files/directories before the compression step.
    
    This changeset takes the simpler approach of simply dropping the
    resizing step.
    
    Note that this does *not* result in a larger image in general, as the
    current procedure does not truncate the `.img' file anyway.  In fact, it
    has been observed to yield *smaller* compressed images---probably
    because of some "noise" left after resizing.  E.g., before-vs-after:
    
        -r--r--r-- 2 root root 607M  1. Jan 1970  nixos-sd-image-21.11pre-git-x86_64-linux.img.zst
    
        -r--r--r-- 2 root root 606M  1. Jan 1970  nixos-sd-image-21.11pre-git-x86_64-linux.img.zst
    Damien Diederen authored and ztzg committed May 31, 2021
    Configuration menu
    Copy the full SHA
    7c2adb1 View commit details
    Browse the repository at this point in the history