Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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

Regression

  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?

share|improve this question
    
It's just a shell script... Modify it? It should only run after kernel updates, which doesn't occur very often. –  jordanm Nov 17 '12 at 23:04
    
One of the script lines executes /usr/sbin/grub-probe --target=device /. That command also causes all drives to spin up. The /usr/sbin/grub-probe is not a shell script. –  Pro Backup Nov 17 '12 at 23:17
    
How often are you running update-grub? This should only happen when you install a new kernel, so who cares? –  psusi Nov 18 '12 at 3:00
    
I know, that entire picojoule it uses is such a waste - if you ran update-grub 24/7 for a month on 1000 computers with 3 HDDs each, it might add a cent or two to your electric bill. –  tkbx Dec 29 '12 at 21:01

3 Answers 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.

share|improve this answer
up vote 2 down vote accepted

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
fi
share|improve this answer

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. :)

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.