How to stop update-grub from scanning all drives?

Every time update-grub is run all hard drives are scanned. Each drives that is in standby state will spin up to go idle. This is a waste of energy. We use update-grub version 1.98:

# update-grub -v
grub-mkconfig (GRUB) 1.98+20100804-14+squeeze1

  1. There is a GRUB_DISABLE_OS_PROBER=true option in the /etc/default/grub file. But that seems to only work from version 2 and up. At least it doesn’t stop scanning all drives in our version 1.98.
  2. There is a /etc/grub.d/20_linux_xen script that might be run as a part of update-grub. After removing execute rights for all users with chmod a-x /etc/grub.d/20_linux_xen all drives do still spin up.

How to stop update-grub from scanning each and every hard drive?


Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

In file /etc/grub.d/30_os-prober the line

OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"

makes all drives spin (standby -> idle). Os-prober is a utility to find Linux installations at drives other then your boot drive. It is the os-prober that needs to be disabled.
  1. One way is to remove the package: apt-get --purge remove os-prober.
  2. Another way is to remove executable rights for os-prober. First find the location of os-prober using $ which os-prober. Output might look like: /usr/bin/os-prober. The remove the executable rights for all users for that file: # chmod a-x /usr/bin/os-prober
  3. Another way is to remove executable rights for 30_os-prober. Find the location of 30_os-prober using $ locate /30_os-prober. Output might look like: /etc/grub.d/30_os-prober. The remove the executable rights for all users for that file: # chmod a-x /etc/grub.d/30_os-prober
  4. Yet another way is to skip the execution of /etc/grub.d/30_os-prober. For example by making the GRUB_DISABLE_OS_PROBER=true option work in our grub version 1.98. This can be done by inserting in file /etc/grub.d/30_os-prober the code below the line set -e:

if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then
  exit 0

Method 2

For those wondering if it’s really worth the effort, yes it is. Perhaps not for energy saving but today I encountered a problem with update-grub as it wanted to probe for both /dev/sda (my harddisk) and /dev/sdc (a USB-stick). Without the latter inserted into my laptop, update-grub would hang, even though there is actually no OS on my USB-stick installed nor did I ever boot from this stick. As the USB-stick recently broke, I needed a way for update-grub to continue (alive) without it. Fortuately, GRUB_DISABLE_OS_PROBER=true just did the trick. 🙂

Method 3

(Is this really worth the time and effort to fix?)

As you mentioned, the probing is probably happening when grub-mkconfig calls grub-probe. You could modify grub-mkconfig by simply hardcoding the result of the grub-probe calls. It is used to fill GRUB_DEVICE, GRUB_DEVICE_UUID, GRUB_DEVICE_BOOT, GRUB_DEVICE_BOOT_UUID, and GRUB_FS.

Method 4

See my solution here to selectively disable which partitions are checked by os-prober with a small patch.

The configuration of GRUB_OS_PROBER_SKIP_LIST="[email protected]_path" in /etc/default/grub:

  • reduces the numbers of devices in ${OSPROBED} used by /etc/grub.d/30_os-prober
  • which stops the check with ${grub_probe} --target=fs_uuid --device

Method 5

I know this is an old post, but I found another way to accomplish this that doesn’t involve making changes to the scripts. in /etc/grub.d/ I renamed the file 30_os-prober to .30_os-prober (start with a period) and it is skipped during the update even though it shows in the same place in ls if you use -a.

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Notify of
Inline Feedbacks
View all comments