如何阻止update-grub扫描所有驱动器?


19

每次update-grub运行时,都会扫描所有硬盘。每个处于待机状态的驱动器将旋转以进入空闲状态。这是浪费能量。我们使用update-grub版本1.98:

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

回归

  1. 文件中有一个GRUB_DISABLE_OS_PROBER=true选项/etc/default/grub。但这似乎仅适用于版本2及更高版本。至少它不会停止扫描我们的1.98版中的所有驱动器。

  2. 有一个/etc/grub.d/20_linux_xen脚本可以作为update-grub的一部分运行。删除所有具有chmod a-x /etc/grub.d/20_linux_xen所有驱动器的用户的执行权限后,仍然可以启动。

如何停止update-grub扫描每个硬盘?


只是一个shell脚本...修改了吗?它仅应在内核更新后运行,这种情况很少发生。
jordanm 2012年

脚本行之一执行/usr/sbin/grub-probe --target=device /。该命令还会导致所有驱动器旋转。这/usr/sbin/grub-probe不是shell脚本。
Pro Backup

您多久跑步一次update-grub?只有在安装新内核时才会发生这种情况,那么谁在乎呢?
psusi 2012年

我知道,它使用的整个皮焦耳都是这么浪费的-如果您在1000台具有3个HDD的计算机上运行update-grub 24/7一个月,这可能会增加一两美分的电费。
tkbx

Answers:


14

在文件/etc/grub.d/30_os-prober中,该行

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

使所有驱动器旋转(待机->空闲)。Os-prober是一个实用程序,可用于在引导驱动器以外的驱动器上查找Linux安装。这是os-prober该被禁用的需求。

  1. 一种方法是删除软件包apt-get --purge remove os-prober
  2. 另一种方法是删除os-prober的可执行权限。首先使用找到os-prober的位置$ which os-prober。输出可能类似于:/usr/bin/os-prober。删除该文件所有用户的可执行权限:# chmod a-x /usr/bin/os-prober
  3. 另一种方法是删除30_os-prober的可执行权限。使用找出30_os-prober的位置$ locate /30_os-prober。输出可能类似于:/etc/grub.d/30_os-prober。删除该文件所有用户的可执行权限:# chmod a-x /etc/grub.d/30_os-prober
  4. 另一种方式是跳过执行/etc/grub.d/30_os-prober。例如,通过使该GRUB_DISABLE_OS_PROBER=true选项在我们的grub版本1.98中起作用。这可以通过将以/etc/grub.d/30_os-prober下行中的代码插入文件中来完成set -e

...

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

5

对于那些想知道是否值得付出努力的人,是的。也许不是为了节能,但今天我遇到了update-grub的问题,因为它想同时探测/ dev / sda(我的硬盘)和/ dev / sdc(USB记忆棒)。如果没有将后者插入我的笔记本电脑,即使我的USB记忆棒上实际上没有安装任何操作系统,也从未从该记忆棒启动,但update-grub会挂起。由于USB记忆棒最近坏了,我需要一种方法来在没有它的情况下继续执行update-grub。幸运的是,GRUB_DISABLE_OS_PROBER=true就做到了。:)


1
我遇到了相反的问题:如果存在USB记忆棒,update-grub将会失败。USB记忆棒有点不寻常,因为它安装了Easy2Boot。但是由于这是在信息亭上执行的,而update-grub命令是通过放在该USB记忆棒上的脚本发出的,因此非常欢迎此解决方案。
noamik

3

(这真的值得花费时间和精力进行修复吗?)

如您所述,探测可能是在grub-mkconfigcall 时发生的grub-probe。您可以grub-mkconfig通过简单地对grub-probe调用结果进行硬编码来进行修改。它是用来填补GRUB_DEVICEGRUB_DEVICE_UUIDGRUB_DEVICE_BOOTGRUB_DEVICE_BOOT_UUID,和GRUB_FS



0

我知道这是一篇过时的文章,但是我找到了另一种方法来完成此任务,而无需更改脚本。在/etc/grub.d/我重命名的文件30_os-prober,以.30_os-prober(开始的一段),并且即使它显示了在同一个地方在更新过程中跳过ls,如果你使用-a

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.