How to Fix ‘Failed to Start Load Kernel Modules’ in Ubuntu

Booting Ubuntu or running system maintenance only for the boot splash to pause with red text displaying: “[FAILED] Failed to start Load Kernel Modules” and systemctl status systemd-modules-load.service reporting exit status 1/FAILURE indicates an issue in the early module initialisation phase. In Ubuntu and Debian-based Linux systems, systemd-modules-load parses configuration files in /etc/modules-load.d/ and /etc/modules to load required hardware drivers, network filters, and virtualization modules into the running kernel via modprobe. When a kernel update leaves obsolete DKMS module references, a virtualisation driver is listed without its parent hypervisor, or a typographical error exists in a configuration file, systemd flags the service as failed. This tutorial outlines how to identify the specific failing kernel module, purge obsolete module declarations, and rebuild initramfs.

Why Does systemd-modules-load.service Fail?

The module loader processes static module lists during startup. Primary causes of failure include:

  • Obsolete or Removed Kernel Drivers: References to VirtualBox guest additions, proprietary Wi-Fi drivers, or WireGuard modules that were uninstalled but left configuration files behind.
  • Typographical Errors in Module Configuration: Syntax errors or non-existent module names inside /etc/modules or /etc/modules-load.d/*.conf.
  • DKMS Compilation Failures: Upgrading to a new Linux kernel version where Dynamic Kernel Module Support (DKMS) failed to compile third-party drivers.
  • Kernel Version Mismatches: Running a newer kernel without updating matching packages in /lib/modules/$(uname -r)/.
  • Blacklisted Hardware Drivers: A module listed in /etc/modules that is simultaneously blacklisted in /etc/modprobe.d/.

Method 1: Inspect Systemd Journal Logs to Identify the Failing Module

The systemd-modules-load service reports the exact module name that triggered the initialisation error.

  1. Open your terminal and run the service status command:
    systemctl status systemd-modules-load.service
  2. To view detailed error messages from the journal log:
    journalctl -u systemd-modules-load.service -b
  3. Scan the output for lines stating: Failed to find module 'module-name' or modprobe: FATAL: Module module-name not found in directory /lib/modules/....
  4. Note the exact name of the missing or failing module.

Method 2: Check and Clean Module Configuration Files

Once you know the failing module name, remove its static declaration from the system configuration folders.

  1. Inspect the primary system modules file:
    sudo nano /etc/modules
  2. If the failing module name is listed there, delete that line or comment it out by adding a # at the beginning of the line.
  3. Next, search the modular configuration directory for files mentioning the problematic module:
    grep -rn "failing-module-name" /etc/modules-load.d/
  4. Open the identified .conf file and remove or comment out the invalid module entry.
  5. Save changes and exit nano (Ctrl + O, then Enter, followed by Ctrl + X).

Method 3: Test and Restart the Module Loading Service

Verify whether the service initialises cleanly after removing invalid declarations.

  1. Restart the systemd module loading service:
    sudo systemctl restart systemd-modules-load.service
  2. Verify that the service is now active and green:
    sudo systemctl status systemd-modules-load.service

Method 4: Rebuild DKMS Modules and Initramfs

If the missing module is a legitimate driver (such as an NVIDIA GPU driver or ZFS module) that failed compilation during a kernel update:

  1. Reconfigure DKMS for all installed kernels:
    sudo dkms autoinstall
  2. Update your initramfs image to synchronize initial ramdisk drivers:
    sudo update-initramfs -u -k all
  3. Reboot your system:
    sudo reboot

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.