For my current system, I need the following modules (and their dependencies) to boot (mount the real root): ahci, sd_mod, btrfs (which are drivers for the sata controller, disk, and the root filesystem respectively.) If I specify these three in the MODULES array of mkinitcpio.conf, the only hook I need is the base hook. However, if I make use of the block hook and filesystem hook instead of the MODULES array to include the modules I need, I can't boot successfully without the udev hook: Unable to find root device 'UUID=c47a3e43-fed6-4f8a-8e52-71bae7a9f893' So, what is the purpose of the udev hook? What so special is the MODULES array? I even tried to include all modules which are included by the block hook and filesystem hook (with autodetect) explicitly with the MODULES array, to see whether the extra modules were adding factors to cause the failure, yet it still boots fine without the udev hook.