added boot-partition-initramfs-bloat post
This commit is contained in:
120
content/post/boot-partition-initramfs-bloat.md
Normal file
120
content/post/boot-partition-initramfs-bloat.md
Normal file
@@ -0,0 +1,120 @@
|
||||
---
|
||||
title: "The Case of the Bloated Boot"
|
||||
date: 2025-09-22
|
||||
lastmod: 2025-09-22
|
||||
categories: ["Blog"]
|
||||
tags: ["linux"]
|
||||
---
|
||||
When `sudo mkinitcpio -P` fails because your boot partition is full, you've got
|
||||
a fun problem. The culprit? That massive fallback initramfs taking up precious
|
||||
space on a tiny boot partition.
|
||||
|
||||
<!--more-->
|
||||
|
||||
# The Problem
|
||||
|
||||
Picture this: you're dual-booting Linux and running a system update when
|
||||
suddenly `mkinitcpio` fails to generate the larger fallback image. Your boot
|
||||
partition is completely stuffed.
|
||||
|
||||
```bash
|
||||
$ df -h /boot
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/nvme0n1p1 256M 256M 0 100% /boot
|
||||
```
|
||||
|
||||
**Yikes.** Time to investigate what's eating all that space.
|
||||
|
||||
# Damage Assessment
|
||||
|
||||
A quick `du -sh` reveals the usual suspects:
|
||||
|
||||
```bash
|
||||
$ du -sh /boot/*
|
||||
157M /boot/initramfs-linux-fallback.img
|
||||
52M /boot/initramfs-linux.img
|
||||
16M /boot/vmlinuz-linux
|
||||
30M /boot/EFI
|
||||
```
|
||||
|
||||
The fallback initramfs is **three times larger** than the normal one. But why?
|
||||
|
||||
# The Autodetect Mystery
|
||||
|
||||
The secret lies in one simple flag in `/etc/mkinitcpio.d/linux.preset`:
|
||||
|
||||
```bash
|
||||
fallback_options="-S autodetect"
|
||||
```
|
||||
|
||||
That `-S autodetect` flag skips the autodetect hook, which normally shrinks your
|
||||
initramfs by only including modules your hardware actually needs. Without it,
|
||||
mkinitcpio includes **everything**.
|
||||
|
||||
## By the Numbers
|
||||
|
||||
Here's what that means in practice for me:
|
||||
|
||||
| Component | Normal (with autodetect) | Fallback (no autodetect) | Ratio |
|
||||
| :----------------- | -----------------------: | -----------------------: | ------: |
|
||||
| **Kernel modules** | 190 modules | 6,319 modules | **33x** |
|
||||
| **Firmware files** | 711 files | 2,996 files | **4x** |
|
||||
| **Total size** | 52M | 157M | **3x** |
|
||||
|
||||
The fallback image is essentially a universal boot disk that works on _any_
|
||||
hardware — your laptop, your friend's desktop, that ancient server in the
|
||||
closet. It includes drivers for RAID controllers you don't have, network cards
|
||||
from 2003, and GPU firmware for every generation of graphics hardware.
|
||||
|
||||
# The Nuclear Option
|
||||
|
||||
Since I never use the fallback image anyway (live USB for rescue), the
|
||||
solution was just to get rid of this:
|
||||
|
||||
1. **Remove the fallback image** to free immediate space:
|
||||
```bash
|
||||
sudo rm /boot/initramfs-linux-fallback.img
|
||||
```
|
||||
|
||||
2. **Disable future generation** by editing `/etc/mkinitcpio.d/linux.preset`:
|
||||
```bash
|
||||
# Change this line:
|
||||
PRESETS=('default' 'fallback')
|
||||
# To this:
|
||||
PRESETS=('default')
|
||||
```
|
||||
|
||||
3. **Test it works**:
|
||||
```bash
|
||||
sudo mkinitcpio -P
|
||||
```
|
||||
|
||||
Result: boot partition goes from 100% to 39% usage, and future kernel updates
|
||||
won't recreate the bloated fallback.
|
||||
|
||||
# Why It Matters
|
||||
|
||||
The autodetect hook is actually quite clever. On my system with 443MB of total
|
||||
kernel modules available, it correctly identified that I only need 190 of them
|
||||
— things like my specific WiFi driver, filesystem modules for ext4 and LVM, and
|
||||
encryption support for LUKS.
|
||||
|
||||
The fallback includes _everything else too_: drivers for hardware I'll never own
|
||||
(_especially since this is on a laptop_), filesystem support for formats I'll
|
||||
never use, and network protocols from the dawn of time. It's the digital
|
||||
equivalent of packing for a trip by bringing your entire garage of tools "just
|
||||
in case"
|
||||
|
||||
# The Takeaway
|
||||
|
||||
Unless you're regularly swapping hardware or need guaranteed boot recovery from
|
||||
the initramfs itself, the fallback image is dead weight. Modern autodetection
|
||||
works well enough that most people never need it. I've personnally never, ever
|
||||
used the fallback image and for the context of this laptop probably never will
|
||||
as a bootable USB is my go-to for any and all boot issues.
|
||||
|
||||
For those tight boot partitions in dual-boot setups, disabling fallback
|
||||
generation is it. Save the space for kernel updates that actually matter :^)
|
||||
|
||||
And if you _do_ need recovery? Well, that's what live USBs are for, but you're
|
||||
welcome to make your own decisions.
|
||||
Reference in New Issue
Block a user